图片大小 媒体大小自适应_自适应堆大小

图片大小 媒体大小自适应

一次性咖啡杯 在改进测试平台以改进Plumbr GC问题检测器的同时 ,我最终编写了一个小型测试用例,我认为这对于更广泛的读者来说可能很有趣。 我追求的目标是测试JVM在eden,survivor和Tenured空间之间如何分割堆方面的自适应性。

测试本身正在成批生成对象。 批次每秒生成一次,每个批次的大小为500KB。 这些对象被引用了五秒钟,此后将删除引用,并且该特定批处理中的对象可以进行垃圾收集。

该测试是使用ParallelGC在Mac OS X上的Oracle Hotspot 7 JVM上运行的,具有30MB的可用堆空间。 了解了平台,我们可以预期JVM将使用以下堆配置启动:

  • JVM将以Young的10MB和Tenured空间的20MB开头,因为没有显式配置,JVM将使用1:2的比率在Young和Tenured的空间之间分配堆。
  • 在我的Mac OS X中,在Eden和两个Survivor空间之间进一步分配了10MB的年轻空间,分别为8MB和2x1MB。 同样,这些是所使用的特定于平台的默认值。

的确,当启动测试并使用jstat在后台进行窥视时,我们看到以下内容,证实了我们的餐后估计:

My Precious:gc-pressure me$ jstat -gc 2533 1sS0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT   
1024.0 1024.0  0.0    0.0    8192.0   5154.4   20480.0      0.0     21504.0 2718.9      0    0.000   0      0.000    0.000
1024.0 1024.0  0.0    0.0    8192.0   5502.1   20480.0      0.0     21504.0 2720.1      0    0.000   0      0.000    0.000
1024.0 1024.0  0.0    0.0    8192.0   6197.5   20480.0      0.0     21504.0 2721.0      0    0.000   0      0.000    0.000
1024.0 1024.0  0.0    0.0    8192.0   6545.2   20480.0      0.0     21504.0 2721.2      0    0.000   0      0.000    0.000
1024.0 1024.0  0.0    0.0    8192.0   7066.8   20480.0      0.0     21504.0 2721.6      0    0.000   0      0.000    0.000
1024.0 1024.0  0.0    0.0    8192.0   7588.3   20480.0      0.0     21504.0 2722.1      0    0.000   0      0.000    0.000

从这里,我们还可以对即将发生的情况给出下一组预测:

  • 伊甸园中的8MB内存将在16秒内填满–请记住,我们每秒生成500KB的对象
  • 在每一刻中,我们都有大约2.5MB的活动对象-每秒生成500KB,并将对象的引用保持五秒钟,这大约等于我们的数量
  • 每当Eden充满时,都会触发次要GC,这意味着我们应该每16秒左右看到一次次要GC。
  • 在进行次要的GC之后,我们将以过早的升级而告终-生存空间只有1MB的大小,而2.5MB的实时设置将无法容纳我们的任何1MB生存空间。 因此,清理伊甸园的唯一方法是将1.5MB(2.5MB-1MB)的不适合生存者的活动物体传播到Tenured空间。

查看日志也使我们对这些预测充满信心:

My Precious:gc-pressure me$ jstat -gc -t 2575 1s
Time   S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT   6.6 1024.0 1024.0  0.0    0.0    8192.0   4117.9   20480.0      0.0     21504.0 2718.4      0    0.000   0      0.000    0.0007.6 1024.0 1024.0  0.0    0.0    8192.0   4639.4   20480.0      0.0     21504.0 2718.7      0    0.000   0      0.000    0.000... cut for brevity ...14.7 1024.0 1024.0  0.0    0.0    8192.0   8192.0   20480.0      0.0     21504.0 2723.6      0    0.000   0      0.000    0.00015.6 1024.0 1024.0  0.0   1008.0  8192.0   963.4    20480.0     1858.7   21504.0 2726.5      1    0.003   0      0.000    0.00316.7 1024.0 1024.0  0.0   1008.0  8192.0   1475.6   20480.0     1858.7   21504.0 2728.4      1    0.003   0      0.000    0.003... cut for brevity ...29.7 1024.0 1024.0  0.0   1008.0  8192.0   8163.4   20480.0     1858.7   21504.0 2732.3      1    0.003   0      0.000    0.00330.7 1024.0 1024.0 1008.0  0.0    8192.0   343.3    20480.0     3541.3   21504.0 2733.0      2    0.005   0      0.000    0.00531.8 1024.0 1024.0 1008.0  0.0    8192.0   952.1    20480.0     3541.3   21504.0 2733.0      2    0.005   0      0.000    0.005... cut for brevity ...45.8 1024.0 1024.0 1008.0  0.0    8192.0   8013.5   20480.0     3541.3   21504.0 2745.5      2    0.005   0      0.000    0.00546.8 1024.0 1024.0  0.0   1024.0  8192.0   413.4    20480.0     5201.9   21504.0 2745.5      3    0.008   0      0.000    0.00847.8 1024.0 1024.0  0.0   1024.0  8192.0   961.3    20480.0     5201.9   21504.0 2745.5      3    0.008   0      0.000    0.008

不是在16秒内,而是每隔15秒左右,垃圾收集就会启动,清理Eden,并将约1MB的活动对象传播到其中一个Survivor空间,并将剩余空间溢出到Old space。

到目前为止,一切都很好。 JVM确实表现出我们所期望的方式。 JVM监视了一段时间之后,有趣的部分开始了,并开始了解正在发生的事情。 在我们的测试案例中,这发生在大约90秒内:

My Precious:gc-pressure me$ jstat -gc -t 2575 1s
Time   S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT   94.0 1024.0 1024.0  0.0   1024.0  8192.0   8036.8   20480.0     8497.0   21504.0 2748.8      5    0.012   0      0.000    0.01295.0 1024.0 3072.0 1024.0  0.0    4096.0   353.3    20480.0    10149.6   21504.0 2748.8      6    0.014   0      0.000    0.01496.0 1024.0 3072.0 1024.0  0.0    4096.0   836.6    20480.0    10149.6   21504.0 2748.8      6    0.014   0      0.000    0.01497.0 1024.0 3072.0 1024.0  0.0    4096.0   1350.0   20480.0    10149.6   21504.0 2748.8      6    0.014   0      0.000    0.01498.0 1024.0 3072.0 1024.0  0.0    4096.0   1883.5   20480.0    10149.6   21504.0 2748.8      6    0.014   0      0.000    0.01499.0 1024.0 3072.0 1024.0  0.0    4096.0   2366.8   20480.0    10149.6   21504.0 2748.8      6    0.014   0      0.000    0.014
100.0 1024.0 3072.0 1024.0  0.0    4096.0   2890.2   20480.0    10149.6   21504.0 2748.8      6    0.014   0      0.000    0.014
101.0 1024.0 3072.0 1024.0  0.0    4096.0   3383.7   20480.0    10149.6   21504.0 2748.8      6    0.014   0      0.000    0.014
102.0 1024.0 3072.0 1024.0  0.0    4096.0   3909.7   20480.0    10149.6   21504.0 2748.8      6    0.014   0      0.000    0.014
103.0 3072.0 3072.0  0.0   2720.0  4096.0   323.0    20480.0    10269.6   21504.0 2748.9      7    0.016   0      0.000    0.016

我们在这里看到的是JVM的惊人适应性。 在了解了应用程序的行为之后,JVM调整了幸存者空间的大小,使其足以容纳所有活动对象。 现在,Young空间的新配置为:

  • 伊甸园4MB
  • 幸存者空间每个3MB

此后,GC频率增加–伊甸园现在减小了50%,而不是大约16秒,现在大约需要8秒左右的时间。 但是好处也显而易见,因为幸存者空间现在足够大,可以在任何给定时间容纳活动物。 再加上没有对象的生存时间超过一个较小的GC周期(记住,在任何给定时间只有2.5MB的生存对象)这一事实,我们不再将对象提升到旧空间。

继续监视JVM,我们发现采用后旧空间使用率是恒定的。 没有更多的对象传播到旧的对象,但是由于没有触发大型GC,因此在进行适配之前设法传播的约10MB垃圾将永远存在于旧的空间中。

如果您确定自己在做什么,也可以选择“惊人的适应性”。 在JVM参数中指定-XX-UseAdaptiveSizingPolicy将指示JVM坚持在启动时给定的参数,而不是试图超越您。 谨慎使用此选项,现代JVM通常非常擅长为您预测合适的配置。

翻译自: https://www.javacodegeeks.com/2014/10/adaptive-heap-sizing.html

图片大小 媒体大小自适应

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

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

相关文章

如何优雅的激怒C/C++程序员

一、想知道怎么激怒C/C程序员及爱好者吗?那就来一起看看吧:C是一个编译很快,但运行很慢的语言。对此我不接受反驳,C我早就精通了。你问我需要多久才能精通,只要14天。前13天学C,最后1天看看面向对象就行。C…

java xml格式打包,maven项目打包xml没有被打包解决办法 ,mybatis的xml打包

在打maven包是遇见一个问题:打完包发现src/main/java中的的mapping没有被打包进去;原因主要是mapping目录里面的文件都是xml文件并不是.java文件,而maven打包默认的src/main/java的是Java文件,它不会打包里面的xml文件&#xff0c…

老司机找BUG指南,赶紧拿走。。

一.码畜:靠编译器帮自己查语法错误消灭笔误:编写适合程序员的键盘练习if (常量变量或表达式)使用goto接力超长的if,switch连续的if还是if elseif多个条件的组合:精心的排版多重括号的匹配条件编译各种const:不要纠结各种常量了,这个世界上唯一不变的就是…

fest556_AssertJ Fest Hamcrest

fest556我以前在博客中介绍过Hamcrest ,并优先使用其assertThat方法而不是JUnit的Assert 。 但是,我很快找到了FEST断言 ,并愉快地切换到它。 它提供了与Hamcrest相同的改进的测试可读性,并改善了故障消息,但具有启用…

java xxtea加密,base64和Xxtea的加密和解密

base64和Xxtea的加密和解密数据加密是web数据安全的一种方式,前几天拿到一个base64xxtea加密的数据,现在在这里整理一下使用的过程。首先当然是全网站找解密方法,但是最后的结果不是很理想,都不是自己想要的,这里只针对…

红帽 jboss_红帽JBoss BRMS和BPMS富客户端框架展示了与GWT / Errai / UberFire和AngularJS的多语言集成...

红帽 jboss上周,我发布了一个博客,重点介绍了我的演示文稿,该演示文稿展示了我们在BRMS和BPMS平台内完成的工作,Drools和jBPM项目的产品化版本所产生的丰富客户端平台。 该演示文稿是所有屏幕截图和视频,您可以在此处找…

你知道自己适合做程序员吗?

哪有什么适不适合?编码本来就不是一件复杂的事情,日常工作不就是敲码、找Bug、 跟产品经理吵架、终于下班了、回家改BUG吗?今天看到了最奇葩的辞职理由:我觉得我数学不好,我不想做编程 我坐不住,我不想做编程 我性格太活泼&…

php dump utfp,php pchart乱码-使用REST接口获取GeoServer中的...-结合 thinkPHP 分页写成自己分页类_169IT.COM...

