图片大小 媒体大小自适应

在改进测试平台以改进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

图片大小 媒体大小自适应

图片大小 媒体大小自适应_自适应堆大小相关推荐

  1. 自适应_自适应信号分解综述

    真实世界中的复杂系统是由相互影响的内在机制控制着,这些内在机制在多重时间和空间尺度 上运行,表现出复杂的多组成成分.多层次结构和突现性等特点,这使得理解和刻画复杂系统变得困难.一个重要的方法是分析复杂 ...

  2. python窗口界面自适应_自适应页面的实现方式

    页面自适应 自适应是指页面内容自动适应屏幕大小,实现自适应的方法有多种: 1.简易场景实现自适应:浮动.页面居中.元素宽度不写固定而设置百分比自动匹配大小.这样在页面宽度发生变化时,能利用以上特性实现 ...

  3. 分数的大小比较优秀教案_《分数大小的比较》教学设计

    <分数大小的比较>教学设计 教学目标: 1. 通过学生自主发现,自主探究,理解分子是"1"的分数大小的比较, 学会同分母分数和分子是"1"的分数大小 ...

  4. 一次 G1 堆大小不均问题的排查及解决

    现象 生产服务中,存在部分服务在 JVM 参数.POD 规格.物理机规格 一致,负载流量差异不大的情况下,出现在内存使用上差异较大的情况.下面是一些基本信息的收集和整理. JVM 参数 -XX:+Us ...

  5. html怎么使图片自动填充,CSS怎么将img图片填满父容器div自适应容器大小

    CSS怎么将img图片填满父容器div自适应容器大小 发布时间:2021-03-19 09:35:26 来源:亿速云 阅读:114 作者:小新 这篇文章将为大家详细讲解有关CSS怎么将img图片填满父 ...

  6. html 网页自动适应大小,HTML+CSS入门 网页自适应解读

    本篇教程介绍了HTML+CSS入门 网页自适应解读,希望阅读本篇文章以后大家有所收获,帮助大家HTML+CSS入门. < 1.viewport标签 基本语法: 上面这行代码的意思是,面积的100 ...

  7. java 堆大小_适当的Java堆大小的5个技巧

    java 堆大小 确定生产系统合适的Java堆大小不是一件容易的事. 在我的Java EE企业经验中,由于Java堆容量和调整不足,我遇到了多个性能问题案例. 本文将为您提供5个技巧,这些技巧可以帮助 ...

  8. html 字号自适应,html自适应网页里字体大小自适应屏幕的方法

    html自适应网页里字体大小自适应屏幕的方法 发布时间:2020-11-20 16:40:22 来源:亿速云 阅读:216 作者:小新 这篇文章主要介绍了html自适应网页里字体大小自适应屏幕的方法, ...

  9. java 堆大小的最大值_优化Java堆大小的5个技巧

    优化Java堆大小的5个技巧 摘要:Java堆容量不足可以对性能造成很大影响,这样无疑就给程序带来不可必要的麻烦,本文总结了影响Java堆容量不足的五大原因以及巧妙地去优化? 本文作者Pierre是一 ...

最新文章

  1. HTML5新特性总结
  2. NR 5G 世界通信发展史简述
  3. 神经网络防止过拟合的方法
  4. laravel admin 根绝model创建控制器路由命令
  5. 模糊逻辑学习--建立Mamdani系统(GUI)
  6. Java的一个关于“星球”的枚举
  7. Cmdkey 凭证管理器工具
  8. Eventbus收录
  9. Loadrunner教程–常用操做流程
  10. java前后端分离解决session,解决前后端分离开发sessionId不一致问题
  11. J2EE进阶之自定义标签,JSTL标签,国际化 十四
  12. 【Pytorch with fastai】第 11 章 :使用 fastai 的中级 API 进行数据处理
  13. 计算机文件夹移动的实验原理,怎么移动电脑文件和文件夹
  14. Java从零到企业级电商项目实战: linux环境配置
  15. 损失次数模型-负二项分布
  16. 如何用Python快速实现一个垃圾分类APP【附带微信小程序】
  17. 【Git】自建代码托管平台-GitLab
  18. 【科学的尽头是神学】祖师爷坐镇
  19. Linux中延时/暂停函数(sleep/usleep/nanosleep/select)的比较、底层实现说明
  20. 解决拉取代码no supported authentication methods avaiable

热门文章

  1. jzoj4017-逃跑【0/1分数规划,线段树,dp】
  2. P4841,jzoj3303-城市规划【NTT,多项式求逆,dp】
  3. P2598-狼和羊的故事【最大流,最小割】
  4. 【做题记录】人类智慧
  5. 纪中C组模拟赛总结(2019.8.9)
  6. 经典题:poj2104-区间第k小 整体二分学习
  7. 面试 - 要不简单聊一下你对MySQL索引的理解?
  8. 【ajax】readyState=4并且status=200时,还进error方法
  9. 如何轻松愉快的理解条件随机场(CRF)
  10. Java8学习笔记(1) -- 从函数式接口说起