三、堆内存模型

在这里插入图片描述
JVM的垃圾收集指的是堆内存空间,那么在每次GC的时候需要区分出那些堆内存空间需要被回收,那些不应该被回收。所以,为了回收整体处理方便,JVM将堆内存分为如下的几个组成部分。这几个组成部分还需要考虑JDK的版本,JDK1.8以前和JDK1.8以后的问题。
JDK1.8以前

  • 新生代:那些刚刚创建的对象有可能会存在许多垃圾对象,那么这些对象应该是被优先回收

  • 老年代:老不死的那类对象,就是经过很多次的清理之后,发现该对象依然有用

    举个例子,今天打扫卫生会看桌子上的哪本书有用那本书没有用吗?不会的。当你将桌子上的笔削和纸呀扫一扫就叫新生代回收。当你收拾很多次后,依然保留的东西就叫老年代。当你要搬家了,发现这些老年代还是没有用的时候,再次做清理,就叫老年代的清理。
    从这个例子也可以看出来,年轻代、新生代和老年代的清理,对象回收是不同的。

  • 永久代:intern()方法进行入池的对象,实际上就在永久代中,永久代不会被回收,除非JVM死机。可以发现永久代是个bug性的存在,所以在JDK1.8之后将其更换为元空间(电脑的直接内存,举例说一台电脑有100G内存,80G给堆内存,剩下的20G都是元空间的了)
    JDK1.8以后
    在整个内存的组成过程中,每一代的内存空间都会有个伸缩区,那么该区域就可以由JVM根据使用情况动态扩充。

    举个例子,现在桌子上摆满了书,我没有地方摆了,我发现对面还有桌子,我要把一些我没有用的东西放到对面桌子上,这样才能倒腾出一个新的地方放新的书,那么在倒腾过程中,是不是需要判断有地儿吗?有,挪;有地儿吗?有,挪,有地儿吗?有,再挪。
    再比如,如果现在告诉我,不用再挪了,给我开的空间足够大,大到伸缩区都可以开到内存里去,那性能会提高很多。

当我们合理设置了伸缩区的大小之后,那么就可以得到良好的性能提升,也就是说最容易的性能提升就是改变伸缩区的内存大小设置。

其实,学习JVM的垃圾回收,目的就是为了让JVM在电脑上发挥它的性能优势。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值