hi,你好!欢迎访问本站!登录
本站由网站地图腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 教程 - 杂谈 - 正文 君子好学,自强不息!

Java11新特征 - Epsilon GC和ZGC

2019-11-18杂谈搜奇网23°c
A+ A-

Java11中新增了两个GC,Epsilon GC和ZGC。

Epsilon垃圾收集器

A NoOp Garbage Collector
没有操纵的垃圾收集器

JDK上对这个特征的形貌是:开辟一个处置惩罚内存分派但不完成任何现实内存接纳机制的GC, 一旦可用堆内存用完,JVM就会退出。
假如有System.gc()挪用,现实上什么也不会发作(这类场景下和-XX:+DisableExplicitGC效果一样), 由于没有内存接纳,这个完成可能会正告用户尝试强迫GC是白费。

用法

-XX:+UnlockExperimentalVMOptions
-XX:+UseEpsilonGC

测试默许GC

我们写一段代码,不停的发生垃圾:

public class EpsilonTest {
    public static void main(String[] args) {
        boolean flag = true;
        List<Garbage> garbageList = new ArrayList<>();
        int count = 0;
        while (flag) {
            garbageList.add(new Garbage());
            if (count ++ == 500) {
                garbageList.clear();
            }
        }
    }
}

class Garbage {
    private double d1 = 1;
    private double d2 = 2;

    /**
     * 在GC消灭对象时会挪用一次
     */
    @Override
    protected void finalize() throws Throwable {
        System.out.println(this + " collecting");
    }
}

直接运转,运用的默许的垃圾接纳器:

java11.Garbage@37c7d031 collecting
java11.Garbage@71a19bf9 collecting
java11.Garbage@3b2df791 collecting
java11.Garbage@61441b29 collecting
java11.Garbage@680b1968 collecting
java11.Garbage@158829c3 collecting
java11.Garbage@414dc59c collecting
java11.Garbage@1103cf collecting
......

从运转打印的效果能够看出:有对象被接纳了,触发了GC【默许用的是G1】
由于我只限定接纳了500个,500个以后的对象会不停加到内存中,内存就会不够用:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java11.EpsilonTest.main(EpsilonTest.java:16)

测试Epsilon GC

假如我运用的是Epsilon GC,会是什么样的效果呢?

运用方法

启动时增加VM参数:

运转效果

运转代码,发明控制台没有任何的输出,即EpsilonGC不会做任何的接纳,而且顺序很快就由于堆空间不足而退出。

Terminating due to java.lang.OutOfMemoryError: Java heap space

运用这个选项的缘由

供应完整被动的GC完成, 具有有限的分派限定和尽量低的耽误开支,但价值是内存占用和内存吞吐量.
尽人皆知, java完成可广泛挑选高度可设置的GC完成. 种种可用的收集器终究满足差别的需求, 纵然它们的可设置性使它们的功用订交. 偶然更轻易保护零丁的完成, 而不是在现有GC完成上聚集另一个设置选项.

主要用途

  • 机能测试(它能够协助过滤掉GC引发的机能假象)
  • 内存压力测试(比方,晓得测试用例 应当分派不凌驾1GB的内存, 我们能够运用-Xmx1g –XX:+UseEpsilonGC, 假如顺序有题目, 则顺序会崩溃)
  • 异常短的JOB使命(对象这类使命, 接收GC清算堆那都是糟蹋空间)
  • VM接口测试
  • Last-drop 耽误&吞吐革新

ZGC

ZGC, A Scalable Low-Latency Garbage Collector(Experimental)
ZGC是一款可伸缩、低耽误的GC

概述

ZGC,应当是JDK11最为注视的特征。然则背面带了Experimental,申明这还不发起用到生产环境。

  • GC停息时刻不会凌驾10ms
  • 既能处置惩罚几百兆的小堆, 也能处置惩罚几个T的大堆(OMG)
  • 和G1比拟, 运用吞吐能力不会下落凌驾15%
  • 为未来的GC功用和应用colord指针以及Load barriers优化奠基基本
  • 初始只支撑64位体系

ZGC的设想目的是:支撑TB级内存容量,停息时刻低(<10ms),对全部顺序吞吐量的影响小于15%。 未来还能够扩大完成机制,以支撑不少令人兴奋的功用,比方多层堆(即热对象置于DRAM和冷对象置于NVMe闪存),或紧缩堆。

在运用G1的时刻,在接纳垃圾的时刻,必需要保证运用顺序当中一切的线程停下来,不在内存中制作杂沓,然后GC才会最先事情,会形成停留。这一个历程,有一个专属名词来诠释:STW(stop the world)。
ZGC的目的就是收缩STW的时刻:ZGC是一个并发,基于region, 紧缩型的垃圾收集器,只要root扫描阶段会STW, 因而GC停留时刻不会跟着堆的增进和存活对象的增进而变长。

用法

-XX:+UnlockExperimentalVMOptions
-XX:+UseZGC

ps:ZGC暂时不能在windows体系中运用,不晓得最新的版本有无支撑,我手边没有windows机械,未做测试。

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  移步手机端
Java11新特征 - Epsilon GC和ZGC

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
未定义标签

本文来源:搜奇网

本文地址:https://www.sou7.cn/281984.html

关注我们:微信搜索“搜奇网”添加我为好友

版权声明: 本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。请记住本站网址https://www.sou7.cn/搜奇网。

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>