Java虚拟机系列文章:JVM指令、Class文件结构、垃圾收集、压缩指针

JVM指令分析实例

JVM指令分析实例一(常量、局部变量、for循环)

JVM指令分析实例二(算术运算、常量池、控制结构)

JVM指令分析实例三(方法调用、类实例)

JVM指令分析实例四(数组、switch)

JVM指令分析实例五(操作数栈)

Java … [阅读文章]

Java普通对象创建之流程图分解

1.加载类

传送门:Java类加载过程之流程图分解

2.为对象分配内存

对象所需内存的大小在类加载完成后便可完全确定。 相当于把一块确定大小的内存从Java堆中划分出来。 指针碰撞(Bump the Pointer)

假设将堆划分为两部分,左边为已使用内存,右边为空闲内存。(堆内存规整) … [阅读文章]

JVM之卡表(Card Table)

我们知道,JVM在进行垃圾收集时,需要先标记所有可达对象,然后再清除不可达对象,释放内存空间。那么,如何快速的找到所有可达对象呢?

最简单粗暴的实现,就是每次进行垃圾收集时,都对整个堆中的所有对象进行扫描,找到所有存活对象。逻辑是简单,但性能比较差。 … [阅读文章]

HotSpot的7种垃圾收集器组合

HotSpot共有7种垃圾收集器,3个新生代垃圾收集器,3个老年代垃圾收集器,以及G1,一共构成7种可供选择的垃圾收集器组合。

新生代与老年代垃圾收集器之间形成6种组合,每个新生代垃圾收集器都对应2种组合。

Serial Old(MSC)可以与所有新生代收集器进行组合,共3种组合 … [阅读文章]

Java之CMS GC的7个阶段

CMS收集器的主要设计目标是:低应用停顿时间。它通过两种方式实现这一目标:

不压缩老年代,而是使用空闲列表来管理回收空间。 大部分标记清理工作与应用程序并发执行。

主要问题:由于不压缩带来的老年代堆碎片,或者在对象分配率高的情况下,都可能导致Full … [阅读文章]

32个问题,学习Java虚拟机的运行时数据区

学习JVM虚拟机是一个比较枯燥无味的过程,刚开始基本是看不懂学不懂,然后就是似懂非懂,最后觉得好像懂了一些,到后来又觉得还是没懂,反正就是懵懵懂懂,过目就忘,一问就卡住,说也说不清,其实说的就是我自己。

我觉得在学习了相关理论知识之后,除了进行实操之外,通过提问和回答的方式,也能更好的理解所学知识,并检验自己是否真的理解了。 … [阅读文章]