jvm调优入门学习之堆内存

在上一篇中学习了栈内存的调优,现在学习一下堆内存的相关知识。

  1. 内存溢出

    执行如下代码



    执行结果为:



    接下来我们手动调整堆内存的大小,然后重新执行代码





     
  2. 堆内存诊断

    有如下代码块:



    这里休眠30秒为了方便我们执行jps和jmap命令

    当打印完1....后在idea自带的工具terminal中执行jps命令,jps命令的意思是:查看当前系统中有哪些Java进程



    发现我们自己创建的Java类的进程id为 30156,在执行  jmap -head 30156有如下结果:



    根据结果发现:当前Java代码在堆中的内存占用为4.4MB

    等待2....打印结束后在执行一遍 jmap -head 30156,结果如下:会发现堆内存的占用多了10MB。正好是我们创建的

    array数组的占用大小

    等3.....打印结束后在执行一遍  jmap -head 30156,结果如下:堆内存得到了释放。


     
  3. jconsole工具的使用:

    还是运行上面的代码,然后在terminal中执行jconsole命令,选中我们自己的类名并双击,然后选择不安全连接即可。




     
  4. 案列:执行垃圾回收后占用还是特别高

    执行如下代码并使用  jmap 命令分析:



    执行 jmap 命令会发现:Eden区占用了32MB,old区占用了170MB



    使用jconsole命令来执行一次垃圾回收:会发现堆内存的占用已经下降了,但是仍然有200多MB



    在terminal中执行jvisualvm命令,这也是个可视化工具来监控内存等信息。



    点击堆dump后在点击查找按钮,会发现有如下的信息



    点击进入ArrayList查看详细信息如下,会发现集合中存储的是student对象并且有个array数组占用了1MB,则我们可以找出了具体的问题。




















 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值