`

jvm_1_配置参数(待补充完善)

 
阅读更多

 

 

1 Trace跟踪参数

 

a) -verbose:gc

b) -XX:+printGC

   -XX:+printGCDetails  ---打印GC详细信息

   -XX:+printGCTimeStamps   ---打印GC发生的详细时间

 

以-XX:+printGCDetails 为例:

public class test2 {

	
	
	public static void main(String[] args) {

		long begin = System.currentTimeMillis();
		for(int i=0; i<100000000; i++){
			alloc();
		}
		long end = System.currentTimeMillis();
		System.out.println(end - begin);
		
	}
	 
	public static void alloc(){
		byte[] b = new byte[2];
		b[0] = 1;
	}

}


参数:
-XX:-DoEscapeAnalysis 
-XX:+PrintGCDetails

运行结果部分摘抄:
[GC [PSYoungGen: 3264K->0K(3328K)] 3420K->156K(10176K), 0.0067019 secs] [Times: user=0.02 sys=0.00, real=0.01 secs] GC回收,从原来3420K回收后变成156K(目前堆内存空间为10176K) 耗时0.0067019 secs
[GC [PSYoungGen: 3264K->0K(3328K)] 3420K->156K(10176K), 0.0002648 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
1534
Heap
 PSYoungGen      total 3328K, used 196K [0x08e20000, 0x09170000, 0x09170000)   
  eden space 3264K, 6% used [0x08e20000,0x08e51000,0x09150000)
  from space 64K, 0% used [0x09150000,0x09150000,0x09160000)
  to   space 64K, 0% used [0x09160000,0x09160000,0x09170000)
 PSOldGen        total 6848K, used 156K [0x08770000, 0x08e20000, 0x08e20000)
  object space 6848K, 2% used [0x08770000,0x08797060,0x08e20000)
 PSPermGen       total 16384K, used 2146K [0x04770000, 0x05770000, 0x08770000)
  object space 16384K, 13% used [0x04770000,0x049889d0,0x05770000)

 堆内存,总共328K, 已使用 196K,0x08e20000表示此堆内存分配其实空间,0x09170000表示当前所分配的位置  0x09170000表示最高能申请到的位置
 那么实际占用内存为 ( 0x09170000 - 0x08e20000)/1024/1024 M 空间

 

 

c) 可以打印GC的简要信息

指定GC log的位置,以文件名 gc.log 输出。

-Xloggc:log/gc.log

 

 

d) -XX:+TraceClassLoading   监控类的加载

 还是以上例为例,在运行时增加参数   -XX:+TraceClassLoading

运行结果摘抄部分如下:

 

[Opened C:\Program Files\Java\jdk1.6.0_32\jre\lib\rt.jar]
[Loaded java.lang.Object from C:\Program Files\Java\jdk1.6.0_32\jre\lib\rt.jar]
[Loaded java.io.Serializable from C:\Program Files\Java\jdk1.6.0_32\jre\lib\rt.jar]
[Loaded java.lang.Comparable from C:\Program Files\Java\jdk1.6.0_32\jre\lib\rt.jar]
[Loaded java.lang.CharSequence from C:\Program Files\Java\jdk1.6.0_32\jre\lib\rt.jar]
[Loaded java.lang.String from C:\Program Files\Java\jdk1.6.0_32\jre\lib\rt.jar]
.......

  

 

 

 

 

 

 

 

 

 

2 堆的分配参数

 

-Xmx 指定最大堆

-Xms 指定最小堆

-Xmn 设置新生代大小

-XX:NewRatio  新生代和老生代的比值,eg: 4 表示新生代:老生代 = 1:4 新生代占内存的1/5

-XX:SurvivorRatio

 

-XX:OnOutOfMemoryError

在内存溢出时 执行一个脚本

-XX:OnOutOfMemoryError=脚本位置,比如发送邮件 或者重启程序

 

在内存溢出时,将错误信息保存到硬盘文件中:

 

 

 

-Xmx20m  -Xms5m  指定运行程序最大使用20M内存,最小使用5M内存。

 

 

 程序运行使用参数:

-Xmx20m -Xms5m

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath=d:/a.dump

 

 public static void main(String[] args) {
  
  List list = new ArrayList();
  for(int i=0;i<25; i++) {
   list.add(new byte[1*1024*1024]);
  }
 }


 

 

总结:

 a) 根据实际事情调整新生代和幸存代的大小

 b) 官方推荐新生代站堆 3/8

 c) 幸存代站新生代的1/10

 d) 在OOM(out of memory)时,记得Dump出堆,确保可以排查现场问题。

 

 

3 永久区分配参数   待补充

 

 

设置永久区初始空间和最大空间

-XX:PermSize

-XX:MaxPermSize

 

 

4 栈大小分配

-Xss

a) 通常只有几百K

b) 分配空间大小决定了函数调用的深度

c) 每个线程都有独立的栈空间

d) 局部变量,参数分配在栈上

代码:

package day1;

public class test5 {
	
	private static int count = 0;

	/**
	 * 测试设置栈大小下 递归调用次数
	 * 参数为:
	 * -Xss14K   在不同参数下 递归调用深度是不同的,因为空间给的大 相对调用次数会多一些
	   或者 
	 * -Xss512K
	 */
	public static void main(String[] args) {

		try{
			recursion(0L,0L,0L);
		}catch(Exception e){
			System.out.println("deep of calling is " + count);
			e.printStackTrace();
			
		}
		
	}
	
	public static void recursion(long a, long b, long c){
		long e = 1, f = 2, g =3, h = 4, i = 5, j = 6, k = 7, x = 8 ,y = 9, z = 10; // 诸多变量都放在栈中
		count++;
		recursion( a,  b,  c);
	}

}

 

 

 

 

 

 

分享到:
评论

相关推荐

    tomcat 启动:Address already in use: JVM_Bind <null>:8080

    然而,在启动 Tomcat 时,偶尔会遇到报错“Address already in use: JVM_Bind &lt;null&gt;:8080”,这意味着端口 8080 已经被占用。 为什么会出现这种情况?这通常是因为某个进程已经占用了端口 8080,阻止了 Tomcat 的...

    linux nginx nginx_upstream_jvm_route

    linux nginx nginx_upstream_jvm_route

    Java虚拟机_JVM_参数配置

    JVM参数配置是优化Java应用程序性能的关键环节,通过调整这些参数,我们可以控制JVM的行为,包括内存分配、垃圾收集、类加载等方面。在本文中,我们将深入探讨Java虚拟机的参数配置及其对程序性能的影响。 首先,...

    JVM_启动参数_总结

    JVM_启动参数_总结。详细介绍JVM的详细启动参数及JVM垃圾回收机制。

    jvm_jvm新手_jvm_

    4. **JVM参数调优**: - `-Xms` 和 `-Xmx`:设置堆内存的初始大小和最大大小。 - `-XX:NewRatio`:设定新生代与老年代的比例。 - `-XX:SurvivorRatio`:设定Eden区与Survivor区的比例。 - `-XX:+...

    jvm.zip_jvm_knownobc_tomcat

    1. **JVM参数设置**: JVM的参数设置对于控制Tomcat内存分配至关重要。例如,`-Xms`和`-Xmx`分别用于设定JVM初始堆大小和最大堆大小,确保Tomcat启动时有足够的内存,并防止因内存不足导致的系统崩溃。`-XX:NewSize...

    java.net.BindException: Address already in use: JVM_Bind :8088(端口冲突)

    在myeclipse中将html文件改成jsp文件时myeclipse卡住;将之前的任务关掉;再打开时多次部署项目的时候报错

    inside_jvm.rar_Inside the JVM_gettingloaded.html_inside jvm_insi

    《深入理解JVM》(Inside the JVM) 是一本关于Java虚拟机的重要参考资料,它涵盖了JVM的内部工作原理,包括类加载机制、内存管理、字节码执行等核心概念。"gettingloaded.html" 可能是其中的一个章节,专门探讨了类的...

    JVM.rar_jvm_jvm 实现

    Java虚拟机(JVM)是Java程序运行的核心组件,它为Java代码提供了平台无关的运行环境。本项目涉及的是一个简单的JVM实现,主要关注其基本的指令执行机制,包括入栈、出栈操作以及基本的加减运算和跳转功能。 首先,...

    jvm_gc.rar_jvm_垃圾回收

    5. **GC日志分析**:通过分析JVM产生的GC日志,可以了解垃圾回收的效率和内存使用情况,从而调整参数以优化性能。 6. **内存泄漏检测**:关注长期未被释放的对象,可能暗示存在内存泄漏问题。开发者可以通过工具如...

    CCallJava.rar_c++ jvm_java dll_jvm_jvm.dll_vc jvm.dll

    VC调用java的简单例子。需要注意jvm.dll路径,路径不对就不能成功!

    nginx-upstream-jvm-route-1.6.tar.gz

    nginx_upstream_jvm_route 是一个 Nginx 的扩展模块,用来实现基于 Cookie 的 Session Sticky 的功能。 安装方法(进入Nginx源码目录): #patch -p0 &lt; /path/to/this/directory/jvm_route.patch # ./configure -...

    Java_Jvm_Jsp_Spring3_Struts2_Hibernate_Oracle _

    Java_Jvm_Jsp_Spring3_Struts2_Hibernate_Oracle _

    JVM.rar_java 工作流_java 虚拟机_jvm_jvm hook_虚拟机 Java

    "深入Java虚拟机"这本书可能涵盖了JVM的更深入细节,如类加载机制的自定义、内存模型、垃圾收集器的原理与调优、JVM参数设置、性能监控工具的使用等。通过学习这些内容,开发者可以更好地理解和优化Java应用的运行...

    JVM.zip_java jvm_jvm

    此外,JVM还提供了丰富的命令行工具,如`jinfo`用于查看或修改JVM配置,`jstat`用于收集JVM的各种统计信息,`jmap`用于生成堆转储文件以供分析,以及`jstack`用于打印线程堆栈跟踪,这些都是诊断和优化Java应用程序...

    练习JVM调优-jvm_demo.zip

    1. **JVM结构与工作原理**: - 类加载器:加载、验证、准备、解析和初始化类。 - 运行数据区:包括堆、方法区、虚拟机栈、本地方法栈和程序计数器。 - 堆内存:存储对象实例,分为新生代和老年代。 - 方法区:...

    nginx-upstream-jvm-route-1.15

    "invalid parameter "srun_id=tomcat1""错误提示通常意味着在Nginx配置文件中,用户尝试使用了一个不被认可或者配置不正确的参数。在这个上下文中,"srun_id"可能是一个自定义的变量或标记,用于区分不同的Tomcat...

    JVM.pdf_jvm_

    1. **堆内存(Heap)**: 堆是JVM中最大的一块内存区域,用于存储对象实例。它被所有线程共享,并且在JVM启动时创建。堆内存分为新生代和老年代,新生代又细分为Eden区和两个Survivor区(From和To)。 2. **方法区...

Global site tag (gtag.js) - Google Analytics