Java程序運行時內存劃分

1.Java程序跨平臺運行的緣由編程

主要緣由是:各類平臺的JVM和字節碼文件數組

Java源程序--具體平臺的機器代碼文件---被編譯器翻譯成平臺無關的Class文件,又用特定JVM運行字節碼文件,JVM在運行的過程當中編程語言

將字節碼指令轉換爲具體平臺的機器指令。JVM運行在用戶態,操做系統將JVM看做是一個特殊的軟件,JVM啓動的時候,OS給其劃分操作系統

必定的內存供其運行字節碼文件。存在基於JVM的其餘編程語言的緣由:對應特定語言的編譯器能夠將源碼翻譯成字節碼文件,這個字節碼能夠被JVM識別並執行。線程

 

注意:執行引擎其實就是一系列的方法組成的流程---對應的就是線程,JVM執行字節碼指令是基於棧的,全部操做數入棧。翻譯

Java的線程是用戶態線程,線程狀態改變維護都在用戶態。3d

2.Java程序運行時內存區域劃分對象

進行內存區域劃分是由誰完成的---JVM完成,它將從操做系統得到內存,按照數據的存儲結構模擬實際機器對內存進行劃分。blog

將內存劃分爲如下幾個區域:內存

  PC:字節碼解釋器經過PC的值找到下條要執行的字節碼指令---線程私有

  虛擬機棧:存儲Java方法的局部變量和參數,屬於線程私有

  本地方法棧:存儲JVM使用到的本地方法相關的局部變量和參數,線程私有

  堆:存儲new產生的對象以及數組,是JVM垃圾回收的主要區域,線程共享

  方法區:存儲類信息、常量、靜態變量等,線程共享

  運行時常量池:存放在執行過程當中生成的常量,屬於方法區的一部分

相關文章
相關標籤/搜索