jvm速读
jvm速读

JVM是什么

JVM是java代码的执行引擎+运行时环境,计算机通过JVM来执行java代码,是因为JVM承载了字节码翻译为机器码的工作。翻译过程有两种形式:解释执行和即时编译(JIT)。

HEAP,一个很大的数组

ok,数组有什么特性?提前分配的,固定大小的,地址连续的。

如何删除数据

> 标记-清理 按照数组下标遍历,如果数据无用,就删除。直接的结果就是,数组内有些元素是空的,如果总是在数组尾部分配空间,势必造成前面空闲的空间浪费;如果要重用那些空间,有可能因为大小不合适而造成一些空间碎片。

实际上,垃圾收集算法的标记过程是判断对象是否存活的逻辑,是否存活的依据是对象可达性:对象引用链是一个树状结构,只要对象可追溯到GC ROOT就可判断对象被引用,仍然存活。JVM定义了几个GC ROOT,比如虚拟机栈中的本地变量表

> 复制 为了避免碎片,我们创建2个数组arr1和arr2,把arr1中的可用数据按顺序复制到arr2中,清空arr1;下次清理,arr2 => arr1,如此反复;我们发现,总是有一块空间是浪费的

> 标记-整理

先标记存活对象,然后把对象移动到内存的一端,类比于书架的整理;