jvm gc阻塞时长 占比

这篇文章着眼于转义分析,特别是jvm在运行的程序中执行转义分析需要多长时间。 我做了一些观察,但目前还没有全部解释。

作为介绍,让我们绕道看看jvm -Xcomp中一个鲜为人知且使用更少的标志(我们将看到这是一件好事)。

该标志的行为在jvm 文档中定义为:

-Xcomp首次调用时强制编译方法。 默认情况下,客户端VM( -client )执行1,000个解释方法调用,服务器VM( -server )执行10,000个解释方法调用,以收集信息以进行有效的编译。 指定-Xcomp选项会禁用解释的方法调用,从而以提高效率为代价来提高编译性能。

乍一看,这似乎是一个极好的选择。 在10,000个周期内预热jvm的快捷方式–我们可以直接编译代码。 我们是否应该始终默认启用此选项?

但是文档确实警告这将“以效率为代价”。

jvm在10,000个预热周期中了解代码行为,以便在编译时以最有效的方式进行编译。 立即编译代码意味着可以编译代码,但是编译后的代码可能不是最有效的。 您可以在此博文中阅读有关它的更多信息-但这并不是本文的主题。

如果使用-Xcomp,则不会发生的其他事情是转义分析。 这实际上是相当令人惊讶的,因为jvm不需要通过运行程序来了解是否可以进行转义分析。 这应该通过对代码的静态分析来证明。

看看这个代码(我被思想的启发本博客):

import java.io.IOException;
import java.util.Optional;/*** Created by daniel on 17/12/2015.*/
public class Test {private static String NAME;public static void main(String[] args)throws IOException {new Test().test();}public void test() throws IOException {Name name = new Name("Steven");int iterations = 1_000_000;for(;;){countOptional(name, iterations);System.out.println("Press any key to continue");System.in.read();}}private static void countOptional(Name name, int iterations) {for (int i = 0; i < iterations; i++) {NAME = name.getOptionalName().get();}System.out.println(iterations + " optional iterations " + NAME);}class Name {private final String name;public Name(String name) {this.name = name;}public Optional<String> getOptionalName() {return Optional.ofNullable(name);}}
}

我们需要确保程序在没有gc的情况下运行(我建议使用这些标志):

-verbosegc -Xmx4g -Xms4g

当程序等待输入时,请执行堆转储以查看已创建了多少个Optional对象。 然后按任意键以恢复程序。

要执行堆转储,请先运行jps以确定程序的pid,然后运行:

jmap -histo pid | head

一次不使用-Xcomp标志,一次使用-Xcomp标志。

没有-Xcomp标志

第一次迭代后:

在第二次迭代之后:

所有后续迭代都是相同的,不再创建其他对象:

234k迭代后显然有转义分析开始了-不知道为什么要花这么长时间,通常(例如使用编译代码)10k迭代就足够了吗? 同样在第二次迭代中,它在逃逸分析开始之前又创建了约40万个对象,这也有些神秘。

使用-Xcomp标志

第一次迭代后:

在第二次迭代之后:

每次迭代后, Optional对象的数量增加1m。

摘要

  • -Xcomp是几乎绝对不应在生产中使用的开关。 我可以想象某些情况下您可能想禁用解释器,但是这些情况非常特殊。
  • 逃脱分析似乎至少需要进行20万次迭代才能有效。 因此,您需要允许超过10k的迭代时间以进行完全预热。
  • 还有另一个阶段,在逃避对象之后,似乎需要再次执行此操作。 这需要进一步的理解。
  • 如果通过在两次调用Optional之间进行一些工作来减慢程序速度,则对象数量会减少。 例如,我发现对Math.sin的调用将Optional对象减少了约50%。

翻译自: https://www.javacodegeeks.com/2015/12/long-take-jvm-effect-escape-analysis-maybe-longer-think.html

jvm gc阻塞时长 占比

