可伸缩、低延迟的垃圾回收器

GC 暂停时间不超过 10ms

堆管理容量范围(小M级别,大到T级别)

对应用吞吐量影响不超过15%(对比 G1)

为进一步的添加新特性和优化做基础

默认支持 Linux/x64 系统

一、 启用Linux Large Pages

ZGC 启用Large Pages 是一种对应用高性能的折中(吞吐量、低延迟及启动时间),但是却不会带来明显的弊端。除了在应用启动上需要稍微复杂的配置,所需要的系统相关root权限需要手动进行配置。

Linux Large 在x86 linux平台也称为 huge pages,页大小为2M。

假设需要16G大小的JAVA 堆,则意味着需要 16G / 2M = 8192 huge pages。

首先需要分配至少16G(8192 huge pages)内存到 huge pages 内存池。 之所以说至少,是因为如果 JVM 启用了的 huge pages,那么不仅仅是GC,同时也包括JVM 的其它功能部分也会用到这部分内存(code heap, marking bitmaps 等),因此在此我们分配 9216 pages (18G),保持有2G的额外内存供非堆分配使用。

1. 配置系统的 huge pages 内存池:

$ echo 9216 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

附注:系统在没有足够内存的情境下会导致这一命令执行失败;命令执行完成需要一定的时间,可以通过以下命令进行查看:

$ cat /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
9216 

2. 挂载 hugetlbfs 文件系统,并分配JVM运行用户权限:

$ mkdir /hugepages
$ mount -t hugetlbfs -o uid=123 nodev /hugepages 

附注:对于内核大于等于4.4的linux系统,可以跳过此步骤。

3. JVM启动命令添加  -XX:+UseLargePages 配置:

$ java -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -Xms16G -Xmx16G -XX:+UseLargePages ...

4. 如果挂载了多个 hugetlbfs 文件系统,则需要通过  -XX:ZPath 命令指定需要使用的 hugetlbfs 系统:

$ java -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -Xms16G -Xmx16G -XX:+UseLargePages -XX:ZPath=/hugepages ...

附注:huge pages 内存池分配及 hugetlbfs 文件系统挂载是非持久化的,会因系统重启而丢失,因此需要用户一定的措施来处理此种情景。

二、启用 Transparent Huge Pages

... ...

三、启用 NUMA

ZGC默认支持 NUMA,会优先在NUMA-local 内存进行 JAVA 堆内存分配,但是在有CPU亲和性设置的情况下,JVM会自动禁用NUMA,如果需要显示的设置NUMA支持,可以通过配置以下选项:-XX:+UseNUMA or -XX:-UseNUMA。

对于运行在 NUMA 机器的 JVM ,启用NUMA,能够在性能上的到显著的提升。

四、启用 GC 日志

启用命令:

-Xlog:<tag set>,[<tag set>, ...]:<log file>

帮助信息:

-Xlog:help

基本日志:

-Xlog:gc:gc.log

性能调试:

-Xlog:gc*:gc.log

gc* 代表所有有gc标志的日志。:gc.logd代表日志写入gc.log文件。

 

