Java内存分配及垃圾回收算法(hotspot虚拟机) (4)

hotspot堆

4.垃圾回收现象

在HotSpot虚拟机中存在三种垃圾回收现象,minor GC、major GC和full GC。

minor GC:对新生代进行垃圾回收,当JVM无法为一个新的对象分配空间时候,会触发Minor GC。因为新生代中大多数对象的生命周期都很短,因此Minor GC(采用复制算法)非常频繁,虽然它会触发stop-the-world,但是回收速度也比较快。

major GC:对老年代进行垃圾回收

full GC: 同时对新生代、老年代和永久代进行垃圾回收

许多major GC是由minor GC触发的,所以很难将这两种垃圾回收区分开。major GC和full GC通常是等价的,收集整个GC堆。但因为HotSpot VM发展了这么多年,外界对各种名词的解读已经完全混乱了,当有人说“major GC”的时候一定要问清楚他想要指的是上面的full GC还是major GC。


5. jdk8 对算法的改进

原因: 永久代内存经常不够用或发生内存泄露,爆出异常java.lang.OutOfMemoryError: PermGen

jdk1.8中则把永久代给完全删除了,取而代之的是 元空间(MetaSpace)

jdk8_垃圾回收

1.新生代:Eden+From Survivor+To Survivor

2.老年代:OldGen

3.永久代(方法区的实现) : PermGen----->替换为Metaspace(本地内存中)

元空间没有使用堆内存,而是与堆不相连的本地内存区域。所以,理论上系统可以使用的内存有多大,元空间就有多大,所以不会出现永久代存在时的内存溢出问题。


如果从事java开发相关工作,可以买一本《深入理解java虚拟机》看一下

参考:

https://www.cnblogs.com/baizhanshi/p/5817845.html

《深入理解java虚拟机》

https://www.jianshu.com/p/a7e984a858ca

https://www.jianshu.com/p/66e4e64ff278

https://www.cnblogs.com/dennyzhangdd/p/6770188.html

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzwsyw.html