1.jvm跟踪设置
打印GC信息
-verbose:gc
-XX:+PrintGC
-XX:+PrintGCDetails 打印详细GC信息
-XX:+PrintGCTimeStamp打印GC发生的时间戳
Xloggc:log/gc.log 记录gc日志
-XX:+PrintHeapAtGC打印GC前后堆使用情况
-XX:+TraceClassLoading 监控类加载
-XX:+PrintClassHistogram 按下Ctrl+Break后打印所有类的使用情况
2.堆的分配参数设置
-Xmx20m -Xms5m ,意思是最大堆内存和分配20m,初始化分配5m,这样设置jvm就会通过gc来保证最小分配堆一一直尽量在5m,可能降低系统的性能,我们可以根据根据实际情况来设置初始化堆,jvm的最大堆和当前系统已分配的最大堆是不一样的。
-Xmn
设置新生代大小
-XX:NewRatio
新生代(eden+2*s)和老年代(不包含永久区)的比值
4 表示 新生代:老年代=1:4,即年轻代占堆的1/5
-XX:SurvivorRatio
设置两个Survivor区和eden的比
8表示 两个Survivor :eden=2:8,即一个Survivor占年轻代的1/10
jvm参数设置的例子
-Xmx20m -Xms20m -Xmn1m -XX:+PrintGCDetails
public class HeapTest { public static void main(String[] args) { byte[] b=null; for(int i=0;i<10;i++) b=new byte[1*1024*1024]; } }
堆栈信息:
Heap
PSYoungGen total 512K, used 0K [0x00000000fff00000, 0x0000000100000000, 0x0000000100000000)
eden space 0K, -2147483648% used [0x00000000fff00000,0x00000000fff00000,0x00000000fff00000)
from space 512K, 0% used [0x00000000fff80000,0x00000000fff80000,0x0000000100000000)
to space 512K, 0% used [0x00000000fff00000,0x00000000fff00000,0x00000000fff80000)
ParOldGen total 19456K, used 10855K [0x00000000fec00000, 0x00000000fff00000, 0x00000000fff00000)
object space 19456K, 55% used [0x00000000fec00000,0x00000000ff699fe8,0x00000000fff00000)
PSPermGen total 21504K, used 2520K [0x00000000f9a00000, 0x00000000faf00000, 0x00000000fec00000)
object space 21504K, 11% used [0x00000000f9a00000,0x00000000f9c763c8,0x00000000faf00000)
可以看出新生代的from和to个分配空间512k都没释放,老年代使用了10m空间,至于为什么新生代总空间是512k这点我现在还在迷糊,求解释。。。
下面我们调整下jvm参数:-Xmx20m -Xms20m -Xmn5m -XX:+PrintGCDetails
堆栈信息:
[GC [PSYoungGen: 3832K->504K(4608K)] 3832K->1552K(19968K), 0.0012854 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[GC [PSYoungGen: 3665K->504K(4608K)] 4713K->2576K(19968K), 0.0032564 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[GC [PSYoungGen: 3607K->504K(4608K)] 5679K->3608K(19968K), 0.0082467 secs] [Times: user=0.05 sys=0.00, real=0.01 secs]
Heap
PSYoungGen total 4608K, used 1610K [0x00000000ffb00000, 0x0000000100000000, 0x0000000100000000)
eden space 4096K, 27% used [0x00000000ffb00000,0x00000000ffc14820,0x00000000fff00000)
from space 512K, 98% used [0x00000000fff00000,0x00000000fff7e010,0x00000000fff80000)
to space 512K, 0% used [0x00000000fff80000,0x00000000fff80000,0x0000000100000000)
ParOldGen total 15360K, used 3104K [0x00000000fec00000, 0x00000000ffb00000, 0x00000000ffb00000)
object space 15360K, 20% used [0x00000000fec00000,0x00000000fef08030,0x00000000ffb00000)
PSPermGen total 21504K, used 2520K [0x00000000f9a00000, 0x00000000faf00000, 0x00000000fec00000)
object space 21504K, 11% used [0x00000000f9a00000,0x00000000f9c763c8,0x00000000faf00000)
年轻代4608K,from区被使用了98%,老年代15360k使用了3104k使用了20%,方法区使用了11%
永久代参数设置
-XX:PermSize -XX:MaxPermSize
设置永久区的初始空间和最大空间
他们表示,一个系统可以容纳多少个类型
栈参数设置
-Xss
通常只有几百K
决定了函数调用的深度
每个线程都有独立的栈空间
局部变量、参数 分配在栈上
栈的大小与程序的调用深度相关的,并不是栈越大越好,如果太大每个线程分配的空间过大,一个系统能启动的线程就会变少
相关推荐
### JVM调优总结:Xms、Xmx、Xmn...总之,在进行JVM调优时,需要综合考虑应用程序的特点和服务器的硬件配置,合理设置-Xms、-Xmx、-Xmn和-Xss等参数,并根据实际运行情况灵活调整其他高级配置,以达到最佳的性能表现。
- 垃圾收集参数调整,例如设置新生代和老年代的比例,以优化不同应用的内存需求。 - 栈帧优化,如逃逸分析,帮助确定对象是否需要在堆上分配。 6. **JVM调优工具**: - JConsole和VisualVM提供可视化的监控和...
- 使用JVM的监控工具(如VisualVM、JConsole等)进行实时监控,以便调整参数和分析性能瓶颈。 通过深入理解JVM的结构、`finalize`机制以及GC的工作方式,开发者能够更好地优化Java应用程序的性能,预防和解决内存...
1. **JVM参数设置**:根据应用需求,设置合适的JVM启动参数,如堆大小(`-Xms`和`-Xmx`)、新生代与老年代的比例(`-XX:NewRatio`)、Eden区与Survivor区的比例(`-XX:SurvivorRatio`)、GC日志输出(`-XX:+...
第二课 JVM运行机制简介 堆、栈、方法区等 JVM启动流程 内存模型和volatile实例 解释和编译运行的概念 介绍JVM的内部结构、启动流程以及内存模型。并介绍JVM字节码的执行方式。 第三课 常用JVM参数 堆的分配参数 ...
理解JVM参数设置,可以帮助开发者在面临性能瓶颈时做出明智决策,优化应用程序的内存使用,预防和处理内存溢出问题。同时,这也是面试中常见的话题,掌握这部分知识将大大提高你的专业素养。 总的来说,“蚂蚁课堂-...
- 参数调整:学习如何通过JVM参数设置内存大小、GC策略、并发级别等,以优化应用性能。 4. **类加载器**: - 自定义类加载器:了解如何编写自己的类加载器,以实现特定的类加载逻辑。 - 双亲委派模型:理解类...
本系列课程从JVM基础到高级实战,老师手把手教你如何进行JVM...1.3JVM参数设置思路1.4JVM调优常用指令说明 第七节:JVM项目实战 1.1案例背景 1.2排查步骤 1.3.arthas 1.3.1.arthas简介 1.3.2.arthas实战 1.3总结
1. **开源项目启动脚本**:参考成熟的开源项目如ElasticSearch和Cassandra的启动脚本可以获取一些实用的JVM参数设置。例如,ElasticSearch和Cassandra在启动脚本中对JVM参数进行了细致的配置,这些都是经过大量实践...
在 Java 虚拟机(JVM)中,参数设置对系统性能的影响是至关重要的。通过设置合适的 JVM 参数,可以提高系统性能,减少垃圾回收的频率和时间,提高应用程序的执行效率。 第一点:设置堆栈大小 在 JVM 中,堆栈大小...
- **监控与调整JVM参数**:根据实际运行情况动态调整,如调整新生代和老年代的大小。 7. **JVM诊断工具**: - `jmap`:获取堆内存快照,分析内存分配。 - `jhat`:分析`jmap`导出的内存转储文件。 - `jstack`:...
本篇文件内容主要介绍了JVM优化的第三部分,重点围绕Tomcat参数调优、JVM参数调优、JVM字节码优化以及代码优化等几个方面。下面是针对这些知识点的详细解释: 1. Tomcat参数调优 在Tomcat参数调优部分,首先介绍了...
性能调优不仅需要了解JVM参数,还需要关注参数的具体含义和应用。例如,“-Xms”和“-Xmx”分别用于设置JVM的初始堆内存和最大堆内存,“-Xss”用于设置线程堆栈大小,“-Xmn”用于设置年轻代内存大小。而“-XX”...
本节介绍的JVM参数如下: | 参数 | 说明 | |----------------|----------------------------------------------------------| | `-version` | 打印JVM版本信息 | | `-showversion` | 打印版本信息并执行程序 | | `-...
二、JVM参数调优 JVM参数调优是提高程序性能的重要手段,主要包括以下几方面: 1. 内存设置:-Xms和-Xmx分别设定堆内存的初始大小和最大值,-XX:NewRatio控制新生代与老年代的比例,-XX:SurvivorRatio则定义新生代...
下面是一些常见的JVM参数: - `java`:用来启动一个Java程序。 - 两种格式: - `java [options] class [arguments]`:需要指定main方法所在的类名。 - `java [options] -jar file.jar [arguments]`:需要指定...
在Java虚拟机(JVM)的运行过程中,通过一系列的命令行参数,我们可以调整其性能和行为。以下是对JVM部分关键配置参数的详细解析,这些参数能够帮助我们优化应用程序的执行效率,管理内存,以及进行性能调优。 ####...
JAVA-OPTS参数设置 JAVA-OPTS 是一个变量,用于设置 JVM 相关运行参数。JVM 是 Java Virtual Machine 的缩写,表示 Java 虚拟机。JAVA-OPTS 变量的设置对 Java 应用程序的性能和稳定性具有重要影响。 在设置 JAVA-...
通过调整JVM参数(如-Xms, -Xmx, -XX:NewRatio等),可以优化内存分配、GC行为和线程设置,达到性能最佳。 6. **编译优化**:JVM有即时编译(JIT,Just-In-Time)机制,将热点代码编译为本地机器码,提高执行效率。...