jvm gc策略_IBM JVM调整– gencon GC策略

jvm gc策略

本文将向您详细介绍从Java虚拟机(例如HotSpot或JRockit)迁移到IBM JVM时重要的Java堆空间调整注意事项。 此调整建议基于我为我的一个IT客户端执行的最新故障排除和调整任务。

IBM JVM概述

正如您可能从其他文章中看到的那样,IBM JVM在某些方面与HotSpot JVM不同,因为它没有PermGen内存空间。 从垃圾回收的角度来看,它确实为您提供了可以利用多物理核心计算机的高级算法; 与HotSpot JVM类似。

从故障诊断的角度来看,IBM为您提供了许多工具。 包括从其JVM实现中获得的开箱即用的Thread Dump和Heap Dump生成功能。

例如,IBM JVM线程转储特别强大,因为它为您提供了有关JVM的额外数据,例如活动的JVM环境变量,GC策略,每个活动的类加载器中的已加载类等。我们将在本部分中对此进行更详细的探讨。我们的线程转储培训计划的4 。

IBM VM –默认GC行为

现在回到我们的主要主题,了解IBM JVM垃圾收集器(版本1.5和1.6)的默认行为非常重要。 默认情况下,使用终身记忆例如,它不会创建一个单独的YoungGen(幼儿园)空间中创建了Java堆空间。 这意味着任何内存分配都将进入保管空间(短期和长期对象),该空间随后由默认收集器(通过Full GC)收集。

在下面找到详细的GC快照,其中显示了默认的GC内存故障,并带有解释:

<af type="tenured" id="5" timestamp="Mar 01 13:40:30 2012" intervalms="0.000"><minimum requested_bytes="48" /><time exclusiveaccessms="0.106" meanexclusiveaccessms="0.106" threads="0" lastthreadtid="0x000000011A846B00" /><tenured freebytes="20131840" totalbytes="2013265920" percent="0" ><soa freebytes="0" totalbytes="1993134080" percent="0" /><loa freebytes="20131840" totalbytes="20131840" percent="100" /></tenured><gc type="global" id="8" totalid="2492" intervalms="2017588.587"><finalization objectsqueued="199" /><timesms mark="808.286" sweep="9.341" compact="0.000" total="818.292" /><tenured freebytes="1362331024" totalbytes="2013265920" percent="67" ><soa freebytes="1344212368" totalbytes="1995147264" percent="67" /><loa freebytes="18118656" totalbytes="18118656" percent="100" /></tenured></gc><tenured freebytes="1362330976" totalbytes="2013265920" percent="67" ><soa freebytes="1344212320" totalbytes="1995147264" percent="67" /><loa freebytes="18118656" totalbytes="18118656" percent="100" /></tenured><time totalms="818.750" /></af>

好的,默认的IBM JVM GC策略是不同的……问题是什么?

此默认JVM策略的问题在于,所有Java对象都将复制到使用权空间并通过全局集合(完整GC)进行收集。 对于许多Java EE应用程序,短期对象与长期对象的比率要高得多。 这意味着您的JVM将需要执行很多主要的收集工作,以清理短期对象。 结果:Full GC的频率增加,JVM暂停时间增加,CPU利用率增加和性能下降!

这正是我们在使用默认GC策略迁移到JVM HotSpot 1.5(使用增量和并行GC)到IBM JVM 1.6进行负载测试之后观察到的结果。 根据上述说明,重度GC过程被确定为根本原因。

请解决!

好消息是,IBM JVM 从版本1.5开始引入了世代和并发GC收集器 。 该GC政策正提供我们想要的:

  • 它确实将Java Heap空间在苗圃空间和保育空间之间进行了划分
  • 托儿所(YoungGen)空间对象通过清除剂GC收集器分别收集
  • 通过全局GC收集器收集长期空间对象
  • GC收集器是并发的,并且可以利用任何多物理核计算机

结果:

  • 降低主要采集频率(全GC)
  • 减少了全GC消耗的时间和暂停时间
  • 增加JVM吞吐量
  • 提高应用程序的性能和容量

您可以通过在下面添加此JVM参数来启用它:

-Xgcpolicy:gencon

在启用此GC策略后,在下面的详细GC日志中可以找到什么:

