`

jvm第二节-jvm参数设置和跟踪

 
阅读更多

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 -Xss

    ### JVM调优总结:Xms、Xmx、Xmn...总之,在进行JVM调优时,需要综合考虑应用程序的特点和服务器的硬件配置,合理设置-Xms、-Xmx、-Xmn和-Xss等参数,并根据实际运行情况灵活调整其他高级配置,以达到最佳的性能表现。

    JVM图解-JVM指令-JVM原型图.rar

    - 垃圾收集参数调整,例如设置新生代和老年代的比例,以优化不同应用的内存需求。 - 栈帧优化,如逃逸分析,帮助确定对象是否需要在堆上分配。 6. **JVM调优工具**: - JConsole和VisualVM提供可视化的监控和...

    【IT十八掌徐培成】Java基础第26天-03.JVM结构-finalize-gc.zip

    - 使用JVM的监控工具(如VisualVM、JConsole等)进行实时监控,以便调整参数和分析性能瓶颈。 通过深入理解JVM的结构、`finalize`机制以及GC的工作方式,开发者能够更好地优化Java应用程序的性能,预防和解决内存...

    用于测试jvm gc调优-share-jvm-gc.zip

    1. **JVM参数设置**:根据应用需求,设置合适的JVM启动参数,如堆大小(`-Xms`和`-Xmx`)、新生代与老年代的比例(`-XX:NewRatio`)、Eden区与Survivor区的比例(`-XX:SurvivorRatio`)、GC日志输出(`-XX:+...

    深入JVM内核 - 原理、诊断与优化

    第二课 JVM运行机制简介 堆、栈、方法区等 JVM启动流程 内存模型和volatile实例 解释和编译运行的概念 介绍JVM的内部结构、启动流程以及内存模型。并介绍JVM字节码的执行方式。 第三课 常用JVM参数 堆的分配参数 ...

    蚂蚁课堂-JVM快速入门2

    理解JVM参数设置,可以帮助开发者在面临性能瓶颈时做出明智决策,优化应用程序的内存使用,预防和处理内存溢出问题。同时,这也是面试中常见的话题,掌握这部分知识将大大提高你的专业素养。 总的来说,“蚂蚁课堂-...

    JVM高级特性与最佳实践(第2版)源代码.zip

    - 参数调整:学习如何通过JVM参数设置内存大小、GC策略、并发级别等,以优化应用性能。 4. **类加载器**: - 自定义类加载器:了解如何编写自己的类加载器,以实现特定的类加载逻辑。 - 双亲委派模型:理解类...

    JVM入门实战/arthas实战/垃圾回收算法/垃圾回收器/jvm内存模型分析

    本系列课程从JVM基础到高级实战,老师手把手教你如何进行JVM...1.3JVM参数设置思路1.4JVM调优常用指令说明 第七节:JVM项目实战 1.1案例背景 1.2排查步骤 1.3.arthas 1.3.1.arthas简介 1.3.2.arthas实战 1.3总结

    关键业务系统JVM参数推荐

    1. **开源项目启动脚本**:参考成熟的开源项目如ElasticSearch和Cassandra的启动脚本可以获取一些实用的JVM参数设置。例如,ElasticSearch和Cassandra在启动脚本中对JVM参数进行了细致的配置,这些都是经过大量实践...

    jvm参数与系统性能的优化

    在 Java 虚拟机(JVM)中,参数设置对系统性能的影响是至关重要的。通过设置合适的 JVM 参数,可以提高系统性能,减少垃圾回收的频率和时间,提高应用程序的执行效率。 第一点:设置堆栈大小 在 JVM 中,堆栈大小...

    JVM下篇:性能监控与调优篇.7z

    - **监控与调整JVM参数**:根据实际运行情况动态调整,如调整新生代和老年代的大小。 7. **JVM诊断工具**: - `jmap`:获取堆内存快照,分析内存分配。 - `jhat`:分析`jmap`导出的内存转储文件。 - `jstack`:...

    JVM优化3(Tomcat参数调优,JVM参数调优,jvm字节码,代码优化).pdf

    本篇文件内容主要介绍了JVM优化的第三部分,重点围绕Tomcat参数调优、JVM参数调优、JVM字节码优化以及代码优化等几个方面。下面是针对这些知识点的详细解释: 1. Tomcat参数调优 在Tomcat参数调优部分,首先介绍了...

    JVM系列之性能调优参考手册(实践篇).pdf

    性能调优不仅需要了解JVM参数,还需要关注参数的具体含义和应用。例如,“-Xms”和“-Xmx”分别用于设置JVM的初始堆内存和最大堆内存,“-Xss”用于设置线程堆栈大小,“-Xmn”用于设置年轻代内存大小。而“-XX”...

    JVM实用参数

    本节介绍的JVM参数如下: | 参数 | 说明 | |----------------|----------------------------------------------------------| | `-version` | 打印JVM版本信息 | | `-showversion` | 打印版本信息并执行程序 | | `-...

    jvm工具、参数调优&调试技巧

    二、JVM参数调优 JVM参数调优是提高程序性能的重要手段,主要包括以下几方面: 1. 内存设置:-Xms和-Xmx分别设定堆内存的初始大小和最大值,-XX:NewRatio控制新生代与老年代的比例,-XX:SurvivorRatio则定义新生代...

    JVM学习笔记(一)

    下面是一些常见的JVM参数: - `java`:用来启动一个Java程序。 - 两种格式: - `java [options] class [arguments]`:需要指定main方法所在的类名。 - `java [options] -jar file.jar [arguments]`:需要指定...

    JVM配置参数说明

    在Java虚拟机(JVM)的运行过程中,通过一系列的命令行参数,我们可以调整其性能和行为。以下是对JVM部分关键配置参数的详细解析,这些参数能够帮助我们优化应用程序的执行效率,管理内存,以及进行性能调优。 ####...

    JAVA-OPTS参数设置.docx

    JAVA-OPTS参数设置 JAVA-OPTS 是一个变量,用于设置 JVM 相关运行参数。JVM 是 Java Virtual Machine 的缩写,表示 Java 虚拟机。JAVA-OPTS 变量的设置对 Java 应用程序的性能和稳定性具有重要影响。 在设置 JAVA-...

    JVM高级特性与最佳实践(第2版)+pdf+源码

    通过调整JVM参数(如-Xms, -Xmx, -XX:NewRatio等),可以优化内存分配、GC行为和线程设置,达到性能最佳。 6. **编译优化**:JVM有即时编译(JIT,Just-In-Time)机制,将热点代码编译为本地机器码,提高执行效率。...

    JVM 6 详细参数(中文版)

    ### JVM 6 详细参数分析 #### 概述 本文档深入探讨了Java 6 (JDK 6) 的JVM参数配置,旨在为开发者提供一份详尽的指南,帮助理解并合理设置JVM参数...希望本文档能够成为您探索JVM参数设置道路上的一份宝贵参考资料。

Global site tag (gtag.js) - Google Analytics