复制算法:将内存分为大小相等的两块,例如:A区 B区,程序运行时所需要的内存存放在A区,当A区内存空间不足以存放接下来对象所需分配的内存时,将进行GC操作(将A区存货的对象复制到B区,接下来清理A区所有对象)
如图(图片来自网络):
优点:
- 提高效率
- 减少内存碎片
缺点:
- 所需内存扩大1倍
优化:
通常情况下新生代中对象的存活率大概是2%(IMB公司提供数据),所以实际使用中并不需要使用1:1的内存分配方式,而是将新生代分为一个Eden space和from space、to space(from space和to space等大),也就是通常说的Eden区和Survivor区
在hotspot虚拟机中默认的Eden区和Survivor区的比例是8:1,所以实际新生代可用的内存空间是90%,当内存不足时执行GC操作,将Eden区和其中一个Survivor区的存活对象复制到另一个Survivor区(内存空间是年轻代的10%),清楚Eden区和一个Survivor区
如果Survivor区不足以存放存活的对象,则会直接分配到老年代中