<af type="nursery" id="15" timestamp="Mar 08 05:34:06 2012" intervalms="1289096.227"><minimum requested_bytes="40" /><time exclusiveaccessms="0.085" meanexclusiveaccessms="0.085" threads="0" lastthreadtid="0x0000000118113900" /><refs soft="18043" weak="204057" phantom="27" dynamicSoftReferenceThreshold="32" maxSoftReferenceThreshold="32" /><nursery freebytes="0" totalbytes="530716672" percent="0" /><tenured freebytes="1887422016" totalbytes="2013265920" percent="93" ><soa freebytes="1786758720" totalbytes="1912602624" percent="93" /><loa freebytes="100663296" totalbytes="100663296" percent="100" /></tenured><gc type="scavenger" id="15" totalid="15" intervalms="1289097.271"><flipped objectcount="1486449" bytes="129908000" /><tenured objectcount="1176" bytes="184144" /><finalization objectsqueued="3082" /><scavenger tiltratio="73" /><nursery freebytes="364304408" totalbytes="495208448" percent="73" tenureage="10" /><tenured freebytes="1886766656" totalbytes="2013265920" percent="93" ><soa freebytes="1786103360" totalbytes="1912602624" percent="93" /><loa freebytes="100663296" totalbytes="100663296" percent="100" /></tenured><time totalms="233.886" /></gc><nursery freebytes="364238872" totalbytes="495208448" percent="73" /><tenured freebytes="1886766656" totalbytes="2013265920" percent="93" ><soa freebytes="1786103360" totalbytes="1912602624" percent="93" /><loa freebytes="100663296" totalbytes="100663296" percent="100" /></tenured><refs soft="17992" weak="5344" phantom="27" dynamicSoftReferenceThreshold="32" maxSoftReferenceThreshold="32" /><time totalms="236.858" /></af>

请记住,您的应用程序仍可能无法从该GC策略中受益(长寿命对象的占用空间更大等),因此,我对您的建议是始终进行尽职调查并执行适当的容量规划和负载测试您的应用程序,然后再执行任何主要的调整建议。

结论

我希望本文能帮助您了解默认的IBM JVM 1.5 / 1.6 GC策略以及Java EE应用程序如何从该GC策略gencon调整建议中受益。

参考: IBM JVM调优–来自我们JCG合作伙伴 Pierre-Hugues Charbonneau的gencon GC策略 ,位于Java EE支持模式和Java教程博客。


翻译自: https://www.javacodegeeks.com/2012/04/ibm-jvm-tuning-gencon-gc-policy.html

jvm gc策略

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

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

相关文章

linux etc 服务启动脚本,linux 服务脚本启动问题

对于使用了 systemd 的系统&#xff0c;所有的 service 服务都会默认转为 systemd 服务之后再由 systemd 来执行&#xff0c;转换之后&#xff0c;你也可以直接使用 systemd 来执行了(它的用户工具就是你用的 systemctl)&#xff0c;除非是一些非 service 标准的命令&#xff0…

芬兰高性能图表控件-免费试用并提供技术支持

图表控件对于很多技术研发人员、工程设计师来说肯定不陌生&#xff0c;但市面上已有的图表控件产品大多功能单一、性能也不稳定&#xff0c;很难满足不同人群在不同场合的使用需求。为此&#xff0c;专注于开发高性能和最先进的数据可视化工具公司Arction则给出了完美的解决方案…

linux open函数_Linux驱动开发 / 字符设备驱动内幕 (1)

哈喽&#xff0c;我是老吴&#xff0c;继续记录我的学习心得。一、保持专注的几个技巧将最重要的事放在早上做。待在无干扰环境下&#xff0c;比如图书馆。意识到刚坐下开始投入工作前&#xff0c;有点负面小情绪是特别正常的现象。让“开心一刻”成为计划的一部分。拥有合情合…

xftp 无法连接linux 22端口,解决Xshell不从22端口连接服务器

PL&sol;SQL Developer主数据库连接和窗口连接切换Oracle开发者估计对PL/SQL Developer都非常熟悉了,里面有些小的功能点大概还有些初学者没发现.PL/SQL Developer支持多连接多窗口,下面详细说说. 主连接的概念 打开PL ...4 多表代替密码之Hill 密码 2实现该解密方法的KEY 不…

bzoj4484[JSOI2015]最小表示

题意 给出一张DAG,要求删除尽量多的边使得连通性不变.(即:若删边前u到v有路径,则删边后仍有路径).点数30000,边数100000. 分析 如果从u到v有(u,v)这条边,且从u到v只有这一条路径,那么这条边必须保留.否则这条边一定可以删除.因为如果有不止一条路径从u到v,必然存在点x(x!u,x!v)…

Enterprise Spring示例和集成测试

我的博客中的空白更长&#xff0c;因为我正在忙着写《 Pivotal认证的Spring企业集成专家考试–学习指南》 。 这本书是沉重的例子。 幸运的是&#xff0c;Apress同意开源所有这些示例。 因此&#xff0c; 在此GitHub存储库中有大量可用的Spring示例 。 总共146个带有集成测试的…

github删除文件_github 仓库中删除历史大文件

问题如果git中提交了大文件&#xff0c;而且保存到了版本库中&#xff0c;那在下载或者克隆git包的时候&#xff0c;速度会非常慢。再加上github在国内访问本来就很慢&#xff0c;可能会导致包无法下载(克隆)。为了提升下载(克隆)速度&#xff0c;可以永久的删除这些文件(包括该…

linux plc编程软件,基于Linux平台的可编程控制器软PLC设计

实例下面以一个简单的对3并口通道循环控制为例&#xff0c;说明软PLC 的工作流程。(1)梯形图编程。从软PLC 主界面进入后&#xff0c;启动梯形图编程&#xff0c;调用梯形图编程的主程序。梯形图编程共需要调用梯形图界面模块、关闭模块、IO 模块&#xff0c;这些均在配置文件中…

