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

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标志

第一次迭代后:

图片1

在第二次迭代之后:

图片2

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

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

使用-Xcomp标志

第一次迭代后:

图片3

在第二次迭代之后:

图片4

每次迭代后, 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阻塞时长 占比

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336566.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jquery mysql php_jQuery+PHP+Mysql在线拍照和在线浏览照片

本文示例建立在本站helloweba.net两篇文章之上&#xff0c;一篇是用于在线拍照的&#xff1a;JavascriptPHP实现在线拍照功能&#xff0c;另一篇是用于浏览照片的&#xff1a;Fancybox丰富的弹出层效果。如果您对在线拍照和Fancybox不大了解&#xff0c;可以先参照以上两篇文章…

设计散列表实现通讯录查找系统_[源码和文档分享]利用哈希表实现电话号码查询系统...

第一章 需求分析1.1 问题描述设计一个电话号码查询系统&#xff0c;为来访的客⼈提供各种信息查询服务。1.2 基本要求设计每个记录有下列数据项&#xff1a;电话号码、用户名、地址从键盘输入个记录&#xff0c;分别以电话号码和用户名为关键字建立不同散列表存储采用一定的方法…

C++基础(2)

【1】静态全局变量 1.通常情况下&#xff0c;静态全局变量的声明和定义放在源文件中&#xff0c;并且不能使用extern关键字将全局静态变量导出&#xff0c;作用域仅限于定义静态全局变量的文件内部。 2.如果头文件中声明静态全局变量&#xff0c;在声明的同时会被初始化&…

drill apache_使用Apache Drill REST API通过Node构建ASCII仪表盘

drill apacheApache Drill有一个隐藏的瑰宝&#xff1a;易于使用的REST接口。 该API可用于查询&#xff0c;分析和配置Drill引擎。 在此博客文章中&#xff0c;我将解释如何使用Brilled Contrib使用Drill REST API创建ascii仪表板。 ASCII仪表盘如下所示&#xff1a; 先决条…

mysql 8.0用doc修改密码_MYSQL8.0修改密码流程

MYSQL8.0修改密码流程1.以管理员身份打开cmd2.找到mysql 的安装路径bin文件的路径&#xff0c;3.输入net start mysql4.输入mysql -u root -p5.找到my.ini文件6.在my.ini里面的[mysqld]这一行后面添加 skip -grant-tables,保存文件&#xff0c;注意不是[mysql]7.输入mysqld --s…

颜色空间缩减color space reduction

颜色空间缩减公式 //---------------------------------【头文件、命名空间包含部分】-------------------------- // 描述&#xff1a;包含程序所使用的头文件和命名空间 //---------------------------------------------------------------------------------------…

运动基元_发现大量Java基元集合处理

运动基元在阅读博客文章5减少Java垃圾收集开销的技巧时 &#xff0c;我想起了一个名为Trove的小型Java收集库&#xff0c;该库“为Java提供了高速的常规和原始收集”。 我对将Trove应用到允许原语的集合而不是要求集合中的元素成为完整的引用对象的能力特别感兴趣。 我在这篇文…

python判断奇偶数字符串的拼接_Python字符串拼接方法总结

这篇文章主要介绍了Python字符串拼接的几种方法整理的相关资料,这里提供了五种方法及实现&#xff0c;需要的朋友可以参考下Python字符串拼接的几种方法整理第一种 通过加号()的形式print(第一种方式通过加号形式连接 &#xff1a; lovePython \n)第二种 通过逗号(,)的形式pr…

Split分离通道

#include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2\opencv.hpp> using namespace cv; using namespace std;int main() {vector<Mat>cha;Mat b, g, r,dst;//1.加载两幅图片…

上下文异常中的上下文属性_在没有适当上下文的情况下引发异常是一种不良习惯...

上下文异常中的上下文属性Allison Anders等人的《四个房间》&#xff08;1995&#xff09;。 我不断重复同样的错误。 因此&#xff0c;该停止并制定规则以防止这种情况了。 错误不是致命的&#xff0c;但很烦人。 当查看生产日志时&#xff0c;经常会看到类似"File does…

