java垃圾处理器,java常见的垃圾回收器

  java垃圾处理器,java常见的垃圾回收器

  00-1010序言常见垃圾收集器和算法串行串行垃圾收集器并行多线程垃圾收集器CMS收集器G1收集器显式垃圾收集

  

目录

在本文中,我们来具体看看如何选择一个合适的垃圾收集器。每个垃圾收集器都有不同的算法实现和步骤。下面简单描述一下四种常见垃圾收集器的算法流程。有兴趣的同学最好看下面两篇文章,增加理解。本文介绍了垃圾收集的一些基本概念,以及各种垃圾收集器的回收过程。内容重复,本章不单独解释。所以本章做一些总结。

 

  JVMGC垃圾收集摘要

  了解java必须知道的关于垃圾收集器的知识。

  00-1010我相信你可以通过我提供的另外两篇文章了解到很多关于垃圾收集器的知识。而我们真正需要注意甚至可能会用到的垃圾收集器有以下四种:

  00-1010如果此垃圾收集器位于客户端虚拟机或单核服务器中,它将成为默认垃圾收集器。无论是小GC还是全GC,所有的应用线程都会被挂起。串行旧是旧时代用的,也是单线程的老版。

  客户端虚拟机,我们前面提到过,编译类型有客户端和服务器端,jvm会通过客户端编译器(单线程)把代码编译成jvm识别的字节码。

  可以通过如下标志表示:

  -XX:使用串行GC

  00-1010服务器类型虚拟机或多线程服务器上jdk8默认使用的垃圾收集器类型。

  次要GC和完全GC都使用多线程来回收垃圾,两种GC都会导致应用程序线程暂停。但是,它具有更高的吞吐量,并且是最适合的垃圾收集器,对响应时间没有过多的要求。

  可以通过如下标志查看其状态:

  年轻一代:

  -xx3360 useparallelgc老年:

  -XX: UseParallelOldGC

  00-1010最初是为了减少回收过程中串并联收集器造成的长期系统堵塞。

  当发生小规模GC时,它还会挂起所有应用程序线程。不同的是,年轻一代用的不是并行或串行,而是专门针对CMS的年轻一代收集器ParNew。

  可以通过下面的标志查看:

  -xx 3360 useparnewgccms不会再在完全GC的情况下挂起所有应用程序线程。它将使用多线程,并与应用程序线程同时运行,以清理未使用的对象。因此,CMS垃圾收集器的暂停时间大大减少。与平行收集器相比,这一点非常明显。

  缺点:

  CMS需要占用更多的CPU资源,以确保gc线程在应用程序线程运行时不断扫描堆空间。不会压缩内存,造成内存碎片。如果没有足够的CPU资源,或者内存碎片达到极限,就会退化为串行收集器。

  可以通过下面的标志查看:

  -XX: UseConcMarkSweepGC

  00-1010也可以先叫垃圾。

  初衷是在处理超大堆(4gb)时尽量减少堵塞。G1仍然属于分代收藏家,但不同的是,它是合乎逻辑的分代。G1堆空间被分成几个区域,新一代垃圾收集仍然采用挂起所有应用程序线程的方法,将幸存对象复制到旧时代或幸存者空间。年龄也被划分为许多区域,G1收集器通过将对象从一个区域复制到另一个区域来完成清理。这解决了CMS中的内存碎片问题。

  和CMS一样,G1也属于并发收集者。在过去,当发生完全GC时,后台线程完成回收工作,不需要挂起应用程序线程。

  通过下面的标志查看:

  - XX: UseG1GC其实以上内容都是简单描述。关于真正的实现细节,请参见开头提供的文章。

  

前言

这里说的显式的垃圾收集,其实指的是手动触发的垃圾回收,如下所示:

 

  System.gc这是一种控制和强制jvm拥有gc的方法。在任何时候,都不建议使用这种方法进行垃圾收集。

  当你使用这个规范的时候,不管是什么样的垃圾收集器,哪怕是CMS或者G1,都会发生满GC,所有应用线程同时停止,长时间卡死。

  例外情况:

  性能分析,测试堆分析在上述情况下,调用System.gc会更好的帮助我们分析当前应用存在的问题。

  关于java性能优化的四种常见垃圾收集器的总结,本文到此结束。有关java垃圾收集器的更多信息,请搜索以前关于流行IT的文章或继续浏览下面的相关文章。我希望你以后能更多地支持流行音乐!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: