JAVA_虚拟机

2017-05-04  本文已影响0人  bboymonk

根据JAVA虚拟机规范,JAVA虚拟机所管理的内存包括以下几个运行时数据区域:











Class类文件的结构:










垃圾收集算法:

1,标记-清除
当确定为收集对象后,标记然后清除。效率不高,有连续的内存碎片,此时如果分配较大对象时找不到连续内存空间,不得不提前触发垃圾收集。
2,复制
将可用内存分为两块相等的区域,一块用完,把存活的对象复制到另一块去,清理用完的一块内存空间。代价是内存缩小了一半。
3,标记-整理
和标记清除类似,但不是对可回收对象进行清理,面是让所有活着的对象向一端移动,然后清理掉边界以外的内存空间。
4,分代收集算法
根据对象存活周期不同将内存分为几块,一般是新生代和老年代。
新生代对象存活较少------复制算法。
老年代对象存活较久------采用标记清除和标记整理算法

垃圾收集器:

***注意:并行指的是多线程执行回收,此时用户线程停止工作 。
而并发指的是多线程执行回收,此时用户线程不停止工作。
1,Serial收集器:
单线程执行,其它线程全部停止工作,stop the world。
2,ParNew收集器:
多线程执行,可以并发工作。
3,Parallel Scavenge收集器:
采用复制算法的新生代收集器,并行工作。
4,Serial Old收集器:
serial的老年代版本,采用的是标记-整理算法。
5,Parallel Old 收集器:
是Parallel Scavenge的老年代版本
6,CMS收集器(Concurrent Low Pause):
以最短回收停顿时间为目标,默认开启线程(cpu数量+3)/4
7,G1收集器:
优点--并发与并行,分代收集,空间整理(不会产生内存碎片),可预测的停顿。

常量池:

类加载过程:

1,加载:

2,验证:

1,

基于二进制流的数据验证


3准备:

4解析:

5初始化:


上一篇下一篇

猜你喜欢

热点阅读