jvm gc阻塞时长 占比_jvm进行转义分析需要多长时间? 可能比您想象的要长。相关推荐

  1. JVM—GC垃圾回收器总结

    引言   如果说收集算法(标记-清理.复制.标记-整理.分代收集)是内存回收的方法论,那毫无疑问,垃圾收集器就是内存回收的具体实现.   主要有7个gc器,如下图: Serial收集器 介绍   Se ...

  2. 后台IO高负载造成JVM GC长时间停顿

    在我们的生产环境中,我们已经多次看到在JVM (Java虚拟机)中运行的应用程序偶尔会遇到很大的STW (Stop-The-World)应用程序暂停,原因是JVM的GC日志被后台IO通信阻塞(例如,O ...

  3. java服务器gc停顿_如何避免后台IO高负载造成的长时间JVM GC停顿(转)

    译者著:其实本文的中心意思非常简单,没有耐心的读者建议直接拉到最后看结论部分,有兴趣的读者可以详细阅读一下. 原文发表于Linkedin Engineering,作者 Zhenyun Zhuang是L ...

  4. Kafka如何在千万级别时优化JVM GC问题?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | https://www.toutiao.com ...

  5. spark项目实战:电商分析平台之各个范围Session步长、访问时长占比统计(需求一)

    spark项目实战:电商分析平台之各个范围Session步长.访问时长占比统计(需求一) 项目基本信息,架构,需要一览 各个范围Session步长.访问时长占比统计概述 各个范围Session步长.访 ...

  6. 【JVM · GC】垃圾回收器

    1. GC分类与性能指标 1.1 垃圾回收期器概述 垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商.不同版本的JVM来实现. 由于 JDK 版本处于高速迭代过程中,因此Java 发展至今已经衍 ...

  7. 教你九种 JVM GC 问题的排查方法

    目前,互联网上 Java 的 GC 资料要么是主要讲解理论,要么就是针对单一场景的 GC 问题进行了剖析,对整个体系总结的资料少之又少.前车之鉴,后事之师,美团的几位工程师历时一年多的时间,搜集了内部 ...

  8. JVM GC 日志详解

    本文采用的JDK版本: java version "1.8.0_144" Java(TM) SE Runtime Environment (build 1.8.0_144-b01) ...

  9. 面试官问:上亿数据量下,Kafka是如何优化JVM GC问题的?

    大家都知道Kafka是一个高吞吐的消息队列,是大数据场景首选的消息队列,这种场景就意味着发送单位时间消息的量会特别的大,那既然如此巨大的数据量,kafka是如何支撑起如此庞大的数据量的分发的呢? 今天 ...

最新文章

  1. R语言广义加性模型GAMs:可视化每个变量的样条函数、样条函数与变量与目标变量之间的平滑曲线比较、并进行多变量的归一化比较、测试广义线性加性模型GAMs在测试集上的表现(防止过拟合)
  2. 《日本制造业白皮书2018》深度解读:非连续创新、现场力、互联工业
  3. Matlab中与复数有关的函数abs()、angle()
  4. 微信非80端口网页授权
  5. mysql 5.6.6_Mysql下Limit注入方法(此方法仅适用于5.0.0mysql5.6.6的版本)
  6. html中的时间代码怎么写,html网页代码中的时间样式怎样设置
  7. composer升级_Composer-命令简介
  8. leetcode —— 面试题 17.12. BiNode
  9. windows服务器安装nginx
  10. 贪心算法——合并区间(Leetcode 56)
  11. RxJava flatMap,switchMap,concatMap
  12. sql 语句 查询结果赋值变量_RationalDMIS 7.1 变量赋值 ASSIGN语句
  13. Ubuntu 环境搭建系列--ubuntu20.04 tftp服务搭建
  14. da8da八字排盘官方下载_da8da六爻排盘
  15. AI - Intelligent Agents
  16. 关于国际论文中,国内外人名顺序的问题
  17. IntelliJ IDEA 在使用manven后的纠结(每次修改代码都要重启tomcat才能看效果吗?),请各位大侠来看看问题
  18. 调用图形验证码接口时,为什么要在接口后方添加随机数
  19. office2016的word打开程序之后显示需要修复问题解决解决
  20. jekins 下载插件、安装插件报错

热门文章

  1. P5934-[清华集训2012]最小生成树【最小割】
  2. YbtOJ#573-后缀表达【二分图匹配】
  3. jzoj2292-PPMM【模拟,堆】
  4. jzoj1247-队列变换【字符串hash,二分】
  5. ssl提高组国庆模拟赛【2018.10.5】
  6. P2158,jzoj1709-仪仗队【欧拉函数,数论】
  7. P1197-星球大战【并查集,图论】
  8. [系统安全]使用OD编写连连看外挂
  9. 动态规划训练19、最短路 [Help Jimmy POJ - 1661 ]
  10. ssh(Spring+Spring mvc+hibernate)——EmpController