gc频繁的暂停启动_减少主要GC暂停的频率

gc频繁的暂停启动

尺寸标签
这篇文章将讨论一种减少垃圾收集暂停的技术,它会延迟应用程序的延迟。 正如我几年前所写, 在JVM中无法禁用垃圾收集 。 但是,有一个巧妙的技巧可以用来大大减少长时间停顿的时间和频率。

如您所知,JVM内部发生了两个不同的GC事件,称为次要和主要集合。 关于这些收集期间发生的事情,有很多可用的材料,因此,我将不着重于详细描述其机制。 我只想提醒一下,在Hotspot JVM中-在次要收集期间,将收集eden和幸存者空间,在主要收集中,使用权空间也将被清理和(可能)压缩。

如果打开GC日志记录(例如, -XX:+ PrintGCDetails ),则会立即注意到主要集合是您应关注的集合。 一次大型垃圾收集的时间通常比一个清洁的年轻空间大几倍。 在大型GC中,有两个方面需要更多时间才能完成。 首先,年轻空间中的幸存者被复制到老地方。 接下来,除了清除旧版本中未使用的引用外,大多数GC算法还压缩了旧空间,再次需要消耗宝贵的CPU周期。

在旧空间中放置许多对象也增加了从旧空间到年轻空间的引用更多的可能性。 当检查这些表以确定年轻空间中的对象是否适合使用GC时,这会导致更大的卡片表 ,跟踪引用并增加次要GC暂停的时间。

因此,如果我们不能关闭垃圾收集,是否可以确保这些冗长的大型GC的运行频率降低,并且从使用权空间到Young的引用计数保持较低水平?

答案是肯定的。 甚至有一些疯狂的配置已经完全摆脱了主要的GC。 摆脱主要的GC事件确实是一项复杂的工作,但是减少这些长时间停顿的频率是每个部署都可以实现的目标。

我们正在考虑的策略是限制可使用的对象的数量。 例如,在典型的Web应用程序中,创建的大多数对象仅在HttpRequest期间有用。 存在并且将永远具有更长的寿命的共享状态,但是关键在于以下事实:短暂生存的对象与长期生存的共享状态的比率非常高。

现在进行任何部署的棘手部分是了解为短期对象提供多少肘部空间,以便

  • 您可以保证短期对象不会被提升为终身空间
  • 您不会过度配置,从而增加了基础架构的成本

从概念上讲,做到这一点很容易。 您只需要测量在请求期间为短期对象分配的内存量,并将其与峰值加载时间相乘即可。 您将要得到的结果是您想要在eden或单个幸存者空间中容纳的内存量。 这将使GC真正有效地运行,而不会意外升级为终身保有权。 从概念层面进行放大会发现一些复杂的技术问题,我将在以后的文章中介绍这些问题。

那么从这里可以得出什么结论呢? 首先-为您的应用程序确定理想的GC配置是一项复杂的工作。 这既是坏消息,也是好消息。 不好的是–它需要您进行大量的实验。 考虑到这一点,我们很乐意解决棘手的问题,目前正在制定实验以进一步研究该领域。 有朝一日,在不久的将来, Plumbr能够为您完成此任务,从而使您免于无聊的管道工作,并使您专注于当前的实际问题。

翻译自: https://www.javacodegeeks.com/2014/10/reducing-the-frequency-of-major-gc-pauses.html

gc频繁的暂停启动

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

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

相关文章

部署war文件到服务器,war包怎么部署到云服务器

war包怎么部署到云服务器 内容精选换一换部署提供可视化、一键式部署服务,支持并行部署和流水线无缝集成,实现部署环境标准化和部署过程自动化。本节通过以下四步介绍如何使用部署服务将归档在软件发布库的软件包部署到云主机上。第一步:准备…

惠普bios硬重置_惠普笔记本电脑按什么样键进入BIOS设置?惠普笔记本BIOS密码忘了咋重置...

F① F② DEL都不行。r是不是的啊?量情拆好:如果您确认无法进入BIOS://stg.www⑧.hp,这个情况很可能是硬件有故障造成的,建议您可以通过以下网址查询距离最近的惠普金牌服务中心.com/cn/zh/support-drivers/esupport/ascpps&…

Java 8中的StringJoiner与String.join的示例

将多个String文字或对象合并为一个是常见的编程要求,并且经常会发现需要为应用程序将String列表或String集合转换为CSV String的情况。 长期以来,JDK API无法将多个String文字或对象连接在一起,这迫使程序员编写诸如遍历所有String对象并使用…

小米4系统定位服务器地址,小米4原装浏览器怎么开启定位系统

手机系统最好是开发版,稳定版必须先root,可以自己root(另找教程),也可以刷成开发版。我的手机系统是MIUI4.10.31(开发版),可以在“系统更新”查看,具有root功能。小米4如何开启虚拟键盘方法安装RE管理器和Root Explore…

中如何将方形图片转换成圆形图片_【PS】PS中不可不知的实用技巧!你都掌握了吗?...

今天给大家分享一些在PS中经常用到的实用小技巧,操作简单易上手。01 拉伸图片人物不变形在我们在PS里想要拉伸一些图片时,里面的人物往往会跟着一起变形,那么如何改变图片比例的同时,又不影响人物的形态呢?打开我们需要…

jooq 执行sql_使用jOOQ和Java 8的CompletableFuture进行异步SQL执行

