![](https://img-blog.csdnimg.cn/20200517224854135.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
深入了解 JVM
ava虚拟机本质上就是一个程序,当它在命令行上启动的时候,就开始执行保存在某字节码文件中的指令。Java语言的可移植性正是建立在Java虚拟机的基础上。任何平台只要装有针对于该平台的Java虚拟机,字节码文件(.class)就可以在该平台上运行。这就是“一次编译,多次运行”。
努力就好其他的不管
不积跬步无以至千里。这一秒不放弃,下一秒就有希望!坚持下去就会成功!
展开
-
JVM垃圾收集器基准报告 – Ionuț Baloșin 如何选择适合你的垃圾回收器
本文使用一组不同的模式描述了一系列Java虚拟机(JVM)垃圾收集器(GC)微基准及其结果。对于当前问题,我包括了AdoptOpenJDK 64位服务器VM版本13(内部版本13 + 33)中的所有垃圾收集器:串行GCParallel / ParallelOld GC(启动Java 7u4 ParallelGC和ParallelOld GC基本上是同一收集器)并发标记扫描CMS GC(目前不建议使用,它将根据JEP 363在Java 14版本中删除)垃圾优先G1 GCShenandoah原创 2020-05-30 18:24:36 · 614 阅读 · 2 评论 -
深入理解java虚拟机—— 虚拟机 新型垃圾收集器 Shenandoah GC, ZGC
(1)、内存:在内存占用、吞吐量和延迟这三项指标里,延迟的重要性日益凸显,越发备受关注。其原因是随着计算机硬件的发展、性能的提升,我们越来越能容忍收集器多占用一点点内存;(2)、吞吐量:硬件性能增长,对软件系统的处理能力是有直接助益的,硬件的规格和性能越高,也有助于降低收集器运行时对应用程序的影响,换句话说,吞吐量会更高。(3)、延迟:对延迟则不是这样,硬件规格提升,准确地说是内存的扩大,对延迟反而会带来负面的效果,这点也是很符合直观思维的:虚拟机要回收完整的1TB的堆内存,毫无疑问要比回收1GB的原创 2020-05-30 17:04:49 · 1253 阅读 · 2 评论 -
深入理解java虚拟机—— 超详细虚拟机垃圾收集器原理,GC 垃圾收集器算法的深度解析,项目中如何选择合适的垃圾收集器
有7中收集器 -- Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1。从JVM区域结构看,可将这些区域划分为“静态内存”和“动态内存”两类。程序计数器、虚拟机栈、本地方法3个区域是“静态”的,因为这几个区域的内存分配和回收都具备确定性,都随着线程而生,随着线程而灭。但Java堆和方法区不一样,内存分配都存在不确定性,只有在程序处于运行期间才能知道会创建哪些对象,这部分内存和回收都是动态的,垃圾收集器所关注的是这原创 2020-05-30 01:10:04 · 813 阅读 · 2 评论 -
深入理解java虚拟机—— 虚拟机 深扒垃圾回收器,再也不怕BAT面试
在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”(“死去”即不可能再被任何途径使用的对象)了。jvm中,程序计数器、虚拟机栈、本地方法栈都是随线程而生随线程而灭,栈帧随着方法的进入和退出做入栈和出栈操作,实现了自动的内存清理,因此,我们的内存垃圾回收主要集中于 java 堆和方法区中,在程序运行期间,这部分内存的分配和使用都是动态的.为什么需要了解垃圾回收目前内存的动态分配与内存原创 2020-05-27 23:40:33 · 401 阅读 · 3 评论 -
深入理解java虚拟机—— 一张万能的JVM虚拟机架构图看懂了虚拟机也就没什么了
辛辛苦苦树立了整整一个晚上,只要有价值就是值得的。希望大家留下宝贵意见。1、前篇介绍了【JAVA虚拟机堆内存结构以及堆内存作用对象回收机制】,主要包含四部分 一、堆区(Heap) 二、对象的内存布局 三、对象的访问定位 四、Java堆的内存划分2、前篇博文已将对JVM虚拟机内存中的 方法栈 【JAVA虚拟机内存结构之虚拟机栈(JVM Stack)】做了详细的介绍,栈的四大部分:虚拟机栈主要用于存储四部分内容栈帧(Stack Frame)...原创 2020-05-26 23:11:33 · 465 阅读 · 0 评论 -
深入理解java虚拟机——JAVA虚拟机程序计数器深度解析这一篇就够了
开篇介绍1、前篇介绍了【JAVA虚拟机堆内存结构以及堆内存作用对象回收机制】,主要包含四部分 一、堆区(Heap) 二、对象的内存布局 三、对象的访问定位 四、Java堆的内存划分2、前篇博文已将对JVM虚拟机内存中的 方法栈 【JAVA虚拟机内存结构之虚拟机栈(JVM Stack)】做了详细的介绍,栈的四大部分:虚拟机栈主要用于存储四部分内容栈帧(Stack Frame) ------局部变量表 --...原创 2020-05-25 22:25:17 · 1009 阅读 · 1 评论 -
深入理解java虚拟机——堆区,学习java内存分布这一篇就够了
在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定,为对象分配空间的任务实际上便等同于把一块确定大小的内存块从Java堆中划分出来。假设Java堆中内存是绝对规整的,所有被使用过的内存都被放在一边,空闲的内存被放在另一边,中间放着一个指针作为分界点的指示器,那所分配内存就仅仅是把那个指针向空闲空间方向挪动一段与对象大小相等的距离,这种分配方式称为“指针碰撞”(Bump The Pointer)但如果Java堆中的内存并不是规整的,已被使用的内存和空闲的内原创 2020-05-24 17:11:47 · 3109 阅读 · 2 评论 -
深入理解java虚拟机——java内存结构之虚拟机栈(JVM Stack)线程私有区域如何调度方法
虚拟机栈(JVM Stack)的介绍与程序计数器一样,Java虚拟机栈(Java Virtual Machine Stack)也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的线程内存模型:每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态连接、方法出口等信息。每一个方法被调用直至执行完毕的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。 局部变量表中存储着方法的相关局部变量,包括各种基...原创 2020-05-20 22:51:39 · 1111 阅读 · 0 评论 -
深入理解java虚拟机—— java虚拟机内存结构虚拟机的内存模型架构解析
学习目标:由 JVM 引发的故障问题,无论在我们开发过程中还是生产环境下都是非常常见的,所有掌握好jvm,可以帮我本排查故障。 OutOfMemoryError(OOM) 内存溢出问题,Tomcat 容器中加载项目过多导致的 OOM 问题。 定位JVM哪里发生内存溢出了,为什么会内存溢出呢?如何监控 JVM运行。 JVM性能调优,JVM的内存区域划分,内存分配比例,并且可以通过JVM参数来反向定位代码问题,优化代码结构。 从JVM本质上了解线程并发安全的实现原理,以及与操作系统如何结合...原创 2020-05-19 23:15:42 · 380 阅读 · 0 评论 -
深入理解java虚拟机——如何下载hotspot、jdk源码
为什么要学习jvm学习JVM对于一个Java程序员的好处大概可以概括为下8点:了解java的发展历程,以及计算机语言的历史发展进程。 垃圾回收算法与原理 类字节码规范与执行引擎 内存模型与线程 类加载机制 编译器 高效并发,线程安全与锁优化 性能监控以及jvm调优可以从java语言运行的底层来了解java的运行原理首先我们看一下如何下载jdk源码、hotspot源码1. 进入网址:,这个网http://hg.openjdk.java.net址下面列出了所...原创 2020-05-18 23:14:55 · 1623 阅读 · 0 评论