在线客服
扫描二维码
下载博学谷APP
扫描二维码
关注博学谷微信公众号
相信很许多人在学习Java的时候,都没有搞清楚过Java垃圾回收器。因此本文主要讲述了Java垃圾回收器的定义、性能评估工具、回收算法等等内容,为大家全面解答垃圾回收器的相关问题。

1、Java垃圾回收器的定义
Java垃圾回收器是Java虚拟机(JVM)的三个重要模块(另外两个是解释器和多线程机制)之一,为应用程序提供内存的自动分配(Memory Allocation)、自动回收(Garbage Collect)功能,这两个操作都发生在Java堆上(一段内存快)。某一个时点,一个对象如果有一个以上的引用(Rreference)指向它,那么该对象就为活着的(Live),否则死亡(Dead),视为垃圾,可被垃圾回收器回收再利用。垃圾回收操作需要消耗CPU、线程、时间等资源,所以容易理解的是垃圾回收操作不是实时的发生(对象死亡马上释放),当内存消耗完或者是达到某一个指标(Threshold,使用内存占总内存的比列,比如0.75)时,触发垃圾回收操作。有一个对象死亡的例外,java.lang.Thread类型的对象即使没有引用,只要线程还在运行,就不会被回收。
2、Java垃圾回收器的性能评估工具
–XX:+PrintGCDetails和–XX:+PrintGCTimeStamps
垃圾回收的开始时间,持续时间,每一代的空余内存等信息。
jmap [options] pid
jamp 2043 查看2043进程里面已经加载的共享对象。通常DLL文件。
jmap -heap 2043 查看内存堆的配置信息以及使用情况。
jmap -permstat 2043 查看永久代的加载情况。
jmap -histo 2043 查看类的加载和内存占用情况。
jstat [options] pid
jstat -class 2043 class加载、卸载、内存占用情况。
jstat -gc 2043 GC执行情况。
3、垃圾回收算法
(1)标记清除算法
标记清除算法分成两步,第一步,标记要回收的垃圾对象,第二步就是清除被标记的垃圾对象. 标记清除算法会产生大量的内存碎片,而且效率低.所以,为了解决这个问题,出现了复制清除算法.
(2)复制清除算法(专门用于处理年轻代垃圾的)
所谓复制清除算法,就是在要进行垃圾回收的时候,先将活着的对象整齐的复制到一块空闲区域,然后再将原来的区域的垃圾全部清除. 复制清除算法的优点:效率高于标记清除算法,活着的对象是整齐排列的,没有内存碎片. 但是这个方法的缺点也很明显,那就是浪费空间.
(3)标记清理算法(年老代)
将活着的对象一个接一个的按顺序排好,然后再清除变成垃圾的对象.这种方法不会造成碎片,也不会造成内存的浪费.但是效率不高.所以,这种方法不适合在年轻代使用,而是在对象生命力很顽强的年老代使用
(4)分类算法
所谓分类算法,就是根据内存的不同,采用不同的垃圾回收方式(上面的1,2,3)进行垃圾回收.
4、典型的垃圾收集器
(1)Serial/Serial Old
Serial/Serial Old收集器是最基本最古老的收集器,它是一个单线程收集器,并且在它进行垃圾收集时,必须暂停所有用户线程。Serial收集器是针对新生代的收集器,采用的是Copying算法,Serial Old收集器是针对老年代的收集器,采用的是Mark-Compact算法。它的优点是实现简单高效,但是缺点是会给用户带来停顿。
(2)ParNew
ParNew收集器是Serial收集器的多线程版本,使用多个线程进行垃圾收集。
(3)Parallel Scavenge
Parallel Scavenge收集器是一个新生代的多线程收集器(并行收集器),它在回收期间不需要暂停其他用户线程,其采用的是Copying算法,该收集器与前两个收集器有所不同,它主要是为了达到一个可控的吞吐量。
(4)Parallel Old
Parallel Old是Parallel Scavenge收集器的老年代版本(并行收集器),使用多线程和Mark-Compact算法。
(5)CMS
CMS(Current Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器,它是一种并发收集器,采用的是Mark-Sweep算法。
(6)G1
G1收集器是当今收集器技术发展最前沿的成果,它是一款面向服务端应用的收集器,它能充分利用多CPU、多核环境。因此它是一款并行与并发收集器,并且它能建立可预测的停顿时间模型。
以上就是关于Java垃圾回收器的所有相关问题解答,大家都明白了吗?
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
Java 12 / JDK 12 正式发布有哪些新特性
Java 12 / JDK 12 正式发布有哪些新特性?具体变化有Shenandoah:低暂停时间的 GC(实验性功能)、Microbenchmark Suite等内容。
10470
2019-08-14 10:32:28
Java入门比较好的书是哪本?Java入门教材推荐
Java入门最好的书是哪本?对于刚刚入门Java的初学者而言,第一本Java入门教材必须要通俗易懂,最好能把理论知识和实战练习结合起来,而满足上述条件的书籍非《Java基础入门》莫属。《Java基础入门》是由传智播客高教产品研发部,为零基础初学者专门编著的Java学习教材。下面我们来看看这本书的详细内容吧!
8490
2019-12-05 13:09:05
数据结构应该怎么学?有哪些建议?
随着计算机科学和互联网技术的日新月异,越来越多的人选择投身于程序员这一职业。尤其是目前的市场中高端的程序员,还处于巨大的人才缺口之中。而低端程序员和中高端程序员一个显著的差别就是,数据结构这一内功掌握得怎么样。那么可能会有人问了:数据结构应该怎么学?有哪些建议呢?下面我们就来看看具体的学习方法。
8903
2020-02-14 19:11:18
Java基础语法学习之常量与变量
今天Java基础语法学习的内容是常量与变量,顾名思义,常量就是不会发生改变的,而变量则恰好相反。本文主要总结了常量的概念、分类、案例演示,还有变量的概念、格式以及使用。下面就一起梳理下相关得基础知识点吧~
7431
2020-05-14 15:31:15
网络编程如何快速入门?
对于零基础的IT初学者来讲,网络编程是必须掌握的基础知识。那么,网络编程如何快速入门呢?本文将为大家介绍一下博学谷的免费在线课程《快乐的Java网络编程》,该课程只用两小时就能带大家轻松学习网络编程三要素、UDP通信和TCP通信等核心知识,下面一起来了解一下课程的详细内容吧!
7029
2020-06-29 16:18:08
