我有一个 java 进程,它每 10 毫秒连续创建一个短暂的线程和一个短暂的直接字节缓冲区,这会占用系统内存。尽管字节缓冲区是短暂的,但它们并没有得到清理。我根导致了这个问题并添加了 maxDirectMemorySize 并且也添加maxCacheBufferSize
了,尽管它仍然表现出相同的行为。是因为maxCacheBufferSize
? 我的意思是每个线程都在分配一个直接内存,相当于maxCacheBufferSize
?
-XX:MaxDirectMemorySize=256M
-Djdk.nio.maxCachedBufferSize=262144
while(true) {
for (int i=0; i<100; i++) {
es.execute(() -> {
try {
ByteBuffer buffer = ByteBuffer.allocateDirect(2048);
Thread.sleep(10);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
});
}