MaxDirectMemorySize
-
DirectByteBuffer对象会关联一段堆外内存
-
Java层面每次分配堆外内存之前都会检查一下之前已经分配的堆外内存大小和这次申请要分配的堆外内存大小之和是否会比MaxDirectMemorySize这个阈值要大,一旦超过就会发生System.gc()
-
DirectByteBuffer如果从native层面创建是可以绕过堆外内存大小的check
-
-Dsun.nio.MaxDirectMemorySize无法覆盖MaxDirectMemorySize的值
-
MaxDirectMemorySize默认的大小是Xmx-S0的值
-
建议不要关闭System.gc的执行(通过参数-XX:+DisableExplicitGC会关闭该能力,默认是没有关闭的)