java gc日志详解_深入理解JAVA虚拟机-GC日志详解 - Java 技术驿站-Java 技术驿站_weixin_39883208的博客-程序员秘密

技术标签: java gc日志详解  

1.编写JAVA代码

import java.util.ArrayList;

import java.util.List;

/**

* -verbose:gc -Xms30M -Xmx30M -Xmn10M -XX:PermSize=200M -XX:MaxPermSize=200M -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:SurvivorRatio=8

* @author Administrator

*parallel Scanvenge

*/

public class HeapOutOfMemoryExample {

public static void main(String[] args) {

List list = new ArrayList();

while(true) {

list.add(new Object());

}

}

}

2.设置JVM参数

-verbose:gc -Xms30M -Xmx30M -Xmn10M -XX:PermSize=200M -XX:MaxPermSize=200M -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:SurvivorRatio=8

afbce3e42fbf6726c10843b22d61da3a.png

JVM参数说明

Xms=30M //最小堆内存

Xmx=30M //最大堆内存

Xmn=10M //年轻代所占内存

PermSize=200M //永久代所占最小内存

MaxPermSize=200M //永久代所占最大内存

SurvivorRatio=8 //年轻代中Eden区和Survivor区的比值

PrintGCDetails //打印出垃圾回收日志

PrintGCDateStamps //打印出垃圾回收的时间

3.执行类HeapOutOfMemoryExample

打印出GC日志

a3c3a3de0a63b2b03907973abefbd632.png

2017-11-22T22:36:06.735+0800: [GC [PSYoungGen: 7522K->1001K(9216K)] 7522K->5201K(29696K), 0.0087282 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]

2017-11-22T22:36:06.735+0800: [GC [PSYoungGen: 9193K->1024K(9216K)] 13393K->10990K(29696K), 0.0104110 secs] [Times: user=0.05 sys=0.00, real=0.02 secs]

2017-11-22T22:36:06.751+0800: [Full GC [PSYoungGen: 9216K->0K(9216K)] [ParOldGen: 14714K->18607K(20480K)] 23930K->18607K(29696K) [PSPermGen: 2570K->2569K(204800K)], 0.2016436 secs] [Times: user=0.22 sys=0.00, real=0.20 secs]

2017-11-22T22:36:06.953+0800: [Full GC [PSYoungGen: 5655K->4088K(9216K)] [ParOldGen: 18607K->20131K(20480K)] 24262K->24220K(29696K) [PSPermGen: 2569K->2569K(204800K)], 0.2352180 secs] [Times: user=0.33 sys=0.00, real=0.23 secs]

2017-11-22T22:36:07.187+0800: [Full GC [PSYoungGen: 4088K->4088K(9216K)] [ParOldGen: 20131K->20120K(20480K)] 24220K->24209K(29696K) [PSPermGen: 2569K->2569K(204800K)], 0.1325484 secs] [Times: user=0.22 sys=0.00, real=0.14 secs]

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

at java.util.Arrays.copyOf(Arrays.java:2245)

at java.util.Arrays.copyOf(Arrays.java:2219)

at java.util.ArrayList.grow(ArrayList.java:242)

at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:216)

at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:208)

at java.util.ArrayList.add(ArrayList.java:440)

at com.HeapOutOfMemoryExample.main(HeapOutOfMemoryExample.java:15)

Heap

PSYoungGen total 9216K, used 4382K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)

eden space 8192K, 53% used [0x00000000ff600000,0x00000000ffa478e0,0x00000000ffe00000)

from space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)

to space 1024K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)

ParOldGen total 20480K, used 20120K [0x00000000fe200000, 0x00000000ff600000, 0x00000000ff600000)

object space 20480K, 98% used [0x00000000fe200000,0x00000000ff5a6150,0x00000000ff600000)

PSPermGen total 204800K, used 2601K [0x00000000f1a00000, 0x00000000fe200000, 0x00000000fe200000)

object space 204800K, 1% used [0x00000000f1a00000,0x00000000f1c8a418,0x00000000fe200000)

4.GC日志详解

2017-11-22T22:36:06.735+0800:[GC [PSYoungGen: 9193K->1024K(9216K)] 13393K->10990K(29696K), 0.0104110secs] [Times: user=0.05 sys=0.00, real=0.02 secs]

2017-11-22T22:36:06.735+0800 //垃圾回收时的时间

GC //垃圾回收的类型,GC是只回收新生代;Full GC会回收新生代、年老代、永久代,会停止所有用户线程。

PSYoungGen //年轻代的垃圾回收使用的是Parallel Scanvenge垃圾收集器,简称PS,年轻代就是PSYoungGen。

9193K->1024K(9216K)//年轻代划分成Eden区、From Survivor区和To Survivor区,整个年轻代可以用来使用的就是Eden区加上其中一个Survivor区,也就是8M+1M=9M=9216K,9193K是指Eden区+其中一个Survivor区在垃圾回收之前占用的内存,1024K是指Eden区+其中一个Survivor区在垃圾回收之后还在占用的内存

