五分钟了解Java10针对垃圾收集的改进

标签: 技术杂记 转载 Java | 发表时间:2018-04-19 02:59 | 作者:
出处:http://blog.didispace.com/

Java10 已经发布了大概有一个多月了。我们在之前的文中介绍过10为我们带来的一些新特性: JDK10要来了:下一代 Java 有哪些新特性?。其中就提到了10 关于G1垃圾收集器的一些改进。G1在Java 9的时候已经是被作为默认的垃圾收集器了。如果你了解G1的话,应该知道它是一个更注重低停顿的收集器。有关G1的内容你可以移步 一步步图解G1

那么在10中针对垃圾回收都有哪些改进和改变呢?

严格的来说有两处是与垃圾回收有关的:

分别是JEP304和JEP307。

JEP 304: 垃圾回收器接口(Garbage Collector Interface)

就是引入了一个一个垃圾回收器的接口。让Hotspot虚拟机的模块化水平得到了进一步的提高,让我们可以轻松的添加一个新的GC或者排除掉JDK内部自带的现存的某个GC,总之,就是解耦了。

在Java10 之前,垃圾回收器的代码被分散到很多地方,这一点,那一点,你如果要想自己实现一个全新的GC,必须得了解这些需要改动的地方。简直牵一发而动全身,耦合。

如今有了这个接口你就轻松了。有关这个接口的内容我们就不多赘述了。你可以移步此文了解: JDK10要来了:下一代 Java 有哪些新特性?

接下来我们重点说说10针对G1的改进。

JEP 307: G1的Full GC多线程

这个JEP的目标只有一个,那就是要把G1的full GC算法给并行化,从而提高性能。

你知道,G1最大的亮点就是可以尽量的避免full gc。但毕竟是“尽量”,在有些情况下,G1就要进行full gc了,比如如果它无法足够快的回收内存的时候,它就会强制停止所有的应用线程然后清理。在Java10之前,一个单线程版的标记-清除-压缩算法被用于full gc。

所以为了尽量减少full gc带来的影响,在Java10中,就把之前的那个单线程版的标记-清除-压缩的full gc算法改成了支持多个线程同时full gc。这样也算是减少了full gc所带来的停顿。

你可以通过-XX:ParallelGCThreads这个参数来指定用于并行GC的线程数。

相关 [java10 垃圾收集] 推荐:

五分钟了解Java10针对垃圾收集的改进

- - 程序猿DD
Java10 已经发布了大概有一个多月了. 我们在之前的文中介绍过10为我们带来的一些新特性: JDK10要来了:下一代 Java 有哪些新特性. 其中就提到了10 关于G1垃圾收集器的一些改进. G1在Java 9的时候已经是被作为默认的垃圾收集器了. 如果你了解G1的话,应该知道它是一个更注重低停顿的收集器.

java的垃圾收集算法和垃圾收集器

- - ITeye博客
   该算法主要分为标记和清除两个阶段,先对需要回收的对象进行标记,然后再进行清除,该算法的有点是简单,缺点有两个,一个是效率问题,标记和清除的效率都不高,另一个问题是空间问题,标记清除之后会造成大量的空间碎片,当程序需要分配一个大对象而无法找到连续的空间时就必须出发一次垃圾回收.   该算法是将内存空间分为大小相等的两块,在其中的一块进行对象的分配,需要垃圾回收时将其中一块存活的对象拷贝到另一块即可,然后把用过的内存块给清理掉,该算法的有点是:不用考虑内存碎片问题,实现简单,运行高效,缺点是:将内存缩小为了原来的一半,代价有点儿高.

JVM垃圾收集器使用调查:CMS最受欢迎

- - ITeye资讯频道
近日,Plumbr公司对特定垃圾收集器(GC)使用情况进行了一次调查研究. 本次研究的数据来自代表2670个不同使用环境的84936个案例. 其中,13%的环境已经明确指定了一个垃圾收集器,其余的根据JVM而定. 在指定了明确垃圾收集器的11062个案例中,根据每个垃圾收集器使用的统计次数,研究人员做出了下面的垃圾收集器饼图:.

Java虚拟机学习 - 垃圾收集器

- - ITeye博客
HotSpot JVM收集器.               上面有7中收集器,分为两块,上面为新生代收集器,下面是老年代收集器. 如果两个收集器之间存在连线,就说明它们可以搭配使用. Serial(串行GC)收集器. Serial收集器是一个新生代收集器,单线程执行,使用复制算法. 它在进行垃圾 收集时,必须暂停其他所有的工作线程(用户线程).

垃圾收集器与内存分配策略

- - Java - 编程语言 - ITeye博客
《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》. Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来. 目前内存的动态分配与内存回收技术(GC(Garbage Collection))已经相当成熟;. 但是当我们需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就需要对GC的技术细节有一定了解;以便于实施必要的监控和调节.

JVM初探- 内存分配、GC原理与垃圾收集器

- - IT瘾-geek
JVM初探- 内存分配、GC原理与垃圾收集器. JVM内存的分配与回收大致可分为如下4个步骤: 何时分配 -> 怎样分配 -> 何时回收 -> 怎样回收. new时分配外, 我们着重介绍后面的3个步骤:. 怎样分配- JVM内存分配策略. 对象内存主要分配在新生代 Eden区, 如果启用了本地线程分配缓冲, 则 优先在TLAB上分配, 少数情况能会直接分配在老年代, 或被拆分成标量类型在栈上分配(JIT优化).