JVM常见几种参数

最大堆内存与最大非堆内存的和绝对不能够超出操作系统的可用内存。
1、-Xms :表示java虚拟机堆区内存初始内存分配的大小,通常为操作系统可用内存的1/64大小即可,但仍需按照实际情况进行分配。
2、-Xmx: 表示java虚拟机堆区内存可被分配的最大上限,通常为操作系统可用内存的1/4大小。但是开发过程中,通常会将 -Xms 与 -Xmx两个参数的配置相同的值,其目的是为了能够在java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小,从而提高性能。

jdk1.8以前

一般来讲对于堆区的内存分配只需要对上述两个参数进行合理配置即可,但是如果想要进行更加精细的分配还可以对堆区内存进一步的细化,那就要用到下面的三个参数了-XX:newSize、-XX:MaxnewSize、-Xmn。当然这源于对堆区的进一步细化分:新生代、中生代、老生代。java中每新new一个对象所占用的内存空间就是新生代的空间,当java垃圾回收机制对堆区进行资源回收后,那些新生代中没有被回收的资源将被转移到中生代,中生代的被转移到老生代。而接下来要讲述的三个参数是用来控制新生代内存大小的。
1、-XX:newSize:表示新生代初始内存的大小,应该小于 -Xms的值;
2、-XX:MaxnewSize:表示新生代可被分配的内存的最大上限;当然这个值应该小于 -Xmx的值;
3、-Xmn:至于这个参数则是对 -XX:newSize、-XX:MaxnewSize两个参数的同时配置,也就是说如果通过-Xmn来配置新生代的内存大小,那么-XX:newSize = -XX:MaxnewSize = -Xmn,虽然会很方便,但需要注意的是这个参数是在JDK1.4版本以后才使用的。
上面所述即为java虚拟机对外提供的可配置堆区的参数,接下来讲述java虚拟机对非堆区内存配置的两个参数:
1、-XX:PermSize:表示非堆区初始内存分配大小,其缩写为permanent size(持久化内存)
2、-XX:MaxPermSize:表示对非堆区分配的内存的最大上限。

jdk1.8

在移除了Perm区域之后,JDK 8中使用MetaSpace来替代,这些空间都直接在堆上来进行分配。 在JDK8中,类的元数据存放在native堆中,这个空间被叫做:元数据区。JDK8中给元数据区添加了一些新的参数。
-XX:MetaspaceSize= 是分配给类元数据区(以字节计)的初始大小(初始高水位),超过会导致垃圾收集器卸载类。这个数量是一个估计值。当第一次到达高水位的时候,下一个高水位是由垃圾收集器来管理的。
-XX:MaxMetaspaceSize= 是分配给类元数据区的最大值(以字节计)。这个参数可以用来限制分配给类元数据区的大小。这个值也是个估计值。默认无上限。
-XX:MinMetaspaceFreeRatio=,是一次GC以后,为了避免增加元数据区(高水位)的大小,空闲的类元数据区的容量的最小比例,不够就会导致垃圾回收。
-XX:MaxMetaspaceFreeRatio=,是一次GC以后,为了避免减少元数据区(高水位)的大小,空闲的类元数据区的容量的最大比例,超过就会导致垃圾回收。


JVMJava Virtual Machine)调优是为了优化Java应用程序的性能和资源利用率。常见JVM调优方式有以下几种: 1. **内存管理**: - **设置初始堆大小(-Xms)和最大堆大小(-Xmx)**: 根据应用需求合理配置,避免频繁的垃圾回收。 - **使用新生代和老年代的分代策略**: 如Eden、Survivor和Old Generation之间的大小调整,以及新生代的晋升策略。 - **调整堆的分代比例**: 控制年轻代与老年代的比例,以平衡GC频率和吞吐量。 2. **垃圾收集器的选择和调优**: - 选择适合的应用场景:如Serial、Parallel、CMS(Concurrent Mark Sweep)、G1(Garbage-First)等。 - 了解不同GC算法的特性,如CMS的低停顿时间和G1的分区垃圾回收。 - 使用参数如`-XX:+UseParallelGC`或`-XX:+UseG1GC`来指定GC器。 3. **线程池优化**: - 设置合理的线程数:过多或过少都可能导致性能下降。 - 调整`-XX:ParallelThreadCount`和`-XX:ThreadStackSize`。 - 使用`Fork/JoinPool`或`CompletableFuture`等并发工具。 4. **CPU缓存优化**: - 避免大对象直接进入堆,尽量使对象小于CPU缓存大小。 - 使用`-XX:+UseCompressedOops`减少对象引用的开销。 5. **JVM选项调整**: - `-XX:+UseStringDeduplication`启用字符串共享。 - `-XX:+UnlockDiagnosticVMOptions`打开诊断日志,用于调试性能问题。 - `-XX:+HeapDumpOnOutOfMemoryError`在发生内存溢出时自动生成堆转储文件。 6. **监控和诊断**: - 使用JMX(Java Management Extensions)或JConsole等工具监控JVM的性能指标。 - 使用VisualVM或JProfiler进行详细的性能分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值