1.概述
首先参考现象:【Flink】Flink 写入 Clickhouse 大对象直接进入老年代 导致OOM
所谓的大对象是指,需要大量连续内存空间的Java对象
,最典型的大对象就是那种很长的字符串以及数组(笔者列出的例子中的byte[]数组就是典型的大对象)
。
大对象对虚拟机的内存分配来说就是一个坏消息(替Java虚拟机抱怨一句,比遇到一个大对象更加坏的消息就是遇到一群“朝生夕灭”的“短命大对象”,写程序的时候应当避免),经常出现大对象容易导致内存还有不少空间时就提前触发垃圾收集以获取足够的连续空间来“安置”它们
。
我们上述出现问题的案例就是设置了大对象导致的。
虚拟机提供了一个-XX:PretenureSizeThreshold
参数,令大于这个设置值的对象直接在老年代分配
。这样做的目的是避免在Eden区及两个Survivor区之间发生大量的内存复制(复