首页 > 其他分享 >深入理解 JVM ------ 调优案例分析与实战

深入理解 JVM ------ 调优案例分析与实战

时间:2023-04-15 21:33:25浏览次数:39  
标签:Full Java 对象 停顿 调优 GC 内存 JVM ------

1、大内存硬件上的程序部署策略

网站失去响应是由垃圾收集停顿所导致的,在该系统软硬件条件下, HotSpot虚拟机是以服务端模式运行,默认使用的是吞吐量优先收集器,回收12GB的Java堆,一次Full GC的停顿时间就高达14秒(太大会导致回收停顿时间过长。再加上直接进入老年代,Full GC 次数多

由于程序设计的原因,访问文档时会把文档从磁盘提取到内存中,导致内存中出现很多由 文档序列化产生的大对象,这些大对象大多在分配时就直接进入了老年代,没有在 Minor GC中被清理掉。这种情况下即使有12GB的堆,内存也很快会被消耗殆尽。

将硬件升级到64位系统、16GB内存希望能提升程序效能,却反而出现了停顿问题,尝试 过将Java堆分配的内存 重新缩小到1.5GB或者2GB,这样的确可以 避免长时间停顿,但是在硬件上的投 资就显得非常浪费。

对于用户交互性强、对停顿时间敏感、内存又较大的 系统,并不是一定要使用Shenandoah、ZGC这些明确以控制延迟为目标的垃圾收集器才能解决问题 (当然不可否认,如果情况允许的话,这是最值得考虑的方案),使用Parallel Scavenge/Old收集器,并 且给Java虚拟机分配较大的堆内存也是有很多运行得很成功的案例的,但前提是必须把应用的Full GC 频率控制得足够低。

控制Full GC频率的关键是老年代的相对稳定,这主要取决于应用中绝大多数对象能否符合“朝生夕灭”的原则,即大多数对象的生存时间不应当太长,尤其是不能有成批量的、长生存时间的大对象产生,这样才能保障老年代空间的稳定。

许多网站和B/S形式的应用里,多数对象的生存周期都应该是请求级或者页面级的,会话级和全局级的长生命对象相对较少。只要代码写得合理,实现在超大堆中正常使用没有Full GC应当并不困难,这样的话,使用超大堆内存时,应用响应速度才可能会有所保证。

除此之外,如果读者计划使用 单个Java虚拟机实例来管理大内存,还需要考虑下面可能面临的问题:

标签:Full,Java,对象,停顿,调优,GC,内存,JVM,------
From: https://www.cnblogs.com/suBlog/p/17321938.html

相关文章

  • 基于 RocketMQ Connect 构建数据流转处理平台
    作者:周波,阿里云智能高级开发工程师,ApacheRocketMQCommitter01从问题中来的RocketMQ Connect在电商系统、金融系统及物流系统,我们经常可以看到RocketMQ的身影。原因不难理解,随着数字化转型范围的扩大及进程的加快,业务系统的数据也在每日暴增,此时为了保证系统的稳定运行,就需......
  • spring boot bean注册 多实例
    @Configuration3.1.@Configuration作用@Configuration底层是含有@Component,所以@Configuration具有和@Component的作用。@Configuration用于定义配置类,可理解为Spring的xml配置文件里面的<beans>标签。@Configration标注的类不能是final类型@Configration标注类中可以声明一......
  • 三丰云免费云服务
    总结一下使用三丰云免费云服务的体验:1.服务器的访问速度还是不错的,网站没有什么故障出现2.有一个免BeiAn服务很方便,不需要买国外的主机也能直接访问3.客服的处理速度和处理的态度很好,处理速度很快4.可以一直免费使用......
  • Java | 一分钟掌握JDK命令行工具 | 3 - 实战
     作者:Mars酱 声明:本文章由Mars酱编写,部分内容来源于网络,如有疑问请联系本人。 转载:欢迎转载,转载前先请联系我!前言前一篇Java|一分钟掌握JDK命令行工具|2-分类-掘金(juejin.cn)罗列了一些JDK命令行工具,我们没有必要把所有命令行工具全部介绍,那样对于开发者来说不实用也......
  • 面试官:你有什么想问我的?我:什么都问吗?
    本文首发自公粽hao「林行学长」,欢迎来撩,免费领取20个求职工具资源包。了解校招、分享校招知识的学长来了!想必经历过面试的同学都会被面试官问一个问题:“你还有什么想问我的吗?”很多同学第一次被问到这个问题的时候,常常会陷入短暂的沉默。脑海里是哲学三问:我是谁……我在哪......我......
  • Default Arguments总结
    默认实参默认实参在C++编程实践中非常常见,但其中也有一些有趣的知识点与扩展,本文对默认实参做简单总结;函数默认实参默认实参用来取代函数调用中缺失的尾部实参:voidProcess(intx=3,inty=4){}拥有默认实参的形参之后的形参必须在同一作用域内有声明提供了默认参数,否则编译......
  • Meetup 直播预告|助力企业数字化转型,8 大微服务&容器开源实践亮点抢先看
    随着数字化、智能化发展趋势不断加快,大中小型企业纷纷将企业“上云”提上日程,推动企业数字化转型。云时代下,企业需要新技术架构,使之更好地利用云计算优势,让业务更敏捷、成本更低、可伸缩性更强,云原生正逐步成为企业数字化转型的“最短路径”。2023年4月15日,由阿里云云原生应用......
  • java字节码编程技术(8/10) -Javassist
    Javassist这个库和asm经常使用,它的性能稍差一点<dependency><groupId>org.javassist</groupId><artifactId>javassist</artifactId><version>3.27.0-GA</version></dependency>获取一个类加载器(ClassLoader),以加载指定的.jar或.class文件privateClassLoade......
  • 【vim学习第一天记录】
    vim快捷操作复合命令等效的长命令Cc$sclS^CI^iA$aoA<CR>Oko......
  • Meetup 直播预告|助力企业数字化转型,8 大微服务&容器开源实践亮点抢先看
    随着数字化、智能化发展趋势不断加快,大中小型企业纷纷将企业“上云”提上日程,推动企业数字化转型。云时代下,企业需要新技术架构,使之更好地利用云计算优势,让业务更敏捷、成本更低、可伸缩性更强,云原生正逐步成为企业数字化转型的“最短路径”。2023年4月15日,由阿里云云原生应......