做有温度的教育!
全国统一咨询热线:400-803-9399
北京
校区
新闻资讯> 学习心得> JVM垃圾收集器

JVM垃圾收集器

时间:2018-11-09
浏览:8123
发布:甲骨文华育兴业
赞:3251

       在JVM中垃圾回收是学习的一个环节,这篇文章简单给大家介绍一下其中的垃圾回收方式和收集器,希望大家在学习中多灵活运用。

  Serial收集器:最基本的收集齐,单线程,在gc时,需要暂停所有其他线程的工作。emmmm

  ParNew收集器:Serial的多线程版本,使用复制算法。

  Parallel Scavenge收集器:与ParNew相似,但是关注点不同,其他收集器关注点是缩短GC时,减少用户线程的停顿时间,而这个收集齐的目标是i达到一个可控制的吞吐量。

  SerialOld收集器,使用标记整理,单线程。

  ParallelOld收集器,使用标记整理,多线程。

  CMS收集器:获取最短回收停顿时间为目标的收集器。

  G1收集器:最新的了,是面试的重点。


  【几种常用的GC】

  Minor GC

  从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC。这一定义既清晰又易于理解。但是,当发生Minor GC事件的时候,有一些有趣的地方需要注意到:

  当 JVM 无法为一个新的对象分配空间时会触发 Minor GC,比如当 Eden 区满了。所以分配率越高,越频繁执行 Minor GC。

  内存池被填满的时候,其中的内容全部会被复制,指针会从0开始跟踪空闲内存。Eden 和 Survivor 区进行了标记和复制操作,取代了经典的标记、扫描、压缩、清理操作。所以 Eden 和 Survivor 区不存在内存碎片。写指针总是停留在所使用内存池的顶部。

  执行 Minor GC 操作时,不会影响到永久代。从永久代到年轻代的引用被当成 GC roots,从年轻代到永久代的引用在标记阶段被直接忽略掉。

  质疑常规的认知,所有的 Minor GC 都会触发“全世界的暂停(stop-the-world)”,停止应用程序的线程。对于大部分应用程序,停顿导致的延迟都是可以忽略不计的。其中的真相就 是,大部分 Eden 区中的对象都能被认为是垃圾,永远也不会被复制到 Survivor 区或者老年代空间。如果正好相反,Eden 区大部分新生对象不符合 GC 条件,Minor GC 执行时暂停的时间将会长很多。所以 Minor GC 的情况就相当清楚了——每次 Minor GC 会清理年轻代的内存。


  Major GC vs Full GC

  大家应该注意到,目前,这些术语无论是在 JVM 规范还是在垃圾收集研究论文中都没有正式的定义。但是我们一看就知道这些在我们已经知道的基础之上做出的定义是正确的,Minor GC 清理年轻带内存应该被设计得简单:

  Major GC 是清理老年代。

  Full GC 是清理整个堆空间—包括年轻代和老年代。


人生从业之路的第一步,从甲骨文华育兴业开始,

背后付出的辛苦与努力只有自己知道,而这也只是职业生涯的开始。

勤恳努力的人终会得到最好的回报,有些努力需要时间来回答

你吃的苦终会铺成你想要的路!

甲骨文华育兴业,为你的IT之路开启梦想之门!


【版权与免责声明】如发现内容存在版权问题,烦请提供相关信息联系我们,我们将及时沟通与处理。本站内容除非来源注明甲骨文华育兴业,否则均为网友转载,涉及言论、版权与本站无关


【AI大数据】2019年AI数据5大趋势 ps使用 大数据 冲刺Java架构师年薪50W

友情链接: 甲骨文华育兴业太原校区 甲骨文华育兴业济南校区 甲骨文华育兴业哈尔滨校区 甲骨文华育兴业北京校区 魔据教育

Copyright ©2016-2019. All Rights Reserved. 京ICP备17018991号-4

网站地图