GC Log analysis

 jstack, jconsole, jinfo, jmap, jdb, jstat

-XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime

 

java -verbose:gc -Xms20m -Xmx20m -Xmn10m -XX:SurvivorRatio=8 -XX:+PrintGCD
etails  MinorGCTest

 

 

-XX:PretenureSizeThreshold

//allocate directly on Old Generaion, good for big object

-XX:MaxTenuringThreshold -XX:PrintTenuringDistribution

-XX:HandlePromotionFailure

 

 

 

 

 

 

 

 

public class MinorGCTest {

	/**
	 * -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime  
	 */
	public static void main(String[] args) {
		System.out.println(_1MB*3);
		//MinorGCTest.testAllocation();
		//MinorGCTest.testPretenureSizeThreshold();
		MinorGCTest.testOutMomery();
		
	}
	
	private static final int _1MB = 1024*1024;
	/**
	 * -verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8 -XX:+PrintGCDetails
	 */
	public static void testAllocation() {
		byte[] allocation1, allocation2, allocation3, allocation4;
		allocation1 = new byte[2 * _1MB];
		allocation2 = new byte[2 * _1MB];
		allocation3 = new byte[2 * _1MB];
		allocation4 = new byte[4 * _1MB];
	}
	
	/**
	 * -verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8 -XX:PretenureSizeThreshold=3145728 -XX:+PrintGCDetails 
	 */
	public static void testPretenureSizeThreshold() {
		byte[] allocation;
		allocation = new byte[4 * _1MB];
	}
	
	/**
	 * -verbose:gc -Xms10M -Xmx10M -Xmn5M -XX:SurvivorRatio=8 -XX:+PrintGCDetails -XX:ErrorFile=C:/temp/yw04009/D_YW/code/java_error_%p.log
	 */
	public static void testOutMomery() {
		byte[] allocation;
		allocation = new byte[10 * _1MB];
	}

}


 

 

 

 

 

 

 

 

 

 

 

 

 

如果有一个严重的错误引起Java进程非正常退出,我们叫Crash,这时候会产生一个日志文件。缺省情况下,这个

文件会产生在工作目录下。但是,可以在Java启动参数通过下面的设置,来改变这个文件的位置和命名规则。例如:
java -XX:ErrorFile=/var/log/java/java_error_%p.log
就将这个错误文件放在/var/log/java下,并且以java_error_pid.log的形式出现。

 

 看jvm的gc日志,在catalina.sh文件中加入jvm参数:

-Xloggc:gclog.vgc -XX:+PrintGCTimeStamps -XX:-PrintGCDetails -XX:+UseConcMarkSweepGC

 

 

 

 

 

 

Young垃圾回收(GC)的产生过程
      1)新生成的对象在Eden区完成内存分配
      2)当Eden区满了,再创建对象,会因为申请不到空间,触发minorGC,进行young(eden+1survivor)区的垃圾回收。(为什么是eden+1survivor:两个survivor中始终有一个survivor是空的,空的那个被标记成To Survivor)
      3)minorGC时,Eden不能被回收的对象被放入到空的survivor(也就是放到To Survivor,同时Eden肯定会被清空),另一个survivor(From Survivor)里不能被GC回收的对象也会被放入这个survivor(To Survivor),始终保证一个survivor是空的。(MinorGC完成之后,To Survivor 和 From Survivor的标记互换)
      4)当做第3步的时候,如果发现存放对象的那个survivor满了,则这些对象被copy到old区,或者survivor区没有满,但是有些对象已经足够Old(通过XX:MaxTenuringThreshold参数来设置),也被放入Old区
      5)当Old区被放满的之后,进行完整的垃圾回收,即 Full GC
      6)Full GC时,整理的是Old Generation里的对象,把存活的对象放入到Permanent Generation里。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

折腾数据折腾代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值