JVM(四)堆

我们已经知道了JVM的架构主要分为三部分:类加载器,JVM内存结构,执行引擎

JVM内存结构又分为五部分,这节来简单的看看有关栈知识点。

 

虚拟机堆:

   定义:

  •  通过new关键字,创建的对象都会保存在堆中。

   特点:

  1. 堆空间是线程共享的,堆中对象使用要考虑到多线程并发安全问题
  2. 有垃圾回收机制。

既然通过new关键字创建的对象都会保存在堆内存中,那么这是不是就意味着堆中只有new创建的对象呢

答案显然是错误的,我们看下图:

new的对象一般来说会放置在堆内存的新生代中,当然也可能会被直接放置在老年代当中,另外堆内存还有常量池,字符串常量池和运行时常量池等区域

所以,并不是堆中只有new创建的对象。

 

虚拟机栈和堆的关系:

 

堆内存溢出:

        我们通过上面的介绍了解了什么是堆,栈在使用的时候可能会存在许多问题,其中最常见的便是堆内存溢出,所谓的堆内存溢出是指,堆内存不够使用导致出现错误。

        导致栈内存溢出的方式:new对象多且没有被GC回收

我们可以使用参数 -Xmx 去调整JVM堆的大小。(默认20M堆内存)

 

new对象过多导致堆内存溢出:

 

堆内存诊断:

  1. jps工具 :查看当前系统有哪些java进程
  2. jmap工具:查看堆内存占用情况
  3. jconsole工具:图形界面,可以连续监测
  4. jvisualvm工具:图形界面,可以连续监测,可以dump堆数据,比jconsole工具功能更加丰富。

前面两种工具是控制台查看堆内存工具,使用的第三种jconsole图形化界面工具。

 

 

前面两种工具是控制台查看堆内存工具,使用的第四种jconsole图形化界面工具。

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值