安徽网站建设怎么样,怎样把自己的网站推广出去,广东app开发公司排行榜,黄页网站大全在线看免费内存分配 默认情况下新生代和老年区的内存比例是1:2#xff0c;新生代中Eden区和Survivor区的比例是8:1。
对象优先分配在Eden区。大对象直接进入老年区。通过-XX:PertenureizeThreshold参数设置临界值。长期存活的对象进入老年区。对象每熬过一次Minor GC#xff0c;年龄1新生代中Eden区和Survivor区的比例是8:1。
对象优先分配在Eden区。大对象直接进入老年区。通过-XX:PertenureizeThreshold参数设置临界值。长期存活的对象进入老年区。对象每熬过一次Minor GC年龄1当年龄增加到一定程度默认15岁就会进入老年区。-XX:MaxTenuringThreshold设置年龄临界值。如果Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一办年龄大于或等于该年龄的对象直接进入老年区。
何时发生GC及空间分配担保
Eden区没有足够空间分配内存时发生Minor GC. Minor GC指发生在新生代的GC动作。一般速度迅速。 Major GC /Full GC值发生在老年代的GC一般速度比Minor GC慢上10倍。 在Minor GC之前JVM会先检查老年代最大可用连续空间是否大于新生代所有对象总空间如果成立那么MinorGC可以确保是安全的。否则查看HandlePromotionFailure设置值是否允许担保失败如果允许会尝试进行MinorGC否则会进行一次FullGC。
对象是否死去
引用计数法
给对象中添加一个引用计数器每当一个地方引用时计数器就加1当引用失效时计数器减1。当计数器值为0的时候这个对象将不可能被引用则判断该对象死亡。
弊端会出现循环引用而导致无法GC的情况。
可达性分析算法
通过一个根节点GC Roots向下搜索当一个对象无法从GC Roots搜索到时则证明此对象是可不用的。
引用
强引用有引用绝不回收。软引用在系统将要发生OOM之前将对象纳入回收范围如果这次回收有足够内存则在下一次GC时进行回收。弱引用GC时无论当前内存是否足够都会被回收掉。虚引用和没有引用没有用多大区别只是能在对象被GC时收到一个系统通知。
finalize
一个对象的死亡需要经历至少两次标记过程在可达性分析时不可达则会进行第一次标记并且进行一次筛选筛选条件就是该对象是否有必要执行finalize()方法当对象没有覆盖finalize方法或finalize方法已经被JVM调用过了JVM则任务该对象没有执行finalize的必要了。如果该对象有必要执行finalize方法则该对象会被放到一个F-Queue队列中稍后交由一个JVM自动建立的低优先级的Finalizer线程执行注意这里智慧触发这个方法并不保证会等待它运行结束。如果该对象在finalize执行中成功将自己关联到GC Root链上JVM则会在第二次标记过程中将该对象从即将回收的集合中移除。
垃圾回收算法
标记 - 清除算法
算法分两个节点标记阶段将要回收的对象进行标记回收阶段直接将标记的内存进行回收。
缺点:1. 标记和清除阶段的效率都不高。2.标记清除后会产生大量不连续内存碎片。
复制算法
将内存分成大小相等的两块每次使用其中一块当这块内存快使用完时将还存活的对象复制到另一块上。
缺点内存缩小了一半。 实际中发现不需要按1:1划分默认情况下JVM将年轻代按8:1:1分成eden、survivor1和survivor2三块。每次GC时将Eden和其中一块Survivor中还活着的对象一次性复制到另一块Survivor上最后清理掉Eden和刚才用过的Survivor的空间。当survivor空间不够时由老年代内存进行分配担保也就是将对象放到老年代中。
标记-整理算法
标记死去的对象清除后将活着的对象整理在一起。
分代收集算法
新生代和老年代不同的内存区域采用不同的收集算法。
GC日志
配置-XX:PrintGCDetails参数JVM会在发生GC时打印GC日志。 33.125: 1 [GC2 (Allocation Failure)[PSYoungGen3: 21096K-32K(22528K)4] 22608K-1543K(91136K)5,0.0008844 secs]6[Times: user0.00 sys0.00, real0.00 secs]
在这里插入图片描述 GC发生的时间。距离JVM启动的秒数。 ↩︎ 说明这次GC的停顿类型。[Full GC 一般是因为出现了分配担保失败之类的问题导致STW。 ↩︎ 表明GC发生的区域。 ↩︎ GC前该内存区域已使用容量-GC后该内存区域已使用容量该区域总容量 ↩︎ GC前JAVA堆已使用容量-GC后JAVA堆已使用容量Java堆总容量 ↩︎ GC所占用时间。单位秒 ↩︎