1. 程式人生 > >本地直接記憶體溢位

本地直接記憶體溢位

DirectMemory容量可通過-xx:MaxDirectMemorySize指定,如果不指定,則預設與java懟最大值(-Xmx指定)一樣,下面的程式碼中越過了DirectByteBuffer類,直接通過反射獲取Unsafe例項進行記憶體分配(Usafe類的getUSafe()方法限制了只有引導載入器才會返回一例項,也就是設計者希望只有rt.jar中的類才能使用Unsafe的功能),因為,雖然使用DirectByteBuffer分配記憶體也會丟擲記憶體異常,但它能丟擲異常時並沒有真正向作業系統申請分配記憶體,而是通過計算器得知記憶體無法分配,於是手動丟擲異常,真正申請分配記憶體的方法是Unsafe.allocateMemory().
在這裡插入圖片描述


在這裡插入圖片描述