jvm 相关(以及jdk工具的使用--待完善)

文章介绍了jVisualVM工具在监控程序运行状态和分析堆转储文件中的作用。详细讨论了Java对象创建的三个步骤,包括指针碰撞和空闲列表两种堆内存分配策略,以及对象在内存中的布局。此外,提到了引用访问对象的两种方式和如何设置IDEA的JVM启动参数,以及内存溢出错误的排查方法。
摘要由CSDN通过智能技术生成

jVisualVM不仅可以查看转储文件,也可以实事监控程序的运行状态(远程或本地都可以)。

关于Java对象创建的过程:

new对象创建对象的3个步骤:

  1. 在堆内存中创建出对象的实例。
  2. 为对象的成员变量赋初值。
  3. 将对象的引用返回。

两种对象的存储方式(在堆内存中创建出对象的实例):

  1. 指针碰撞:(前提是堆中的空间通过一个指针进行分割,一侧是已被占用的空间,另一侧是未被占用的空间):

  2. 空闲列表:(前提是堆内存空间中已被使用与未被使用的空间是交织在一起的,这时虚拟机就需要通过一个列表来记录哪些空间是可以使用的,哪些是已经被使用的,记下来找出可以容纳下新创建对象的且未被使用的空间,在此空间存放该对象,同时还要修改列表上的记录。)

对象在内存中的布局:
1 . 对象头
2 . 实例数据(即我们在一个类中所生命的各项信息)
3 . 对齐填充(可选)

引用访问对象的方式:

  1. 使用句柄的方式。
  2. 使用直接指针的方式。

内存溢出错误排查:

一般不会遇到,遇到就是大问题。

  1. idea设置jvm启动参数(堆内存最小为5m,最大也为5m):-Xms5m -Xmx5m -XX:+HeapDumpOnOutOfMemoryError
    在这里插入图片描述
    程序内存溢出报错:
    在这里插入图片描述
  2. 生成的堆内存转储文件
    在这里插入图片描述
  3. 用jvisualvm打开此文件
    在这里插入图片描述
  4. jvisualvm 分析堆转储文件
    ①概要
    这个文件的基本信息在这里插入图片描述
    ②类
    说明此堆转储中,myTest1这个类占用了堆内存的90以上。
    在这里插入图片描述
    ③ 双击类名查看其实例数 (十六万多个)
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值