JVM内存分为哪几部分?各个部分的作用是什么?
生活随笔
收集整理的這篇文章主要介紹了
JVM内存分为哪几部分?各个部分的作用是什么?
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
JVM內(nèi)存區(qū)域分為五個部分,分別是堆,方法區(qū),虛擬機棧,本地方法棧,程序計數(shù)器。
- 堆。 堆是Java對象的存儲區(qū)域,任何用new字段分配的Java對象實例和數(shù)組,都被分配在堆上,Java堆可使用-Xms -Xmx進行內(nèi)存控制,值得一提的是從JDK1.7版本之后,運行時常量池從方法區(qū)移到了堆上。
- 方法區(qū)。它用于存儲已被虛擬機加載的類信息,常量,靜態(tài)變量,即時編譯器編譯后的代碼等數(shù)據(jù),方法區(qū)在JDK1.7版本及以前被稱為永久代,從JDK1.8永久代被移除。
- 虛擬機棧。虛擬機棧中執(zhí)行每個方法的時候,都會創(chuàng)建一個棧幀用于存儲局部變量表,操作數(shù)棧,動態(tài)鏈接,方法出口等信息。
- 本地方法棧。與虛擬機棧發(fā)揮的作用相似,相比于虛擬機棧為Java方法服務(wù),本地方法棧為虛擬機使用的Native方法服務(wù),執(zhí)行每個本地方法的時候,都會創(chuàng)建一個棧幀用于存儲局部變量表,操作數(shù)棧,動態(tài)鏈接,方法出口等信息。
- 程序計數(shù)器。指示Java虛擬機下一條需要執(zhí)行的字節(jié)碼指令。
以上五個區(qū)域是Java虛擬機內(nèi)存劃分情況,其中方法區(qū)和堆被JVM中多個線程共享,比如類的靜態(tài)常量就被存放在方法區(qū),供類對象之間共享,虛擬機棧,本地方法棧,pc寄存器是每個線程獨立擁有的,不會與其他線程共享。
所以Java在通過new創(chuàng)建一個類對象實例的時候,一方面會在虛擬機棧中創(chuàng)建一個該對象的引用,另一方面會在堆上創(chuàng)建類對象的實例,然后將對象引用指向該對象的實例。對象引用存放在每一個方法對應(yīng)的棧幀中。
?
轉(zhuǎn)載于:https://www.cnblogs.com/LLD-3/p/9757708.html
總結(jié)
以上是生活随笔為你收集整理的JVM内存分为哪几部分?各个部分的作用是什么?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java编程基础25——多线程上
- 下一篇: git只合并某一个分支的某个commit