1. 程式人生 > >JVM學習總結

JVM學習總結

出口 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學習總結