jvm学习(一)初识与实践

jvm值得学习,目前周志明先生-大佬的《深入理解jvm》第三版 jdk1.8版本的 已出,这本书强烈推荐。
1.jdk, jre和jvm的关系
oracle官方jdk1.8的描述文档截图
可见
jdk(开发及运行环境)= jre+其他
jre(运行环境)= java SE Api + jvm +其他
所以jvm是jdk中jre的一部分
在这里插入图片描述在这里插入图片描述目前要学习的部分就是 java virtual machine (jvm).
2.环境准备
1)下载安装或使用解压版本jdk1.8,配置环境变量。
2)下载安装eclipse.
3)下载插件memory Analyzer 内存分析工具简称MAT

当然也可以使用idea及Jprofiler
3.代码
1)在eclipse中添加两个类:

public class Demo1 {
	private String name;
	private int age;
	private String grade;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getGrade() {
		return grade;
	}

	public void setGrade(String grade) {
		this.grade = grade;
	}

}

以及主类(人为制造堆内存溢出的类)

package com.kdeng.practise.jvm.day01;

import java.util.ArrayList;
import java.util.List;

/**
 * Hello world!
 *
 */
public class TestJvm01
{
    public static void main( String[] args )
    {
    	List<Demo1> a = new ArrayList<>();
       while(true) {//无限添加
    	   a.add(new Demo1());
       }
    }
}

直接运行上面的代码会直接报内存溢出错误。
4.设置与分析
为了进一步分析,需要如下设置:
1)点击对应项目右键run as run configurations ,
2)点击参数 agruments ,设置如下参数
在这里插入图片描述
这些参数的含义:可以参照官方文档
在这里插入图片描述
此处是: 当发生堆内存错误时生成快照文件,初始化堆的大小为20m,最大不超过20m.
运行:果然报错,
在这里插入图片描述多了红色方框的信息,是上面设置了生成快照的参数,
找到项目对应文件的快照,(直接右键项目properties->Resource->看见右侧地址,直接点小箭头)
在这里插入图片描述找到memory analyzer的启动目录,启动,然后点击file->找到快照文件 后缀名为hprof的文件,导入。
在这里插入图片描述深蓝色表示出问题的部分。
点击小红框部分切换
在这里插入图片描述在这里插入图片描述发现占用20M内存中高达97%的原因是:某个线程创建了大量的Demo1类,找到问题所在。
红框从左到右:
Shallow size就是对象本身占用内存的大小,不包含对其他对象的引用,也就是对象头加成员变量(不是成员变量的值)的总和。 Retained size是该对象自己的shallow size,加上从该对象能直接或间接访问到对象的shallow size之和。换句话说,retained size是该对象被GC之后所能回收到内存的总和。
最后一个是所占百分比。
详细可见:
https://my.oschina.net/freelili/blog/1558406

初步体验到此结束,接着开始正式学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值