13393K->10990K(29696K) //29696K指堆的可用大小,包含Eden区+其中一个Survivor区+年老代,8M+1M+20M=29M=29696K,13393K指执行垃圾回收前这三个区域所占的内存,10990K指执行垃圾回收之后这三个区域所占的内存。

Times:user=0.05 sys=0.00, real=0.02 secs //user=0.05是指CPU运行的总时长,如果有多核,则累加;sys=0.00,是指内核态消耗的CPU事时间;real=0.02是指操作从开始到结束所经过的墙钟时间,墙钟时间包括各种非运算的等待耗时,例如等待磁盘I/O,等待线程阻塞,而CPU时间不包括这些耗时。

2017-11-22T22:36:06.751+0800:[Full GC [PSYoungGen: 9216K->0K(9216K)] [ParOldGen:14714K->18607K(20480K)] 23930K->18607K(29696K) [PSPermGen:2570K->2569K(204800K)], 0.2016436 secs] [Times: user=0.22 sys=0.00,real=0.20 secs]

Full GC //垃圾回收的类型,GC是只回收新生代;Full GC会回收新生代、年老代、永久代,会停止所有用户线程。

ParOldGen //年老代的垃圾回收采用的是ParNew收集器

14714K->18607K(20480K) //20480K指年老代最大可以分配的内存20M=20480K;14714K指执行垃圾回收前永久代占用的内存;18607K指年老代执行垃圾回收后所占的内存,由于年轻代经过垃圾回收后年轻代或Survivor中的部分对象被移动到年老代,所以导致年老代执行垃圾回收后占用的内存超过垃圾回收之前所占的内存。

PSPermGen //永久代的垃圾回收采用的是Parallel Scanvenge垃圾收集器

2570K->2569K(204800K) //永久代最大可以分配的内存200M=204800K,2570K指永久代执行垃圾回收前所占内存,2569指永久代执行垃圾回收之后所占内存

Heap PSYoungGen     total9216K,used4382K[0x00000000ff600000,0x0000000100000000,0x0000000100000000) edenspace8192K,53%used[0x00000000ff600000,0x00000000ffa478e0,0x00000000ffe00000) fromspace1024K,0%used[0x00000000fff00000,0x00000000fff00000,0x0000000100000000) to  space1024K,0%used[0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000) ParOldGen      total20480K,used20120K[0x00000000fe200000,0x00000000ff600000,0x00000000ff600000) objectspace20480K,98%used[0x00000000fe200000,0x00000000ff5a6150,0x00000000ff600000) PSPermGen      total204800K,used2601K[0x00000000f1a00000,0x00000000fe200000,0x00000000fe200000) objectspace204800K,1%used[0x00000000f1a00000,0x00000000f1c8a418,0x00000000fe200000)

Heap PSYoungGen     total9216K,used4382K[0x00000000ff600000,0x0000000100000000,0x0000000100000000) edenspace8192K,53%used[0x00000000ff600000,0x00000000ffa478e0,0x00000000ffe00000) fromspace1024K,0%used[0x00000000fff00000,0x00000000fff00000,0x0000000100000000) to  space1024K,0%used[0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000) ParOldGen      total20480K,used20120K[0x00000000fe200000,0x00000000ff600000,0x00000000ff600000) objectspace20480K,98%used[0x00000000fe200000,0x00000000ff5a6150,0x00000000ff600000) PSPermGen      total204800K,used2601K[0x00000000f1a00000,0x00000000fe200000,0x00000000fe200000) objectspace204800K,1%used[0x00000000f1a00000,0x00000000f1c8a418,0x00000000fe200000)

这是堆内存溢出时虚拟机打印出来的日志

PSYoungGen total 9216K, used 4382K //指出现堆内存溢出时,Eden区+Survivor区可分配的内存总和是9216K,已经分配的内存是4382K

eden space8192K, 53% used //指Eden区可分配的内存总和8192K,已分配的内存占53%

from space1024K, 0% used //指from survivor区可分配的内存总和1024K,已分配的内存占0%

to space1024K, 0% used //指from survivor区可分配的内存总和1024K,已分配的内存占0%

ParOldGen total 20480K, used 20120K //指年老代可分配的内存总和20480K,已分配的内存是20120K

objectspace 20480K, 98% used //指年老代中对象空间20480K,其中98%已用

PSPermGen total 204800K, used 2601K //指永久代可分配的内存总和204800K,已分配的内存是2601K

object space 204800K, 1% used //指永久代中对象空间20480K,其中98%已用

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39883208/article/details/114307016

智能推荐

Docker安装minio_壹碗茶的博客-程序员秘密

文章目录Docker安装minio一、查看docker镜像有无minio二、docker拉取minio的镜像四、在浏览器中输入ip+端口即可访问Docker安装minio一、查看docker镜像有无miniodocker images二、docker拉取minio的镜像docker pull minio/minio:RELEASE.2020-10-28T08-16-50Z-37-ged264449b此时再查看docker镜像,就有了minio镜像## 三、编辑下面命令设置minio登录

来康康哩哩分析的女孩子适合做程序员吗?_哩哩学编程的博客-程序员秘密