jooq 执行sql响应式编程是一个新的流行词,它实际上仅表示异步编程或消息传递。 事实是,函数语法极大地帮助构建了异步执行链,今天,我们将看到如何使用jOOQ和新的CompletableFuture API在Java 8中做到这一点。 实际上&#xff0c…

python系统状态_python实现系统状态监测和故障转移实例方法

代码如下:#coding: utf-8import socketimport selectimport timeimport osimport threadingdef ser():s socket.socket(socket.AF_INET,socket.SOCK_DGRAM)s.bind(("",43244))while 1:infds,outfds,errfds select.select([s],[],[],5)if infds:sms s.recv(1024)if…

ubuntu系统安装socket服务器,Ubuntu上进行socket编程,并且实现通信功能

#include #include #include#include#include #include#include #include #include #include#include #include#include #include #define PERM S_IRUSR|S_IWUSR#define MYPORT 5500 //宏定义,定义通信端口#define BACKLOG 10//宏定义,定义服务程序可以连…

使用JUnit对ADF应用程序进行单元测试

JUnit是Java语言的单元测试软件包,由于ADF构建在J2EE框架之上,因此可以用来测试Oracle ADF应用程序。 单元测试基本上是根据某些定义的测试标准来验证最小的可测试模块的过程。 在这里,我将说明如何在JDeveloper 12.2.1.3中设置和使用JUnit来…

libgo高性能网络服务器,【开源】gnet: 一个轻量级且高性能的 Golang 网络库

![](https://ask.qcloudimg.com/http-save/1303222/sipe2g9n9h.png)# Github 主页[https://github.com/panjf2000/gnet](https://github.com/panjf2000/gnet)欢迎大家围观~~,目前还在持续更新,感兴趣的话可以 star 一下暗中观察哦。# 原文博客[gnet: 一个…

拆分js文件_2021入门Webpack,看这篇就够了:Webpack.config.js 解析

这是优妈成长记的第63篇原创这是一个webpack配置说明本文是发布在github上webpack-demo的README文件内容。主要对webpack.config.js每一条的注释说明。github项目地址:https://github.com/hourong88/webpack-demo可以点击文章最下方【阅读原文】跳转github链接查看&…

orcad自上而下_开发自上而下的Web服务项目

orcad自上而下这是从Alessio Soldano编辑的Advanced JAX-WS Web Services手册中摘录的示例章节。 第一章介绍了自底向上创建Web服务端点的方法。 它允许非常快地将现有bean作为Web Service端点公开:在大多数情况下,将类转换为端点只需在代码中添加少量注…

安装win7系统不能开机启动服务器,win7系统开机启动项不能加载的原因分析及解决...

开机启动项是每台电脑都有的东西,就是多和少的问题的,很多人开机的时候喜欢加载很多的启动项,其实这也没什么不好的。现在的电脑为了受到更好的保护,往往在开机的时候就加载了一些启动项,如:杀毒软件&#…

七大罪过与如何避免

在整个本文中,我将在代码片段中使用Java,同时还将使用JUnit和Mockito 。 本文旨在提供示例测试代码,这些示例可以是: 难以阅读 难以维护 在这些示例之后,本文将尝试提供替代方法,这些替代方法可用于增强…

4 指针运算_C++用指针访问数组元素(学习笔记:第6章 08)

用指针访问数组元素[1]数组是一组连续存储的同类型数据,可以通过指针的算术运算,使指针依次指向数组的各个元素,进而可以遍历数组。定义指向数组元素的指针定义与赋值例:int a[10], *pa; pa&a[0]; 或 paa;等效的形式经过上述定…

asyncexec_如何安全使用SWT的显示器asyncExec

asyncexec大多数用户界面(UI)工具箱都是单线程的, SWT也不例外。 这意味着必须仅从单个线程(即所谓的UI线程)访问UI对象。 另一方面,应在后台线程中执行长时间运行的任务,以使UI保持响应。 这使…

属性面板 脚本_3.1 创建和使用脚本

在unity中,游戏物体的行为是通过组件来驱动的,我们可以通过内建的组件来给我们的游戏物体组合各种能力,尽管如此,要知道我们的需求永远是动态的,很快我们就会发现,内建的组件功能已经无法满足我们的需求&am…

新的JMetro JavaFX 11兼容版本

你好,我们又见面了! 这次是一个新版本,该版本与JavaFX 11兼容。 继续阅读以获取详细信息。 JMetro 8.5.7和11.5.7版本 JMetro代码已分为2个分支。 master分支具有Java 8兼容的JMetro版本,“ 11”分支具有Java 11兼容的版本。 以…

vue加跨域代理静态文件404_解决vue本地环境跨域请求正常,版本打包后跨域代理不起作用,请求不到数据的方法——针对vue2.0...

问题:在本地使用了proxyTable代理可以正常跨域请求后台数据,打包上传后就无法获得后台的json文件。查看了相关资料可以用nginx进行解决。还可以使用命名环境变量,请求的时候进行判断,话不多说上干货module.exports merge(prodEnv…

tomee_使用Vysper,TomEE和PrimeFaces将XMPP服务器嵌入JSF Web应用程序内部

tomee我有一个需要在完成某些工作时通知用户的应用程序。 它使用JSF和Primefaces,因此可以使用大气 (也称为Push)来实现这种通知。 但是另一个有趣的方法是使用嵌入在Java Web应用程序中的XMPP服务器。 好的,好的,您不…