跳到主要内容

13 篇博文 含有标签「Java」

查看所有标签

深入理解JAVA虚拟机——垃圾回收

· 阅读需 6 分钟

Survivor的作用

当没有Survivor时,如果增加老年代空间,需要更多存活对象才能填满老年代,这样可以降低Full GC的频率;但是,随着老年代空间加大,一旦发生Full GC,执行所需要的时间更长。

如果减少老年代空间,虽然Full GC所需时间减少;但是,老年代很快被存活对象填满,Full GC频率增加。

因此,Survivor的存在意义,就是减少被送到老年代的对象,进而减少Full GC的发生。

为什么要两个Survivor

解释一:为了解决碎片化。如果只有一个Survivor,对象在Eden创建,GC时存活对象复制到Survivor,当下次GC时,没有一个空闲的Survivor,而Survivor中也会有可回收对象,这样在Survivor中就出现了大量的空闲碎片。如果有两个Survivor,每次GC将Eden和其中一个Survivor中的存活对象复制到另一个Survivor,前一个Survivor会因此空闲,于是下次GC可以重复这样的过程,从而解决了碎片化。

解释二:复制算法将内存等分为两块,每次只使用其中一块,GC时将存活对象移至另一块,前一块因此空闲。引入Eden可以视为对内存利用的优化,相当于两个Survivor共享的区域,每次GC后Eden都会因此空闲,这样相当于扩大了Survivor,避免频繁GC。

《实战Java高并发程序设计》读书笔记

· 阅读需 10 分钟

这两天快速看了下《实战Java高并发程序设计》这本书,对Java高并发程序有一个初步的认识。

这本书是在iPad上用MarginNotes 3看的,只是做了些笔记,还没进行代码实践,后续还需要细化。