本页文章导读:▪php pchart乱码 有俩种情况:①:未将中文字符编码格式修改成utf-8 (例子如下:)mb_convert_encoding($data, "html-entities","utf-8" ); ②:字体库出现问题 (请使用simhei.ttf字体 此字体…

eslint quo_Quo Vadis JUnit

eslint quo对我而言, JUnit是Java Universe中最重要的库。 但是我认为它的新版本已经过期。 通过将方法定义作为测试定义的方法,JUnit非常灵活,需要各种技巧……抱歉的功能,要做您实际上应该能够使用的基本(Java 8&…

C/C++冷门知识点你知道多少呢?

在学习C语言的过程中,我们都自己总结了一些重要的知识点,但是有些不常用的冷门知识点可能就被我们选择性忘记了,你要不要来回一下呢?1:int跟signed int是一回事,short、long亦然,但char不是。ch…

判断人物眼型matlab,怎么判断眼型和脸型?

原标题:怎么判断眼型和脸型?为了判断脸部的形状,建议从面部类型诊断的长度和比例来衡量。我们只测量2个地方的长度和宽度。长度是从眉毛位置到嘴巴的长度,宽度是以嘴巴位置为中心到两个脸颊的宽度。脸型大致分为5种类型脸型大致分…

maven 打包编译_您是否真的想加快Maven的编译/打包速度? 那么takari生命周期插件就是答案。...

maven 打包编译像你们中的许多人一样,我正在使用多模块Maven项目 。 与现有的许多系统相比,它不是一个巨大的系统,它具有15个模块,3种不同的耳朵部署,带有属性文件的大量参数化以及大约10万行Java代码。 在开发高峰期&…

C/C++制作人机猜拳小游戏

C语言学完了之后总是感觉做不出什么有意思的东西&#xff0c;今天我们就来做一个好玩的小游戏试试。#include<stdio.h> #include<time.h> #include<conio.h> #include <windows.h>void win(int a, int b); void wait(); void softgame(); void lefttim…

php实现防止sql注入的通用方法,PHP实现防止sql注入的通用方法

function inject_check($sql_str) {return eregi(select|insert|and|or|update|delete|\|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile, $sql_str);}function verify_id($idnull) {if(!$id) {exit(没有提交参数&#xff01;);} elseif(inject_check($id)) {exit(提交的参…

r 数据框选子集_在带有组合框的值列表的下拉列表中显示显示属性的子集

r 数据框选子集组合框值列表&#xff08;inputComboboxListOfValues&#xff09;应该是使用LOV的非常流行的ADF Faces组件。 坦白说&#xff0c;这是我最喜欢的值列表方法。 在这篇简短的文章中&#xff0c;我将重点介绍ADF开发人员经常忽略的一项功能。 如果默认情况下定义了L…

学php要懂js吗,js要怎么学

有朋友说想要一个学习javascript&#xff0c;但是不知道如何去学习。本篇文章中小编总结了JavaScript重要知识点以及学习方法&#xff0c;有点长&#xff0c;但是很好用&#xff0c;希望对你有所帮助。this&#xff1a;可以开个坑好好研究研究七、了解nodenode现在可以说是前端…

1024到了,默默给自己点个赞!

只有程序员才能看懂的搞笑图片写了一大堆SQL语句&#xff0c;自己都不敢相信居然运行成功了找bug给客户演示&#xff0c;我的bug没被发现正则表达式返回预期效果正则表达式没有返回预期效果上线两天了&#xff0c;客户突然要改需求&#xff0c;我去年买了个表一口气写完代码&am…

input发送a.jax_Java EE 7 / JAX-RS 2.0:具有自定义HTTP标头的简单REST API身份验证和授权...

input发送a.jax在使用已可用的HTTP协议实施Web服务时&#xff0c;REST带来了很多便利。 通过仅通过指定的URL触发GET&#xff0c;POST和其他HTTP方法&#xff0c;您将确保通过REST服务的响应来完成某些工作。 但是&#xff0c;无论REST给开发人员带来了什么便利&#xff0c;安全…

oracle regr,oracle 分析函数

一、Oracle分析函数入门分析函数是什么&#xff1f;分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数&#xff0c;它可以在数据中进行分组然后计算基于组的某种统计值&#xff0c;并且每一组的每一行都可以返回一个统计值。分析函数和聚合函数的不同之处是什么&a…

C语言的main函数,究竟有几种写法?

从学习C语言开始就一直写个一个函数&#xff0c;那么你知道它的标准写法什么什么样吗&#xff1f;main函数&#xff0c;又称主函数&#xff0c;是程序执行的起点&#xff0c;我们平时写的main函数是什么样呢&#xff1f;所以说&#xff0c;其他的写法并不符合标准&#xff0c;有…