女生适合做程序员吗?这是IT行业常常讨论的话题。以哩哩的观点,在这个平等自由的时代,女生绝对是非常适合做程序员!在IT领域,身为女生存在着诸多的优势:1、感性与理性思维并重图中这个沉静美丽的女子名叫Augusta Ada King。她是一位数学家,也是穿孔机程序的创始人,曾经建立了循环和子程序概念,为计算程序拟定算法,被誉为世界上第一位程序员。有人说女生不善于理性思维,这是没有任何科学依据的。女生在智力上完全不逊于男生,并且心思更为缜密,更善于调节自我状态,从事编程这一科学领域是完全不会

uniApp打包安卓应用详细步骤_恰好有你的博客-程序员秘密

一、打包安卓应用1.使用uniApp新建的一个混合运用2.点击发行-原生App打包-打包Android(apk包)3.这里我们可以使用公共的一个测试证书或者使用自有的一个证书,楼主在这里就讲一下自有证书的申请及使用,因为公共的点击一下就可以打包了4.Android平台打包发布apk应用,需要使用数字证书(.keystore文件)进行签名,用于表明开发者身份。需确保电脑上安装了JRE(JRE环境),我们将使用JRE自带的创建和管理数字证书的工具Keytool,并使用keytool命令生成签名证书。

Ajax+PHP简单数据交互模拟数据查询实例代码【员工信息查询】_php ajax查询代码_程序小小生的博客-程序员秘密

Ajax+PHP简单数据交互:PHP是一种创建动态交互性站点的服务器端脚本语言,优势:PHP脚本语言应用广泛,开源免费,最重要的是入门简单,容易掌握。PHP能够接收表单数据、添加、删除、修改数据库中的数据1、server.php(接收查询和输出数据到前台)如下:<?php//设置页面内容是html编码格式是utf-8//header("Content-Type: text/p...

C语言程序设计--19春 形考任务1,南开19春学期(1709、1803、1809、1903)《C语言程序设计》在线作业-1辅导资料.docx..._weixin_39880301的博客-程序员秘密

南开19春学期(1709、1803、1809、1903)《C语言程序设计》在线作业-1辅导资料.docx南开19春学期(1709、1803、1809、1903)C语言程序设计在线作业-11、D 2、D 3、B 4、C 5、C 一、单选题共40题,80分1、以下对一维整型数组 a 的正确说明是 Aint a10 ;Bint n10,an;Cint n;Ddefine SIZE 10 int aSIZ...

随便推点

学生信息管理系统:SSM框架实现学生信息的增删改查_eclipse ssm简单学生管理系统_一下子就醒了的博客-程序员秘密

一、项目概述:该项目主要实现对学生信息的管理,通过学生信息管理系统能够进行学生信息的增加、查看,查询,删除等功能,实现学生管理工作的系统化和自动化。该项目已经上传到github了,想看源码请移步:https://github.com/LazyTraveller/Student-Information-Management-System (内含数据库脚本)百度网盘:链接:https:...

HQL笔试题整理_hql 笔试题_灰哀之雪的博客-程序员秘密

HQL笔试题1. 求:找出所有科目成绩都大于某一学科平均成绩的学生uid,subject_id,score1001 01 901001 02 901001 03 901002 01 851002 02 851002 03 701003 01 701003 02 701003 03 85-- 创建表语句create table score(uid string,subject_id string,score int)row format delimited fields

shopex使用经验_chaimyu的博客-程序员秘密

shopex使用经验Chaim 2011.1.24模板目录themes模板目录borders模板各部分边框block头/脚信息images图像文件/CSS文件都在此中,borders和block中的html格式都在这些文件中指定修改图像列表中的价格和展示信息模板管理->gallery->type

SVD的理解_什么是svd_Danker01的博客-程序员秘密

近一段时间一直在看推荐系统相关的内容,看到协同过滤的时候,有的大佬将协同过滤分成了三种情况(当然实际情况也许不止三种)来考虑并做了相互之间的比较,其中有一种就是基于SVD的协同过滤。当时看到这个是一脸的懵,就赶紧查了一下相关的资料恶补一下,记录在这。SVD定义:首先,我们来看一下什么是SVD,奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习...

webrtc M75支持android安卓H264软编解遇到的一些坑_安卓7.1的设备不支持h264怎么解决_睏哥RTC的博客-程序员秘密

webrtc android引擎遇到使用MTK芯片华为荣耀手机截另外一款HISI芯片编的H264时,解码器不停的重启,判断可能是芯片问题,考虑到后续其他机型下的兼容问题,决心给webrtc加上ffmpeg软解,网上找的相关资料基本都是比较老的版本,M75下遇到一些新的坑,记在这里供大家参考。1. third_party/ffmpeg/ffmpeg_generated.gni打开此文件,可以...

pku 3630--Phone List(二分查找,trie树)_zsc09_leaf的博客-程序员秘密

<br />Phone ListTime Limit: 1000MS Memory Limit: 65536K<br />Total Submissions: 10228 Accepted: 3288<br /><br /><br />Description<br /><br />Given a list of phone numbers, determine if it is consistent in the sense that no number is the prefix of another.

推荐文章

热门文章

相关标签