1. 程式人生 > >netty和jvm 虛擬機參數的 XX:+DisableExplicitGC 註意事項

netty和jvm 虛擬機參數的 XX:+DisableExplicitGC 註意事項

nat 釋放 mod 區域 內存溢出 () 註意事項 關聯 -a

在使用netty時,經常出現內存溢出,經查詢是這個坑:

netty 使用的nio 和 jvm 中的 XX:+DisableExplicitGC配置的沖突導致的,具體經過:nio 使用直接內存區域 Direct Memory內存回收和其他內存回收有點區別。Java堆內放置的是direct memory 引用,正常情況下當在young gc 的時候會把這個已死的引用回收,進而也回收了native memory 區域 , 但是有些移動到old gen區中的,在沒有發生full gc時候這個對象一直沒有被回收,然後direct memory 應該會累積。

另外當在為DirectByteBuffer分配空間過程中發現直接內存不足時會顯式調用System.gc(),以期通過full GC來強迫已經無用的DirectByteBuffer對象釋放掉它們關聯的native memory , 這個可以從java.nio的源碼中可以分析到(DirectByteBuffer .class Bits.class)

netty和jvm 虛擬機參數的 XX:+DisableExplicitGC 註意事項