欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

JAVA的內存是如何劃分的?

錢多多2年前15瀏覽0評論

謝邀~

關于JVM的知識,一直令很多Java程序員頭疼,不過JVM也是值得我們深入學習的內容,下面我就談談自己對JVM內存劃分的理解。

什么是Java的內存

學習Java的朋友應該都知道,Java程序是在JVM上運行的,所以我們一般談的Java內存劃分事實上都是指的JVM內存區域的劃分。在討論JVM內存劃分之前,我們需要知道Java程序的執行過程(手動畫圖,有點兒丑):

通過這個圖可以看到,JVM在執行Java程序的時候,要用到一塊空間來存儲運行期間用到的數據,這塊區域就是我們經常用的運行時區域,也就是常說的JVM內存。

Java的內存的組成

程序計數器(ProgramCounterRegister)、Java棧(VMStack)、本地方法棧(NativeMethodStack)、方法區(MethodArea)、堆(Heap)。

這個是Java虛擬機規范規定好的,但是具體怎么實現還是由廠商決定的。

運行的時候,每一個區域存的是什么數據的,先看一張圖:

  • 程序計數器

保存指令地址,也就是存的是下一條執行所在的存儲地址。如果是多線程的時候,因為一個CPU在一個時刻只能執行一條命令,為了能夠讓每一個線程在切換之后能夠恢復切換之前的位置,每個線程就需要有自己的計數器,所以說:程序計數器是每個線程私有的。

  • 虛擬機棧

就是Stack,存放的是一個個的棧幀,每個棧幀對應一個被調用的方法。在棧幀中存著局部變量表、操作數棧、指向當前方法所屬的類的運行時常量池的引用、方法返回地址和一些額外的附加信息。(這幾個東西都是干啥的,可以單獨寫篇文章說了...)

每個線程都會有一個自己的Java棧,也是線程私有的。

  • 本地方法棧

本地方法棧與Java棧的作用和原理非常相似。區別只不過是Java棧是為執行Java方法服務的,而本地方法棧則是為執行本地方法(NativeMethod)服務的。

在HotSopt虛擬機中直接就把本地方法棧和Java棧合二為一。

存儲對象本身的以及數組,堆是被所有線程共享的,在JVM中只有一個堆。

  • 方法區

存儲了每個類的信息(包括類的名稱、方法信息、字段信息)、靜態變量、常量以及編譯器編譯后的代碼等,也是被線程共享的。

Java內存區域劃分,是一個中高級程序員的必修課,希望我的回答能夠幫助到你!

我將持續分享Java開發、架構設計、程序員職業發展等方面的見解,希望能得到你的關注。