`

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内核 - 原理、诊断与优化

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

    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总结

    resin-jvm 调优

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

    深入理解_Java_虚拟机 JVM_高级特性与最佳实践

    112 5.2.5 服务器JVM进程崩溃 / 113 5.3 实战:Eclipse运行速度调优 / 114 5.3.1 调优前的程序运行状态 / 114 5.3.2 升级JDK 1.6的性能变化及兼容问题 / 117 5.3.3 编译时间和类加载时间的优化 / 122 5.3.4 ...

    Java高级面试第二套2.探索JVM底层奥秘ClassLoader源码分析与案例讲解

    1.第二步,可以在5分钟内实现; 2.成本3元(腾讯云支持微信小程序2017年推广期间,3元腾讯云提供整套服务器和系统) 3.腾讯云默认分配:1.云服务器;2.云数据库;3.域名;4.小程序支持系统; 4.只要

    Tomcat内存溢出的三种情况及解决办法分析

    第二种:永久保存区域溢出 PermGen space的全称是Permanent Generation space,是指内存的永久保存区域。这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的...

    125集专攻JAVA基础 JAVA零基础入门学习视频教程 动力节点JAVA视频教程.txt

    北京动力节点-Java编程零基础教程-026-Java语言概述-第一个程序-临时系统变量Path设置.avi 北京动力节点-Java编程零基础教程-027-Java语言概述-第一个程序-系统变量Path设置.avi 北京动力节点-Java编程零基础教程...

    新版Android开发教程.rar

    2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance Alliance Alliance Alliance 什么是开放手机联盟? 开放手机联盟, Open Handset Alliance :是美国 Google 公司与 2007 年 ...

    Java程序性能优化

    《java程序性能优化——让你的java程序更快、...第5章立足于jvm虚拟机层面,介绍如何通过设置合理的jvm参数提升java程序的性能;第6章为工具篇,介绍获取和监控程序或系统性能指标的各种工具,包括相关的故障排查工具。

    Hadoop权威指南 第二版(中文版)

    第2章 关于MapReduce  一个气象数据集  数据的格式  使用Unix工具进行数据分析  使用Hadoop分析数据  map阶段和reduce阶段  横向扩展  合并函数  运行一个分布式的MapReduce作业  Hadoop的Streaming  Ruby...

    大优惠 Java程序性能优化 让你的Java程序更快、更稳定最新版

    Java是目前应用最为广泛的软件开发平台,学习...第5章立足于JVM虚拟机层面,介绍如何通过设置合理的JVM参数提升Java程序的性能。第6章为工具篇,介绍了获取和监控程序或系统性能指标的各种工具,包括相关的故障排查工具

    易语言程序免安装版下载

    4) 修改静态编译后“读配置项”命令在第三个参数“配置项名称”为空文本时导致程序崩溃的BUG 5) 修改高级选择夹中的组件在窗口载入后强制得到焦点的BUG 6) 修改MYSQL支持库跨静态编译的EXE和DLL传递连接句柄和...

    Eclipse开发分布式商城系统+完整视频代码及文档

    │ 19-tomcat中JVM参数优化.avi │ ├─补充2:Redis3.0新特性、主从复制、集群视频教程 │ │ 打开必读.txt │ │ │ ├─相关资料 │ │ redis-3.0.1.tar.gz │ │ redis-3.0.2.tar.gz │ │ redis-3.2.1.gem │...

    Java程序性能优化 _让你的Java程序更快、更稳

    第5章立足于JVM虚拟机层面,介绍如何通过设置合理的JVM参数提升Java程序的性能。第6章为工具篇,介绍了获取和监控程序或系统性能指标的各种工具,包括相关的故障排查工具。 本书适合所有Java程序员、软件设计师、...

    java程序性能优化

    第5章立足于JVM虚拟机层面,介绍如何通过设置合理的JVM参数提升Java程序的性能。第6章为工具篇,介绍了获取和监控程序或系统性能指标的各种工具,包括相关的故障排查工具。, 本书适合所有Java程序员、软件设计师、...

    day021-反射和注解笔记和代码.rar

    第一个next(可以设置生成文档注释的目录),第二个next,设置字符集 如果是UTF-8编码,且有中文,请输入-encoding UTF-8 -charset UTF-8 4. 勾选一个生成完毕后,直接通过浏览器打开的选项 5...

Global site tag (gtag.js) - Google Analytics