Java 11 新垃圾回收器 ZGC的更多相关文章

  1. 新一代垃圾回收器ZGC的探索与实践

    ZGC(The Z Garbage Collector)是JDK 11中推出的一款低延迟垃圾回收器,它的设计目标包括: 停顿时间不超过10ms: 停顿时间不会随着堆的大小,或者活跃对象的大小而增加: ...

  2. Java 11 新特性介绍

    Java 11 已于 2018 年 9 月 25 日正式发布,之前在Java 10 新特性介绍中介绍过,为了加快的版本迭代.跟进社区反馈,Java 的版本发布周期调整为每六个月一次——即每半年发布一个 ...

  3. Java 11 新功能来了!

    关键时刻,第一时间送达! 目前 Oracle 已经发布了 Java Development Kit 10,下个版本 JDK 11 也即将发布.本文介绍 Java 11 的新功能. 根据Oracle新出 ...

  4. Java 11新功能抢先了解

    目前 Oracle 已经发布了 Java Development Kit 10,下个版本 JDK 11 也即将发布.本文介绍 Java 11 的新功能. 根据Oracle新出台的每6个月发布一次Jav ...

  5. java面试一日一题:java中的垃圾回收器

    问题:请讲下java中垃圾回收器有哪些? 分析:该问题主要考察hotspot虚拟机下实现的垃圾回收器 回答要点: 主要从以下几点去考虑, 1.垃圾回收器的种类 2.每种垃圾回收器的着重点是什么 前边的 ...

  6. 【整理】Java 11新特性总结

    闲语 2018年9月25日,Java 11正式发布,与JDK 10不同,JDK 11将提供长期支持,还将作为Java平台的参考实现以及标准版(Java SE)11.Oracle直到2023年9月都会为 ...

  7. 最通俗易懂的 Java 11 新特性讲解

    大多数开发者还是沉浸在 Java 8 中,而 Java 14 将要在 2020 年 3 月 17 日发布了,而我还在写着 Java 11 的新特性.Java 11 是 Java 8 之后的第一个 LT ...

  8. JAVA之G1垃圾回收器

    概述 G1 GC,全称Garbage-First Garbage Collector,通过-XX:+UseG1GC参数来启用,作为体验版随着JDK 6u14版本面世,在JDK 7u4版本发行时被正式推 ...

  9. java 11 新的Epsilon垃圾收集器

    A NoOp Garbage Collector JDK上对这个特性的描述是: 开发一个处理内存分配但不实现任何实际内存回收机制的GC, 一旦可用堆内存用完, JVM就会退出. 如果有System.g ...

随机推荐

  1. 【POJ - 2533】Longest Ordered Subsequence (最长上升子序列 简单dp)

    Longest Ordered Subsequence 搬中文 Descriptions: 给出一个序列,求出这个序列的最长上升子序列. 序列A的上升子序列B定义如下: B为A的子序列 B为严格递增序 ...

  2. 《C++Primer》第五版习题答案--第五章【学习笔记】

    <C++Primer>第五版习题答案--第五章[学习笔记] ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/15 第五章:语句 ...

  3. Java面向对象入门(2)-访问修饰符

    Java访问修饰符–public, protected, private and default Java提供了四个访问修饰符来设置类,变量,方法和构造函数的访问级别,即public,private, ...

  4. 在NBA我需要翻译 适配器模式

    17.1 在NBA我需要翻译! 17.2 适配器模式 Adapter,将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作, 有些国家 ...

  5. node中 package.json 文件说明

    1.概述 每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称.版本.许可证等元数据).npm install命令根据这个配置文 ...

  6. 流程图GGEditor 之 自定义节点相关属性

    自定义节点 注册 -- registerNode 我们通过以下接口往 G6 全局注册节点: // 注册节点 G6.registerNode(name, { // 绘制 draw(item) {   r ...

  7. ConcurrentHashMap的size()方法(1.7和1.8)

    在1.7和1.8版本中,计算size()方法有写不同.先介绍1.7版本的实现. 1.7版本 在1.7版本中,有一个重要的类Segment,利用它来实现分段锁 static final class Se ...

  8. memcached与redis比较

    1- memcached介绍 Memcached是一个自由开源的,高性能,分布式内存对象缓存系统. Memcached是以LiveJournal旗下Danga Interactive公司的Brad F ...

  9. Python3中的支持向量机SVM的使用(有实例)

    https://www.cnblogs.com/luyaoblog/p/6775342.html 首先,我们需要安装scikit-learn 一.导入sklearn算法包  在python中导入sci ...

  10. gogs搭建git服务教程

    使用gogs搭建自己的git服务!!! 一.GIT服务器搭建方式 上一节课我们讲过GIT是一个分布式版本管理系统,既然是分布那么必定会涉及远程通信,那么GIT是采用什么协议进行远程通信的呢? git支 ...