当前位置:首页 > 虚拟机 > 正文

jvm虚拟机参数配置(虚拟机jvm技巧)

jvm优化.有哪些jvm参数?用过哪些jvm调优工具

JVM是最好的软件项目之一。它为Java提供了坚实的基础。许多流行语言,如Kotlin、Scala、Clojure和Groovy都使用JVM作为其操作基础。一个专业的Java工程师必须了解并掌握JVM。接下来给大家分享一下Java基础知识中JVM优化相关的知识点。

学习杭州Java核心知识的JVM优化讲解

常见的JVM优化参数包括:

-Xmx:指定为Java程序的最大堆内存,使用java-Xmx5000M版本来确定当前系统可以分配的最大堆内存;

-Xms:指定最小堆内存,通常设置为相同值作为最大堆内存以减少GC;

-Xmn:设置年轻代的大小。整个堆大小=年轻代大小+老年代大小。因此,年轻代的增加会减少老一代的规模。该值对系统性能影响较大。Sun官方建议配置为整个堆的3/8;

-Xss:指定线程的最大堆栈空间。该参数决定了Java函数调用的深度。值越大,调用深度越深,如果值太小,很容易导致堆栈溢出错误(StackOverflowError);

-XX:PermSize:指定方法的初始值区域(永久区域),默认为物理内存64的1/,从Java8永久区域中移除并替换为元数据区域,由-XX:MetaspaceSize指定;

-XX:MaxPermSize:指定最大值方法区的大小,默认值为物理内存的1/4、Java8中,-XX:MaxMetaspaceSize指定元数据区的大小;

-XX:NewRatio=n:旧的关系一代和年轻代,-XX:NewRatio=2,表示老一代。生代与年轻代的比例为2:1;

-XX:SurvivorRatio=n:Eden区与Survivor区大小的比例,-XX:SurvivorRatio=8表示Eden区和Survivor区的大小比例是8:1:1,因为Survivor区有两个(from,to)。

JVM本质上分为三个主要部分,年轻代(YoungGen)、老年代(OldMemory)和持久代(Perm,在Java8中被删除)。

选择年轻代的大小

响应时间优先的应用:尽可能设置大,直到接近系统响应时间的最小限制(根据实际情况选择)实际情况)。同样在这种情况下,年轻一代的收获频率也很低。与此同时,到达老一代的物品也减少了。

吞吐量优先的应用:设置尽可能大,可能达到Gbit。由于不需要响应时间,垃圾收集可以并行执行,一般适合具有8个或更多CPU的应用程序。

老年代的大小选择

响应时间优先的应用:老年代使用并发收集器,因此其大小必须谨慎设置,一般考虑并发会话和会话的速度期间。等待一些参数。如果堆设置较小,使用传统的标记-清除方法可能会导致内存碎片、回收率过高、应用程序挂起;如果堆很大,收集的时间就会更长。最优解一般需要参考以下数据得出:并发垃圾收集信息、持久代并发收集数量、传统GC信息、年轻代和老年代回收时间比例一代。

减少年轻一代和老一代所花费的时间通常会提高应用程序的效率。

吞吐量优先的应用程序:通常,吞吐量优先的应用程序具有较大的年轻代和较小的老年代。原因是这样可以尽可能回收大部分短期物品并减少中期物品,而老一代只存储长期存活的物品。

堆较小导致的碎片问题

由于老一代并发收集器使用标记和清除算法,因此堆不会被压缩。当活页夹获取时,它将合并相邻的空间,以便将它们分配给更大的对象。但当堆空间较小时,一定时间后就会出现“碎片”。如果并发收集器找不到足够的空间,并发收集器将停止并使用传统的标记和删除方法进行回收。如果您遇到“碎片”,您可能需要配置以下内容:

-XX:+UseCMSCompactAtFullCollection:使用并发收集器时,启用老年代压缩。

-XX:CMSFullGCsBeforeCompaction=0:当启用上述配置时,这里是压缩老年代之前设置的FullGC数量。