`

第二篇 jvm常用参数

    博客分类:
  • jvm
 
阅读更多

不同的jvm参数可以在gc信息中显示出不同的内容,我们先来学习以下简单的gc信息.

  

 开启-XX:+PrintGCDetails参数,运行java程序查看gc信息

 

[GC (System.gc()) [PSYoungGen: 523K->368K(4608K)] 523K->376K(15872K(可用堆大小)), 0.0014747 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
[Full GC (System.gc()) [PSYoungGen: 368K->0K(4608K)] [ParOldGen: 8K->297K(11264K)] 376K->297K(15872K), [Metaspace: 2643K->2643K(1056768K)], 
0.0043307 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] 

   

Heap
   PSYoungGen(新生代大小)      total 4608K, used 0K [0x00000007bfb00000, 0x00000007c0000000, 0x00000007c0000000]
    (三个16进制数据分别代表下界,当前上界,上界)
    上界-下届= 堆空间的最大值; 当前上界-下界=已为虚拟机分配的空间;上界=当前上界  说明已经没有扩展空间了
     eden space 4096K, 0% used [0x00000007bfb00000,0x00000007bfb00388,0x00000007bff00000)
     from space 512K, 0% used [0x00000007bff00000,0x00000007bff00000,0x00000007bff80000)
      to   space 512K, 0% used [0x00000007bff80000,0x00000007bff80000,0x00000007c0000000]
   ParOldGen (老年代大小)      total 11264K, used 297K [0x00000007bf000000, 0x00000007bfb00000, 0x00000007bfb00000)
      object space 11264K, 2% used [0x00000007bf000000,0x00000007bf04a698,0x00000007bfb00000]
   Metaspace ((方法区大小))      used 2649K, capacity 4486K, committed 4864K, reserved 1056768K
      class space    used 287K, capacity 386K, committed 512K, reserved 1048576K

 GC  信息的相关参数

    

   -XX:+PrintHeapAtGC,可以查看GC回收前后的堆信息

   -XX:+PrintGCTimeStamps   打印GC发生的时间戳,相对于虚拟机的启动时间

   -XX:+PrintReferenceGc 可以查看软饮用,弱引用,虚引用和Finallize队列

   -XLoggc:log/gc.log  指定gc日志以文件形式输出

   -verbose:gc 开启gc跟踪 

   -verbose:class 跟踪类的加载和卸载等价于-XX:+TraceClassLoading和

   -XX:+TraceClassUnloading

   -XX:+PrintCommandLineFlags可以打印出虚拟机的显式和隐式参数

 

 新生代老生代参数测试

     

-Xms:最小堆内存(初始分配的)

-Xmx:最大堆内存(超过这个就会内存溢出)

-Xmn:新生代的大小

-XX:SurvivorRatio  设置eden空间和from/to空间的比例大小

-XX:NewRatio=老年代/新生代

    

 

jvm参数:-Xms15m -Xmx15m –Xmn1m -XX:SurvivorRatio=2 -XX:+PrintGCDetails

public static void main(String[] args) throws InterruptedException {
    byte[] b  = null;
   for(inti = 0 ;i< 10 ;i++){

     b = newbyte[1*1024*1024];
  }
}

  SurvivorRatio = eden/from =2;

  可用的=eden+from

  总共的=eden+from+to

   由于eden只有512k,不足以分配1m的空间,所以所有的都分配在老年代

   

[GC (Allocation Failure) [PSYoungGen: 512K->432K(1024K)] 512K->440K(15872K), 0.0014905 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
Heap
PSYoungGen      total 1024K, used 457K [0x00000007bfe80000, 0x00000007c0000000, 0x00000007c0000000)
   eden space 512K, 5% used [0x00000007bfe80000,0x00000007bfe86798,0x00000007bff00000)
   from space 512K, 84% used [0x00000007bff00000,0x00000007bff6c010,0x00000007bff80000)
   to   space 512K, 0% used [0x00000007bff80000,0x00000007bff80000,0x00000007c0000000)
ParOldGen       total 14848K, used 10248K [0x00000007bf000000, 0x00000007bfe80000, 0x00000007bfe80000)
   object space 14848K, 69% used [0x00000007bf000000,0x00000007bfa020a0,0x00000007bfe80000)
Metaspace       used 2645K, capacity 4486K, committed 4864K, reserved 1056768K
   class space    used 286K, capacity 386K, committed 512K, reserved 1048576K

   -Xms20m -Xmx20m -Xmn6m -XX:SurvivorRatio=2 -XX:+PrintGCDetails

    如果eden有足够的空间,所有的内存都会在eden分配

  -Xms20m -Xmx20m -XX:NewRatio=2 -XX:+PrintGCDetails

  这样新生代为6m  老年代为13m,from空间为600k,新生代回收的时候需要老年代进行空间担保.

 

 

  堆溢出的处理

      如果堆空间不足,就会outofmemory:Java Heap Space.使用参数-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/Users/zcf1/Downloads/test.dump

     导出发生内存溢出时,整个堆的信息.“-XX:OutOfMemoryError=脚本路径 %p”

     脚本内容(进程信息)

     …bin/jstack –F %l > 路径/a.txt

 

  直接内存配置

       -XX:MaxDirectMemorySize,默认是-Xmx,达到MaxDirectMemorySize时候就会触发垃圾回收。

        直接内存的优势在于读写速度快于堆内存,下面程序用来测试直接内存和堆内存性能的比较.

       

public class AccessDirectBuffer {
    public static void directAccess(){
    	long begin = System.currentTimeMillis();
    	ByteBuffer b = ByteBuffer.allocateDirect(500);
    	for(int i = 0 ;i< 10000000;i++){
    		for(int j =0 ;j< 99;j++){
    			b.putInt(j);
    		}
    		b.flip();
    		for(int j =0 ;j< 99;j++){
    			b.getInt();
    		}
    		b.clear();
    	}
    	long end = System.currentTimeMillis();
    	System.out.println("Direct:"+(end-begin));
    }
    public static void bufferAccess(){
    	long begin = System.currentTimeMillis();
    	ByteBuffer b = ByteBuffer.allocate(500);
    	for(int i = 0 ;i< 10000000;i++){
    		for(int j =0 ;j< 99;j++){
    			b.putInt(j);
    		}
    		b.flip();
    		for(int j =0 ;j< 99;j++){
    			b.getInt();
    		}
    		b.clear();
    	}
    	long end = System.currentTimeMillis();
    	System.out.println("buffer:"+(end-begin));
    }
    public static void main(String[] args) {
		bufferAccess();
		directAccess();
	}
}

 

  • 大小: 131.7 KB
分享到:
评论

相关推荐

    关键业务系统JVM参数推荐

    本文将详细介绍一些常用的JVM参数设置,这些参数适用于线上关键业务系统,并且具有较高的通用性。 #### 二、学习资源推荐 1. **开源项目启动脚本**:参考成熟的开源项目如ElasticSearch和Cassandra的启动脚本可以...

    JVM配置参数说明

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

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

    第二节:JVM内存模型 1.1 概念 1.2 JVM内存模型 1.3 Heap堆内存模型 第三节:定位垃圾对象的依据 1.1 引用计数法 1.2 可达性算法 第四节:垃圾回收算法 1.1标记清除算法 1.2复制算法 1.3 标记整理(标记压缩)...

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

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

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

    《JVM高级特性与最佳实践(第2版)》是一本深入探讨Java虚拟机(JVM)技术的书籍,其源代码提供了丰富的实践案例和示例,帮助读者更直观地理解JVM的工作原理和优化技巧。以下是根据书名和描述所涉及的一些关键知识点...

    JVM学习笔记(一)

    本篇学习笔记主要介绍如何利用一系列工具来查看和监控JVM的各种运行时信息,包括但不限于JVM进程与参数查看、垃圾收集信息、JVM锁信息等内容。 #### 二、查看JVM进程及参数 ##### 1. JPS - **用途**:列出主机上...

    第04章 大促高并发系统下JVM如何调优指导03.pdf

    【标题】: "第04章 大促高并发系统下JVM如何调优指导03.pdf" 在大型促销活动期间,高并发系统的性能优化至关重要,尤其是Java虚拟机(JVM)的调优,它直接影响应用程序的响应速度和稳定性。本章节主要探讨了在亿级...

    JAVA高级知识,JVM篇

    ### JAVA高级知识——JVM篇 #### 一、JVM内存模型 JVM(Java Virtual Machine,Java虚拟机)作为Java程序的运行环境,其内存管理机制是理解JVM的关键。JVM内存主要分为以下几个部分: 1. **程序计数器(Program ...

    实战JAVA虚拟机++JVM故障诊断与性能优化.pdf

    第1~3章介绍了Java虚拟机的定义、总体架构、常用配置参数。第4~5章介绍了垃圾回收的算法和各种垃圾回收器。第6章介绍了Java虚拟机的性能监控和故障诊断工具。第7章详细介绍了对Java堆的分析方法和案例。第8章介绍了...

    JVM垃圾回收原理

    通过命令行参数`-XX:+UseConcMarkSweepGC`启用并发标记扫描收集器,这是一种常用的并发收集器。 #### 三、垃圾回收类型 根据回收的目标范围不同,JVM中的垃圾回收可以分为以下两种类型: - **Scavenge GC**:当新...

    美团JVM问题定位和排错

    如果是TCP参数设置不当,可以调整TCP参数以提高网络效率。 3. **内存泄漏**:使用`MAT`等工具离线分析dump文件,查找内存泄漏的具体位置;也可以通过`jmap`命令获取堆内存快照,进一步排查可能的泄漏源。 4. **GC...

    JVM性能调优-JVM内存整理及GC回收.docx

    也是分两阶段,第一阶段从根节点开始标记所有被引用对象,第二阶段遍历整个堆,清除标记对象,并未标记对象并且把存活对象“压缩”到堆的其中一块,按顺序排放。 垃圾回收策略 常见的垃圾回收策略有: * 增量...

    Web服务器三剑客运维配置实战 Nginx+JVM+Tomcat+HTTP协议.zip

    ├─4.04 jvm虚拟机常识-jvm虚拟机参数类型-常用的jvm参数.mp4 ├─4.05 java细腻及讲解-jvm虚拟机常识-常用垃圾回收算法.mp4 ├─4.06 jvm运维实用排障工具.mp4 ├─4.07 jvm运维实用排障工具-jps-jstack.mp4 ├─...

    JVM高级特性与最佳实践2.0 kindle版本

    - **jprofiler**:第三方强大的JVM性能分析工具。 通过阅读《JVM高级特性与最佳实践2.0》,读者能够深入了解JVM的工作原理,掌握性能优化技巧,从而提升Java应用的稳定性和效率。书中还可能涉及更多实战案例和故障...

    resin-jvm 调优

    在第二阶段,则把标记对象复制到堆栈的新域中以便压缩堆栈。这种收集器也停止其他操作。 2.3.复制收集器 这种收集器将堆栈分为两个域,常称为半空间。每次仅使用一半的空间,jvm生成的新对象则放在另一半空间中。gc...

    分享:JVM及其性能调优,欢迎交流

    使用JVM内置的JConsole、VisualVM或者第三方工具如JProfiler,可以实时监控JVM的内存使用、线程状态、CPU负载等信息,帮助诊断性能问题。 5. **Linux监测工具**: 在Linux环境中,可以通过top、ps、htop等命令...

    JVM调优总结

    7. **JVM参数设置**:熟练掌握常用JVM参数,如`-Xms`和`-Xmx`设定堆内存大小,`-XX:NewRatio`控制年轻代和老年代的比例,`-XX:+UseConcMarkSweepGC`启用特定GC等。 8. **性能监控工具**:使用JDK自带的JVisualVM、...

    实战Java虚拟机——JVM故障诊断与性能优化

    包括但不限于体系结构、虚拟机的调试方式、常用参数、垃圾回收系统、Class文件结构、执行系统等,力求从多角度更专业地对Java虚拟机进行探讨。  4. 通俗易懂。简单的白话文风格贯穿全书,尽量做到读者在阅读过程中...

Global site tag (gtag.js) - Google Analytics