JVM內存分為哪幾部分?各個部分的作用是什么?


JVM內存區域分為五個部分,分別是堆,方法區,虛擬機棧,本地方法棧,程序計數器。

  • 堆。 堆是Java對象的存儲區域,任何用new字段分配的Java對象實例和數組,都被分配在堆上,Java堆可使用-Xms -Xmx進行內存控制,值得一提的是從JDK1.7版本之后,運行時常量池從方法區移到了堆上。
  • 方法區。它用於存儲已被虛擬機加載的類信息,常量,靜態變量,即時編譯器編譯后的代碼等數據,方法區在JDK1.7版本及以前被稱為永久代,從JDK1.8永久代被移除。
  • 虛擬機棧。虛擬機棧中執行每個方法的時候,都會創建一個棧幀用於存儲局部變量表,操作數棧,動態鏈接,方法出口等信息。
  • 本地方法棧。與虛擬機棧發揮的作用相似,相比於虛擬機棧為Java方法服務,本地方法棧為虛擬機使用的Native方法服務,執行每個本地方法的時候,都會創建一個棧幀用於存儲局部變量表,操作數棧,動態鏈接,方法出口等信息。
  • 程序計數器。指示Java虛擬機下一條需要執行的字節碼指令。
    以上五個區域是Java虛擬機內存划分情況,其中方法區和堆被JVM中多個線程共享,比如類的靜態常量就被存放在方法區,供類對象之間共享,虛擬機棧,本地方法棧,pc寄存器是每個線程獨立擁有的,不會與其他線程共享。
    所以Java在通過new創建一個類對象實例的時候,一方面會在虛擬機棧中創建一個該對象的引用,另一方面會在堆上創建類對象的實例,然后將對象引用指向該對象的實例。對象引用存放在每一個方法對應的棧幀中。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM