当前位置:首页 > Java技术 > java jvm调优在哪里设置

java jvm调优在哪里设置

2022年11月08日 15:13:03Java技术10

一. GC优化

1.1 GC优化是必要的吗

现在来想一想GC优化的最根本原因,垃圾收集器的工作就是清除Java创建的对象,垃圾收集器需要清理的对象数量以及要执行的GC数量均取决于已创建的对象数量。因此,为了使你的系统在GC上表现良好,首先需要减少创建对象的数量。

俗话说“冰冻三尺非一日之寒”,我们在编码时要首先要把下面这些小细节做好,否则一些琐碎的不良代码累积起来将让GC的工作变得繁重而难于管理,比如使用StringBuilder或StringBuffer来代替String;尽量少输出日志。

尽管如此,仍然会有我们束手无策的情况。XML和JSON解析过程往往占用了最多的内存,即使我们已经尽可能地少用String、少输出日志,仍然会有大量的临时内存(大约10-100MB)被用来解析XML或JSON文件,但我们又很难弃用XML和JSON。在此,你只需要知道这一过程会占据大量内存即可。

1.2 GC优化的两个目的

减少进入老年代的对象

除了可以在JDK 7及更高版本中使用的G1收集器以外,其他分代GC都是由Oracle JVM提供的。关于分代GC,就是对象在Eden区被创建,随后被转移到Survivor区,在此之后剩余的对象会被转入老年代。也有一些对象由于占用内存过大,在Eden区被创建后会直接被传入老年代。老年代GC相对来说会比新生代GC更耗时,因此,减少进入老年代的对象数量可以显著降低Full GC的频率。

降低Full GC的时间

Full GC的执行时间比Minor GC要长很多,因此,如果在Full GC上花费过多的时间,将可能出现超时错误。

1、如果通过减小老年代内存来减少Full GC时间,可能会引起OutOfMemoryError或者导致Full GC频率升高。

2、如果通过增加老年代内存来降低Full GC的频率,Full GC的时间可能因此增加

3、因此需要把老年代的大小设置成一个“合适”的值。

1.3 GC性能指标

一般来说,GC达到这些性能就可以:

Minor GC执行非常迅速(50ms以内),没有频繁执行(大约10s执行一次)

Full GC执行非常迅速(1s以内),没有频繁执行(大约10min执行一次)

二. 堆启动参数设置

-Xms64m:初始堆大小

-Xmx128m:最大堆大小

-Xss4m:设置每个线程的堆栈大小

-XX:PermSize、-XX:MaxPermSize:分别设置永久代最小大小与最大大小(Java8以前)

-XX:MetaspaceSize -XX:MaxMetaspaceSize:分别设置元空间最小大小与最大大小(Java8以后)

-XX:NewRatio=2:设置新生代与年老代的比值(除去持久代),2则新生代与年老代所占比值为1:2

-XX:SurvivorRatio=8 :设置新生代中Eden区与Survivor区的大小比值。设置为8代表8:1:1

-XX:MaxTenuringThreshold=0 :设置垃圾最大年龄。如果设置为0,则年轻代对象不经过Survivor区直接进入年老代

三. 设置垃圾收集器

-XX:+UseSerialGC:设置新生代串行收集器

-XX:+UseParNewGC:设置新生代并行收集器

-XX:+UseParallelGC:设置新生代并行收集器

-XX:+UseParallelOldGC :配置年老代垃圾收集方式为并行收集

-XX:+UseConcMarkSweepGC:设置年老代并发CMS收集器

四. 设置垃圾收集器参数

-XX:ParallelGCThreads=20 :配置并行收集器的线程数,此值最好配置与处理器数目相等

-XX:+UseAdaptiveSizePolicy :设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低响应时间或者收集频率等,此值建议使用并行收集器时,一直打开。

-XX:MaxGCPauseMillis=100 : 设置每次年轻代垃圾回收的最长时间,如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值。

-XX:+UseCMSCompactAtFullCollection :打开对年老代的压缩。可能会影响性能,但是可以消除碎片

-XX:CMSFullGCsBeforeCompaction=5 :由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。此值设置运行多少次GC以后对内存空间进行压缩、整理。
————————————————
版权声明:本文为CSDN博主「YozenTung」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_35028513/article/details/114222903

作者:C18298182575
来源链接:https://blog.csdn.net/C18298182575/article/details/122342435

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/java/68505.html

标签: JVM调优Java
分享给朋友:

“java jvm调优在哪里设置” 的相关文章

Java打印车票主要学习Java的比较语句

直接上代码 public static void main(String[] args) { // TODO Auto-generated method stub //初始化 Scanner in=new Scanner(S...

OpenWrite技术自媒体界的JVM一次编辑、随处发布

OpenWrite技术自媒体界的JVM一次编辑、随处发布

原文 :https://mp.weixin.qq.com/s/KUtJ2dwhBRuJ2G_-PkQFEA 最懂你的科技自媒体管理平台 【实用小工具推荐】给科技或技术同学们推荐一款比较好用的工具,可以实现一稿多发,主流的技术渠道基本涵...

Java并发之AQS详解

Java并发之AQS详解

java、多线程、并发、AbstractQueuedSynchronized、AQS、Lock、Mutex、ReentrantLock、Semaphore、CountDownLatch、线程同步 一、概述   谈到并发,不得不谈ReentrantLock;而谈到...

java synchronized详解

记下来,很重要。 Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。      一、当两个并发线程访问同一个对象object中的这个synchronized(this)同...

JAVA面试精选【Java基础第一部分】

  这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱。只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了。对于那些正打算找工作JAVA软件开发工作的童鞋们来说,当你看到这份题目的时候,你应该感动很幸运,因为,只要你把题目中...

Java的内存回收机制

Java的内存回收机制

 在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存回收,这两方面工作都是由JVM自动完成的,降低了Java程序员的学习难度,避免了像C/C++直接操作内存的危险。但是,也正因为内存管理完全由JVM负责,所以也使Java很多程序员不再关心内存分配,导致很多程...

Java 干货之深入理解Java泛型

Java 干货之深入理解Java泛型

一般的类和方法,只能使用具体的类型,要么是基本类型,要么是自定义的类。如果要编写可以应用多中类型的代码,这种刻板的限制对代码得束缚会就会很大。 ---《Thinking in Java》 泛型大家都接触的不少,但是由于Java 历史的原因,Java 中的泛型一直...

趣味编程故事|java进程占用cpu过高怎么办,别急我来帮你

趣味编程故事|java进程占用cpu过高怎么办,别急我来帮你

关注公众号“AI码师”领取2021最新面试资料一份 【主演】 运维小哥:小李 测试小姐姐:小红 开发人员:本色出演 【剧情】 在一个阳光明媚的清晨,原本还在睡梦中的我,被小李(运维小哥)的电话给惊醒了...

初探设计:Java接口和抽象类何时用?怎么用?

初探设计:Java接口和抽象类何时用?怎么用?

今天犯了个错: “接口变动,伤筋动骨,除非你确定只有你一个人在用”。哪怕只是throw了一个新的Exception。哈哈,这是我犯的错误。 一、接口和抽象类 类,即一个对象。 先抽象类,就是抽象出类的基础部分,即抽象基类(抽象类)。官...

JAVA基础知识之IO——Java IO体系及常用类

JAVA基础知识之IO——Java IO体系及常用类

Java IO体系 个人觉得可以用“字节流操作类和字符流操作类组成了Java IO体系”来高度概括Java IO体系。 借用几张网络图片来说明(图片来自 http://blog.csdn.net/zhangerqing/article/details/846653...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。