欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java jvm 调优实战 JVMJavaEclipse 

程序员文章站 2022-07-14 20:19:31
...

1.eclipse 打印gc日志

   eclipse根目录eclipse.ini 中设置如下:

-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
-verbose:gc
-Xloggc:gc.log

    

2. Java中,栈的大小通过-Xss来设置,当栈中存储数据比较多时,需要适当调大这个值,否则会出现java.lang.*Error异常。常见的出现这个异常的是无法返回的递归,因为此时栈中保存的信息都是方法返回的记录点。

    JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。

 

Java Heap 堆分为3个区
1.Young
2.Old
3.Permanent

Young保存刚实例化的对象。当该区被填满时,GC会将对象移到Old区。Permanent区则负责保存反射对象,本文不讨论该区。

JVM的Heap分配可以使用-X参数设定,

-Xms
初始Heap大小
-Xmx
java heap最大值

-Xmn
young generation的heap大小

当gc日志出现

 [GC 0.209: [DefNew: 4416K->511K(4928K), 0.0034707 secs] 4416K->614K(15872K), 0.0035239 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]

说明yong区设置过小,一般设置heap的1/4比较好.

java提示报错:java.lang.OutOfMemoryError,设置堆内存过小,加大Xmx和Xms值。

3.[Perm : 24574K->24554K(24576K)], 0.1160431 secs] [Times: user=0.13 sys=0.00, real=0.13 secs]

PermGen space:全称是Permanent Generation space.就是说是永久保存的区域,用于存放Class和Meta信息,Class在被Load的时候被放入该区域Heap space:存放Instance。

GC(Garbage Collection)应该不会对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误,加大PermSize

-XX:PermSize=96m
-XX:MaxPermSize=96m

-XX:PermSize=96m
-XX:MaxPermSize=96m

 

-XX:PermSize=96m
-XX:MaxPermSize=96m
-XX:PermSize=96m
-XX:MaxPermSize=96m
-XX:PermSize=96m
-XX:MaxPermSize=96m

-XX:PermSize=96m
-XX:MaxPermSize=96m

 

 

附注:

堆与栈 stack and heap

    堆和栈是程序运行的关键,很有必要把他们的关系说清楚。

 

   java jvm 调优实战
            
    
    
        JVMJavaEclipse 

    栈是运行时的单位,而堆是存储的单位

    栈解决程序的运行问题,即程序如何执行,或者说如何处理数据;堆解决的是数据存储的问题,即数据怎么放、放在哪儿。

    在Java中一个线程就会相应有一个线程栈与之对应,这点很容易理解,因为不同的线程执行逻辑有所不同,因此需要一个独立的线程栈。而堆则是所有线程共享的。栈因为是运行单位,因此里面存储的信息都是跟当前线程(或程序)相关信息的。包括局部变量、程序运行状态、方法返回值等等;而堆只负责存储对象信息。

 

相关标签: JVM Java Eclipse