JVM學習總結
阿新 • • 發佈:2018-06-10
出口 p s png 錯誤 javah 數據區 rms over 分享
Java虛擬機運行時會把內存劃分為如下數據區域:
1.程序計數器:可以看作是當前程序執行字節碼的行號指示器,任何時候,一個處理器只會執行一條線程命令,所以每個線程都有一個獨立的程序計數器。
2.虛擬機棧:也是線程私有的,生命周期與線程相同。每個方法運行時都會創建一個棧幀用於存儲局部變量表、操作數棧、動態鏈接、方法出口等信息。
3.本地方法棧:與虛擬機棧類似,用於處理本地方法。
4.堆:是線程共享的,GC主要區域,存放對象實例和數組。
5.方法區:線程共享的,存儲虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯後的代碼等數據。運行時常量池也是方法區的一部分,用於存放編譯期間生成的各種字面量和符號引用。
6.直接內存:不是虛擬機運行時數據區的一部分。java NIO用到直接內存。
用於配置jvm的參數:
-Xms -Xmx:虛擬機堆的最小和最大值。
-Xss:設置虛擬機棧的容量。
-XX:PermSize -XX:MaxPermSize:配置方法區的大小
-XX:MaxDirectMemorySize:配置直接內存大小。
一般報OutOfMemoryError錯誤時候,後面如果JavaHeapspace 就是堆內存溢出,如果是StackOverflow則是棧內存溢出。
JVM學習總結