需要占用大量连续内存空间的 jaa 对象是大对象,比如很长的字符串和数组。

理解误区:

  1. 需要占用大量非连续空间的 java 对象不能称为大对象
  2. 一个对象有很多属性也不能成为大对象

    为什么要这样呢?

    为了避免为大对象分配内存时的复制操作而降低效率。

    详情

    大对象就是指需要大量连续内存空间的 Java 对象,最典型的大对象便是那种很长的字符串,或者元素数量很庞大的数组,本节例子中的 byte [] 数组就是典型的大对象。
    大对象对虚拟机的内存分配来说就是一个不折不扣的坏消息,比遇到一个大对象更加坏的消息就是遇到一群 “朝生夕灭” 的 “短命大对象”,我们写程序的时候应注意避免。在 Java 虚拟机中要避免大对象的原因是,在分配空间时,它容易导致内存明明还有不少空间时就提前触发垃圾收集,以获取足够的连续空间才能安置好它们,而当复制对象时,大对象就意味着高额的内存复制开销。HotSpot 虚拟机提供了 -XX:PretenureSizeThreshold 参数,指定大于该设置值的对象直接在老年代分配,这样做的目的就是避免在Eden区及两个Survivor区 之间来回复制,产生大量的内存复制操作。