Java堆記憶體Heap與非堆記憶體Non-Heap
導讀 | Java 虛擬機器具有一個堆,堆是執行時資料區域,所有類例項和陣列的記憶體均從此處分配。堆是在 Java 虛擬機器啟動時建立的。”“在JVM中堆之外的記憶體稱為非堆記憶體(Non-heap memory)。 |
按照官方的說法:“Java 虛擬機器具有一個堆,堆是執行時資料區域,所有類例項和陣列的記憶體均從此處分配。堆是在 Java 虛擬機器啟動時建立的。”“在JVM中堆之外的記憶體稱為非堆記憶體(Non-heap memory)”。可以看出JVM主要管理兩種型別的記憶體:堆和非堆。簡單來說堆就是Java程式碼可及的記憶體,是留給開發人員使用的;非堆就是JVM留給 自己用的,所以方法區、JVM內部處理或最佳化所需的記憶體(如JIT編譯後的程式碼快取)、每個類結構(如執行時常數池、欄位和方法資料)以及方法和構造方法 的程式碼都在非堆記憶體中。
JVM初始分配的記憶體由-Xms指定,預設是實體記憶體的1/64;JVM最大分配的記憶體由-Xmx指 定,預設是實體記憶體的1/4。預設空餘堆記憶體小於40%時,JVM就會增大堆直到-Xmx的最大限制;空餘堆記憶體大於70%時,JVM會減少堆直到 -Xms的最小限制。因此伺服器一般設定-Xms、-Xmx相等以避免在每次GC 後調整堆的大小。
JVM使用-XX:PermSize設定非堆記憶體初始值,預設是實體記憶體的1/64;由XX:MaxPermSize設定最大非堆記憶體的大小,預設是實體記憶體的1/4。
JVM記憶體限制(最大值)
首先JVM記憶體限制於實際的最大實體記憶體(廢話!呵呵),假設實體記憶體無限大的話,JVM記憶體的最大值跟作業系統有很大的關係。簡單的說就32位處理器雖然 可控記憶體空間有4GB,但是具體的作業系統會給一個限制,這個限制一般是2GB-3GB(一般來說Windows系統下為1.5G-2G,
下為2G-3G),而64bit以上的處理器就不會有限制了。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2902768/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [轉載] Java直接記憶體與堆記憶體Java記憶體
- java 堆外記憶體排查Java記憶體
- jvm 堆記憶體JVM記憶體
- Java堆外直接記憶體回收Java記憶體
- JS中的棧記憶體、堆記憶體JS記憶體
- 直接記憶體和堆記憶體誰快記憶體
- NameNode堆記憶體估算記憶體
- JAVA堆外記憶體排查小結Java記憶體
- 深入理解Java的堆記憶體和執行緒記憶體Java記憶體執行緒
- JVM堆記憶體詳解JVM記憶體
- Java直接(堆外)記憶體使用詳解Java記憶體
- 【JVM之記憶體與垃圾回收篇】堆JVM記憶體
- 託管堆記憶體佔用記憶體
- JVM 堆記憶體設定原理JVM記憶體
- eclipse設定JVM記憶體堆EclipseJVM記憶體
- 模擬實戰排查堆記憶體溢位(java.lang.OutOfMemoryError: Java heap space)問題記憶體溢位JavaError
- JVM堆外記憶體問題排查JVM記憶體
- jvm堆記憶體和GC簡介JVM記憶體GC
- 探索JVM的垃圾回收(堆記憶體)JVM記憶體
- Java堆疊的深度分析及記憶體管理技巧Java記憶體
- netty 堆外記憶體洩露排查盛宴Netty記憶體洩露
- JS中堆疊記憶體的練習JS記憶體
- windows核心程式設計--記憶體堆疊Windows程式設計記憶體
- javascript堆疊記憶體分配的區別JavaScript記憶體
- Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)RedisError記憶體溢位
- project中的堆疊記憶體,記憶體地址引用,gc相關問題Project記憶體GC
- 記一次堆外記憶體洩漏分析記憶體
- Java記憶體區域總結(堆、棧、方法區等)Java記憶體
- 【JVM】堆體系結構及其記憶體調優JVM記憶體
- 從記憶體洩露、記憶體溢位和堆外記憶體,JVM優化引數配置引數記憶體洩露記憶體溢位JVM優化
- 堆外記憶體及其在 RxCache 中的使用記憶體
- JavaScript中記憶體使用規則--堆和棧JavaScript記憶體
- Linux堆記憶體管理深入分析(下半部)Linux記憶體
- 堆疊和記憶體的關係 細說記憶體
- Netty基礎系列(4) --堆外記憶體與零拷貝Netty記憶體
- 記一次堆外記憶體洩漏排查過程記憶體
- MAT工具定位分析Java堆記憶體洩漏問題方法Java記憶體
- 關於JVM堆外記憶體的一切JVM記憶體