深度理解java jvm,深度理解JVM

深入理解java虚拟机

要讲的内容

了解历史

垃圾回收机制

性能监控工具

性能调优案例实战

认识类的文件结构

类加载机制

字节码执行引擎

虚拟机编译及运行时优化

Java线程高级

1. 环境搭建

安装jdk

729632784c8bc780baaa59c8b25d4a2b.png

2. 内存溢出场景模拟

public class Test01 {

public static void main(String[] args) {

//测试内存溢出

List list = new ArrayList();

while(true) {

list.add(new Demo());

}

//不停的创建对象会一直消耗堆内存知道内存消耗完(其实不会真的将8G的内存都消耗完)

//当达到一个上线时就会报出这个错误了,这时就会报出一个内存溢出

//OutOfMemoryError

}

}

class Demo{

}

fd4876ba0d0ac6e243de0573168bcf7d.png

651156786e99d65fdeadc34b3c489cac.png

可以在你的项目下找到这个快照的错误文件

但是我们是看不懂的所以需要到http://www.eclipse.org/mat/downloads.php去下载一个eclipse的MemoryAnalyzer分析工具

如果你直接下载会非常慢所以选择一个其他的镜像这样下载就会快点

下载解压后打开

f740a8ee8c0d892657b04cd49ce3d324.png

点击file->Open Heap Dump 选中产生的那个文件

33cf7da3c1d6c952b0e0bbde3f3191bc.png

然后生成一个

9b5d40b8c9c2c1d52b5c33b7ac13cb52.png

选中这个图标可以查看我们的堆内存运行情况 加载堆内存的信息

74c11eaf478f0fa397064a5902beae9e.png

这个就代表很可能在main里面出现问题了 占得百分比高达95.6%

533558a9b7d2c22a7ceb0a6ba8bd27d5.png

Shallow Heap 对象本分所占用的内存大小不包含它的引用对象

Retained Heap 代表当前对象的大小包括当前可直接或者间接引用对象的大小的总和。

点开那个占用堆内存最多线程

dc0a81ee4fa50828eda66d3f4d631c88.png

继续点开会发现 他创建了很多个这样的对象造成的堆内存溢出

Jvm 的可视化监控工具

这个工具在哪呢在我们安装的jdk中

因为我们的jdk已经配置在我们的path路径下因此在任何路径下都可以访问的到所以在

命令行中可以输入这个值 会将这个可视化界面弹出来

我们可以看到这个图像化界面只有18k那么真正的代码放在了lib目录下的一个jar包里面

这个jps这个命令会列出来所有的java进程,我们看到有JConsole 这个进程 但是为什么没有jps这个进程呢是因为

这个命令执行完之后就结束了。

当我们点进去就能对这个进程进行监控

我们大概就能看到这样的窗口了

Java 之父

詹姆斯  高林斯

标签:这个,JVM,jdk,理解,内存,Heap,深度,我们,溢出

来源: https://www.cnblogs.com/zhulina-917/p/11387900.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值