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記憶體
- JAVA的堆疊和記憶體、垃圾回收解說Java記憶體
- 探索JVM的垃圾回收(堆記憶體)JVM記憶體
- 一文探討堆外記憶體的監控與回收記憶體
- 【JVM之記憶體與垃圾回收篇】堆JVM記憶體
- Netty之Java堆外記憶體掃盲貼NettyJava記憶體
- Java堆記憶體Heap與非堆記憶體Non-HeapJava記憶體
- Java 堆疊記憶體分配Java記憶體
- java記憶體垃圾回收模型Java記憶體模型
- JVM堆外記憶體問題排查JVM記憶體
- java棧記憶體和堆記憶體的詮釋Java記憶體
- Java記憶體管理 -JVM 垃圾回收Java記憶體JVM
- Java的記憶體回收機制Java記憶體
- Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)RedisError記憶體溢位
- 記一次堆外記憶體洩漏分析記憶體
- 直接記憶體記憶體
- 圖解Java記憶體回收機制圖解Java記憶體
- netty 堆外記憶體洩露排查盛宴Netty記憶體洩露
- 堆外記憶體及其在 RxCache 中的使用記憶體
- 什麼是堆外記憶體off-heap記憶體
- 記憶體堆疊記憶體
- 深入理解Java的堆記憶體和執行緒記憶體Java記憶體執行緒
- Java記憶體模型,垃圾回收機制,常用記憶體命令及工具Java記憶體模型
- 關於JVM堆外記憶體的一切JVM記憶體
- 使用mtrace追蹤JVM堆外記憶體洩露JVM記憶體洩露
- JS中的棧記憶體、堆記憶體JS記憶體
- 記一次堆外記憶體洩漏排查過程記憶體
- 從記憶體洩露、記憶體溢位和堆外記憶體,JVM優化引數配置引數記憶體洩露記憶體溢位JVM優化
- NameNode堆記憶體估算記憶體
- 記憶體回收介紹記憶體
- 哪個更快:Java堆還是本地記憶體Java記憶體
- JVM原始碼分析之堆外記憶體完全解讀JVM原始碼記憶體
- Java進階10 記憶體管理與垃圾回收Java記憶體
- 【高頻Java面試題】簡單說說JVM堆的記憶體結構和GC回收流程Java面試題JVM記憶體GC