django的ModelForm

一、ModelForm 二、Ajax 原生 jQuery 伪Ajax操作 三、文件上传&#xff08;预览&#xff09; - Form提交&#xff08;会刷新页面&#xff09; - Ajax上传文件&#xff08;推荐&#xff09; 四、图片验证码&#xff08;跟session配合&#xff09; 五、CKEditor,UEEditor,TinyEdi…

insert into语句_入门MySQL——DML语句篇

前言&#xff1a;在上篇文章中&#xff0c;主要为大家介绍的是DDL语句的用法&#xff0c;可能细心的同学已经发现了。本篇文章将主要聚焦于DML语句&#xff0c;为大家讲解表数据相关操作。这里说明下DDL与DML语句的分类&#xff0c;可能有的同学还不太清楚。DDL(Data Definitio…

HBase shell 命令。

HBase shell 命令。 进入hbase shell console$HBASE_HOME/bin/hbase shell如果有kerberos认证&#xff0c;需要事先使用相应的keytab进行一下认证&#xff08;使用kinit命令&#xff09;&#xff0c;认证成功之后再使用hbase shell进入可以使用whoami命令可查看当前用户 hbase(…

python常用库有哪些餐厅_Python常用库整理

前两天有个同学问我关于Tkinter库的问题&#xff0c;但是我连Tkinter库是干啥的都不清楚&#xff0c;有点尴尬。Python库博大精深&#xff0c;涉及各个领域&#xff0c;多了解一些著名的库总比不知道的好。GUI图形界面TkinterwxPythonPyGTKPyQtPySideWeb框架Djangoweb2pyflaskb…

减少Java垃圾收集开销的5条提示

保持较低的GC开销的一些最有用的技巧是什么&#xff1f; 随着Java 9的一次再次延迟发布&#xff0c;G1&#xff08;“ Garbage First”&#xff09;垃圾收集器将设置为HotSpot JVM的默认收集器。 从串行垃圾收集器一直到CMS收集器&#xff0c;JVM在其整个生命周期中都见证了许…

关于collectionview布局的坑

不知道写了多少次collectionview&#xff0c;步了很多坑&#xff0c;现在看来虽然达到了自己想要的结果&#xff0c;却不知道其中所以然。还是总结一下&#xff0c;免得再走弯路&#xff1b; 场景是这样的&#xff0c;我要定制一个显示选择图片的排列&#xff0c;想要实现横向排…

python可以用来编写计算机网络程序吗_计算机网络(基于python做的笔记 )

计算机网络(UDP 和 TCP)概述为了让在不同的电脑上运行的软件&#xff0c;之间能够互相传递数据&#xff0c;就需要借助网络的功能使用网络能够把多方链接在一起&#xff0c;然后可以进行数据传递所谓的网络编程就是&#xff0c;让在不同的电脑上的软件能够进行数据传递&#xf…

git冲突Please move or remove them before you can merge

解决Git冲突造成的Please move or remove them before you can merge git clean -d -fx ""其中x -----删除忽略文件已经对git来说不识别的文件d -----删除未被添加到git的路径中的文件f -----强制运行 转载于:https://www.cnblogs.com/wicub/p/6934597.html

linux不重启换root密码是什么原因,在Linux下修改和重置root密码的方法(超简单)

刚开始接触linux的人&#xff0c;忘记了root密码可能会不知所措。想找回自己的root密码&#xff0c;但是又不知道方法。其实&#xff0c;只需要简单的几步就可以重置自己的root密码了(找回密码我也不会)1.开机HcQBEm上敲击e&#xff0c;然后编辑选项2.在linux16这一行&#xff…

python命令行参数作用_Python命令行参数解析模块argparse

前言更多内容&#xff0c;请访问我的 个人博客。以前 optparse 比较火&#xff0c;但是在python2.7版本后&#xff0c;官方不再维护这个模块&#xff0c;转而大力支持 argparse 。argparse 模块可以让人轻松编写用户友好的命令行接口。她可以从 sys.argv 中解析出参数&#xff…

SCP-bzoj-1019

项目编号&#xff1a;bzoj-1019 项目等级&#xff1a;Safe 项目描述&#xff1a; 戳这里 特殊收容措施&#xff1a; 对于一个hanoi&#xff0c;知道了各种移动操作的优先级&#xff0c;也就确定了方案。可以证明对于盘子数为N的hanoi&#xff0c;任意移动方案都等价于将数目为N…

shell编程入门 linux解释器原理,Shell编程入门Linux解释器原理详细介绍 使用Shell进行工作的人们对.doc...

Shell编程入门Linux解释器原理详细介绍 使用Shell进行工作的人们对Shell编程入门&#xff1a;Linux解释器原理详细介绍使用Shell进行工作的人们对Unix/Linux下的Shell编程都很熟悉&#xff0c;在所有的Shell编程的书中都会提到#!/bin/bash,而这里到底包含了些什么&#xff1f;对…