System.gc()由核心API调用

Sta*_*tas 12 java garbage-collection jvm

你们中的一些人可能知道一些核心java API会对System.gc()进行显式调用.发生这种情况时我知道两种情况:

  1. NIO.我相信,当系统耗尽"直接"内存时,可以对直接ByteBuffers进行一些清理.
  2. RMI.在这里,原因对我来说并不清楚......

所以,问题是:

  1. 知道为什么RMI需要System.gc()吗?
  2. 当核心API(甚至其他一些流行的库)可以直接调用System.gc()时,您是否知道其他任何情况?

Pet*_*rey 5

如果存在需要清理的分布式对象,RMI会调用System.gc().您可以减少频繁执行GC或有效关闭GC.

您可以通过调用避免直接ByteBuffer需要GC在Sun/Oracle JVM上清理它们

ByteBuffer bb = ByteBuffer.allocateDirect(SIZE);
((DirectBuffer) bb).cleaner().clean();
Run Code Online (Sandbox Code Playgroud)