首页 > 其他分享 >JVM参数

JVM参数

时间:2024-07-29 08:56:37浏览次数:13  
标签:JVM Survivor XX 线程 设置 参数 年轻

文章目录

概要

JVM参数

技术细节

大多数的Java应用不需要进行JVM优化
大多数导致GC问题的原因是代码层面的问题导致的
上线之前,应先考虑将机器的JVM参数设置到最优
减少创建对象的数量
减少使用全局变量和大对象
优先架构调优和代码调优,JVM优化是不得已的手段
分析GC情况优化代码比优化JVM参数更好

JVM参数
-XX:+ '+'表示启用该选项
-XX:- '-'表示关闭该选项

-Xmx4g:堆内存最大值为4GB。
-Xms4g:初始化堆内存大小为4GB。
-Xmn1200m:设置年轻代大小为1200MB。增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-Xss512k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1MB,以前每个线程堆栈大小为256K。
		  应根据应用线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。
		  但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
-XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5
-XX:SurvivorRatio=8:设置年轻代中Eden区与Survivor区的大小比值。设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10
-XX:PermSize=100m:初始化永久代大小为100MB。
-XX:MaxPermSize=256m:设置持久代大小为256MB。
-XX:MaxTenuringThreshold=15:设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。
-XX:+UseConcMarkSweepGC 使用并发标记清除垃圾收集器(CMS)来进行内存管理
使用CMS垃圾收集器具有以下优点:
可以在垃圾收集的同时,让应用程序继续运行,减少了停顿时间。
由于垃圾回收与应用程序运行并发操作,因此CMS对于响应时间敏感的应用程序比较适合。
可以有效地处理大型堆内存,并且在堆内存很大时,CMS的表现比串行GC和并行GC好。

java -jar -Xms2048m -Xmx2048m -Xmn32m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC longtoucar.jar

小结

在设置的时候,如果关注性能开销的话,应尽量把永久代的初始值与最大值设置为同一值,因为永久代的大小调整需要进行FullGC才能实现。

标签:JVM,Survivor,XX,线程,设置,参数,年轻
From: https://blog.csdn.net/qq_35091185/article/details/140715497

相关文章

  • 子进程中的超时参数在 chainlit 应用程序中不起作用
    我有一个脚本可以为在Windows中运行的GraphRAG应用程序构建ChainlitUI。GraphRAG查询在终端中运行良好,尽管需要大约120秒(附有屏幕截图)。但是,当我运行此Chainlit脚本时,subprocess.run中的timeout=300无法按预期工作。相反,我在大约60秒后收到“无法到达服务器”错......
  • jmeter 参数理解
    线程数线程数用于模拟并发用户数,每个线程代表一个虚拟用户;线程组内可以有1-多个接口请求,同属于一个线程,理解为单个用户的事务操作;如果只有一个接口那就说单接口的性能Ramp-Up时间(秒)定义了所有线程启动所需的时间,合理设置ramp-up时间可以避免瞬时加压,使性能测试结果更准确。......
  • 一篇文章教你如何读懂 JMeter聚合报告参数!
    在进行性能测试时,JMeter是一款备受推崇的开源工具。而其中的聚合报告(AggregateReport)是我们分析测试结果、了解系统性能的重要依据。今天,我们就来深入探讨如何读懂JMeter聚合报告中的各项参数。面对复杂的聚合报告,究竟哪些参数是我们必须关注的?这些参数背后又隐藏着怎样的重要信......
  • 数组作为函数参数进行传递
    1.整型数组        数组在传参时,传递的是数组的首元素地址,无法在函数中得知数组有多少个元素;因此在封装函数时在形参处不仅要传首元素地址,也要传元素个数。        又由于数组传递的是地址,因此数组可以通过形参修改实参的值;即传参中,可在被调函数中修改主调函......
  • 为什么不考虑更新的参数?
    我正在尝试解决逆弹道问题,其中必须在给定到达点(az,el)和初始弹射速度posTarget的情况下找到初始发射方向v0为此,我有几个类:此类编译后续计算中所需的一些物理常量importnumpyasnpimportscipyasspimportmatplotlib.pyplotaspltclas......
  • JVM垃圾回收器和优化
    JVM(JavaVirtualMachine)垃圾回收器(GarbageCollector,GC)是Java内存管理中的重要组成部分,负责自动回收不再被使用的内存空间,以防止内存泄露和内存溢出。同时,JVM的优化也是提高Java应用程序性能的重要手段。以下将详细介绍JVM垃圾回收器的种类以及JVM的优化方法。一、JVM垃圾......
  • Neo4j:如何将参数传递给关系?
    neo4j官网指出,我们不能向关系类型传递参数。但是,我在批量添加嵌入时需要向关系传递参数。Neo4j通过driver.execute_query('''UNWIND$moviesasmovieMATCH(m:Movie{title:movie.title,plot:movie.plot})CALLdb.create.setNodeVectorPrope......
  • lua可变参数
    遍历可变参数localfunctionTest1(...)localargCnt=select("#",...)fori=1,argCntdolocalitem=select(i,...)print(i,item)endendTest1(4,5,6) 遍历可变参数方式2localfunctionTest2(...)localargs={...}......
  • LimeTabular TypeError:__init__() 缺少 1 个必需的位置参数:'model'
    我已经开始学习Lime了。当我使用LimeTabular形式的Interpret时,我遇到一个问题,我按照标准完成了功能,但它不起作用。错误是TypeError:init()缺少1个必需的位置参数:'model'#%%ImportsfromutilsimportDataLoaderfromsklearn.ensembleimportRandomForestCla......
  • kafka 设置消费者多线程参数说明
    一、设置消费者多线程 参数privatestaticfinalintCONSUMER_THREAD_NUM=1;//订阅topicMap<String,Integer>topicCountMap=Collections.singletonMap(topic,CONSUMER_THREAD_NUM);Map<String,List<KafkaStream<byte[],byte[]>>>messageStr......