Java堆外直接記憶體回收
JVM引數設定:-XX:MaxDirectMemorySize=20M
import java.nio.ByteBuffer;
import sun.nio.ch.DirectBuffer;
public class DirectMemoryOOM {
public static void main(String[] args) {
ByteBuffer buffer = null;
try {
long startTime=System.currentTimeMillis();
for(int i=0;i<100;i++){
buffer = ByteBuffer.allocateDirect(1024 * 1024 * 15);
clean(buffer);
}
long endTime=System.currentTimeMillis();
System.out.println("程式執行時間: "+(endTime-startTime)+“ms”);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void clean(final ByteBuffer byteBuffer) {
if (byteBuffer.isDirect()) {
((DirectBuffer)byteBuffer).cleaner().clean();
}
}
}
測試1:
未加clean程式執行時間: 12116ms
加clean程式執行時間: 538ms
測試2:
把程式碼改為
buffer = ByteBuffer.allocateDirect(1024 * 1024 * 15);
未加clean會產生直接記憶體溢位:java.lang.OutOfMemoryError: Direct buffer memory
加clean不會產生記憶體溢位。
相關文章
- Java直接(堆外)記憶體使用詳解Java記憶體
- [轉載] Java直接記憶體與堆記憶體Java記憶體
- java 堆外記憶體排查Java記憶體
- 直接記憶體和堆記憶體誰快記憶體
- JAVA堆外記憶體排查小結Java記憶體
- 探索JVM的垃圾回收(堆記憶體)JVM記憶體
- 一文探討堆外記憶體的監控與回收記憶體
- 【JVM之記憶體與垃圾回收篇】堆JVM記憶體
- Java堆記憶體Heap與非堆記憶體Non-HeapJava記憶體
- JVM堆外記憶體問題排查JVM記憶體
- Java記憶體管理 -JVM 垃圾回收Java記憶體JVM
- netty 堆外記憶體洩露排查盛宴Netty記憶體洩露
- Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)RedisError記憶體溢位
- 直接記憶體記憶體
- 記一次堆外記憶體洩漏分析記憶體
- 堆外記憶體及其在 RxCache 中的使用記憶體
- jvm 堆記憶體JVM記憶體
- 深入理解Java的堆記憶體和執行緒記憶體Java記憶體執行緒
- Java記憶體模型,垃圾回收機制,常用記憶體命令及工具Java記憶體模型
- 關於JVM堆外記憶體的一切JVM記憶體
- 使用mtrace追蹤JVM堆外記憶體洩露JVM記憶體洩露
- JS中的棧記憶體、堆記憶體JS記憶體
- 記一次堆外記憶體洩漏排查過程記憶體
- 從記憶體洩露、記憶體溢位和堆外記憶體,JVM優化引數配置引數記憶體洩露記憶體溢位JVM優化
- NameNode堆記憶體估算記憶體
- 記憶體回收介紹記憶體
- Java進階10 記憶體管理與垃圾回收Java記憶體
- JVM原始碼分析之堆外記憶體完全解讀JVM原始碼記憶體
- Java堆疊的深度分析及記憶體管理技巧Java記憶體
- JVM堆記憶體詳解JVM記憶體
- 【高頻Java面試題】簡單說說JVM堆的記憶體結構和GC回收流程Java面試題JVM記憶體GC
- Netty基礎系列(4) --堆外記憶體與零拷貝Netty記憶體
- 一次尋常的堆外記憶體洩漏排查記憶體
- Java虛擬機器記憶體分配與回收策略Java虛擬機記憶體
- js記憶體回收機制JS記憶體
- JVM記憶體回收機制——哪些記憶體需要被回收(JVM學習系列2)JVM記憶體
- Java記憶體區域總結(堆、棧、方法區等)Java記憶體
- JVM垃圾回收器、記憶體分配與回收策略JVM記憶體