Coffey强
2021-07-05 21:48
采纳率: 100%
浏览 120
已结题

jvm垃圾回收时怎么判断大对象

如题目所示,永久代存放多次gc清理不掉的数据,还有就是大对象,jvm怎么判断大对象,

  • 收藏

4条回答 默认 最新

  • oNuoyi 2021-07-06 09:53
    已采纳

    可通过参数指定对象超过多少直接进入老年代 -XX:PretenureSizeThreshold=1M

    已采纳该答案
    打赏 评论
  • JolyouLu 2021-07-06 10:36

    MetaData Space(永久代) 是不存放大对象的哦,永久代在jdk1.8改名叫元空间,元空间使用的是直接内存不是jvm的内存,常量都保存在这
    你所说的应该是Old Generation(老年代)中的大对象把,大对象进入老年代有2种情况
    1.当对象在Survivor进行了15次(默认15次)Minor GC后对象还存在引用,那么这个对象就需要进入到老年代了
    2.另外一种情况那么就是分配担保机制,这种情况一般出现于大对象创建的时候,当在创建大对象时,恰好eden没有内存了,然后进行一次Minor GC发现Survior也存不下eden的大对象,这时就会触发分配担保机制直接将来eden无法存入Survior的对象丢到Old Generation中

    如果想了解跟多可以看一下我写的2篇博客哦
    JVM整体结构介绍
    JVM垃圾回收机制

    3 打赏 评论
  • jvm虽然能够垃圾自动回收机制,但并不能达到理想效果,所以正常情况下还是应该人工处理。

    打赏 评论
  • 咕泡-松阳 2021-07-26 13:53

    可以通过参数来定义大对象,当超过该大小的对象,直接进入老年代

    打赏 评论