最大公约数简便算法_求最大公约数的4种算法

for(z0; z<10000000; z) 循环只是为了增加程序的运行时间&#xff0c;让我们体会算法的时间复杂度。算法一&#xff1a;短除法想法&#xff0c;采用短除法找出2个数的所有公约数&#xff0c;将这些公因子相乘&#xff0c;结果就是2个数的最大公约数。【找公因子&#xff0c;…

java 编写代码_如果您在2015年编写过Java代码-这是您不容错过的趋势

java 编写代码去年我们有机会遇到的最有趣趋势的实用概述 在这篇文章中&#xff0c;我们回顾了构成我们2015年对话的5个主题和新发展。与其他许多年终总结保持较高水平的不同&#xff0c;我们将做一个更实际的操作不用流行语 。 好吧&#xff0c;没有太多*流行语。 与往常一样…

java自动生成合同_Java 7和Java 8之间的细微自动关闭合同更改

java自动生成合同Java 7的try-with-resources语句和与该语句一起使用的AutoCloseable类型的一个不错的功能是&#xff0c;静态代码分析工具可以检测到资源泄漏。 例如&#xff0c;Eclipse&#xff1a; 当您具有上述配置并尝试运行以下程序时&#xff0c;您将收到三个警告&…

Python学习(1)

1.str字符串操作 len(str) 计算字符串长度 str.replace(xxx,xxxx) 替换指定字符 str.upper()字符串转大写 str.lower()字符串转小写 str.strip()删除左右多余的空格 str.lstrip()删除左边多余的空格 str.rstrip()删除右边的空格 format(a,b,c) 传参显示 2.索引 out hello wo…

opencv求两张图像光流_光流(optical flow)和openCV中实现

转载请注明出处&#xff01;&#xff01;&#xff01;光流(optical flow)和openCV中实现光流的概念&#xff1a;是Gibson在1950年首先提出来的。它是空间运动物体在观察成像平面上的像素运动的瞬时速度。是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一…

storm apache_Apache Storm的实时情绪分析示例

storm apache实时情感分析是指处理自然语言文本&#xff08;或语音&#xff09;流以提取主观信息。 琐碎的用例用于构建推荐引擎或查找社交媒体趋势。 我选择了Apache Storm作为实时处理引擎。 Storm非常强大&#xff08;我们正在生产中使用它&#xff09;&#xff0c;并且非常…

怎么用python画圆的公式_怎么用python画圆

python中内置了许多第三方库&#xff0c;来帮助它完成各种功能。Turtle库就是Python语言中一个很流行的绘制图像的函数库(推荐学习&#xff1a;Python视频教程)Turtl库用于绘制线、圆、其他形状或者文本这个库被介绍为一个最常用的用来给孩子们介绍编程知识的方法库&#xff0c…

嵌入式java基准测试_Java正则表达式库基准测试– 2015年

嵌入式java基准测试在尝试使Java在计算机语言基准游戏的regexdna挑战中排名第一时&#xff0c;我正在研究Java正则表达式库的性能。 我可以找到的最新网站是2010年的tusker.org 。因此&#xff0c;我决定使用Java Microbenchmarking Harness重做测试并发布结果&#xff08;破坏…

libgdx和unity_libgdx和Kotlin –类[2D平台原型]

libgdx和unity这篇文章是libgdx和Kotlin文章的后续文章。 我已经决定开发一个简单的2D平台程序的原型&#xff08;沿着我的早期文章中的Star Assault进行介绍&#xff09;&#xff0c;但是我一直在使用和学习Kotlin&#xff0c;而不是Java。 对于本教程&#xff0c;该项目应处…

java1.7开发环境_在Windows平台搭建Java 1.7开发环境

OS&#xff1a;Windows 7 or laterJava Version: 1.7.x本文具体的演示环境是&#xff1a;Windows 8.1&#xff0c;Java 1.7.0_45。一、安装JDK需要注意的是安装路径中不要出现非西文符号。实际上我一般喜欢在安装路径中也尽可能不出现空格。比如&#xff1a;在我的PC上&#xf…