jvm記憶體,

來源:互聯網
上載者:User

jvm記憶體,

 

在牛客網看到有人總結的,感覺寫的不錯,記錄一下。

  大多數 JVM 將記憶體地區劃分為 Method Area(Non-Heap)(方法區) ,Heap(堆) , Program Counter Register(程式計數器) , VM Stack(虛擬機器棧,也有翻譯成JAVA 方法棧的),Native Method Stack ( 本地方法棧 ),其中Method Area 和 Heap 是線程共用的 ,VM Stack,Native Method Stack 和Program Counter Register 是非線程共用的。為什麼分為 線程共用和非線程共用的呢?請繼續往下看。

  首先我們熟悉一下一個一般性的 Java 程式的工作過程。一個 Java 來源程式檔案,會被編譯為位元組碼檔案(以 class 為副檔名),每個java程式都需要運行在自己的JVM上,然後告知 JVM 程式的運行入口,再被 JVM 通過位元組碼解譯器載入運行。那麼程式開始運行後,都是如何涉及到各記憶體地區的呢?

  概括地說來,JVM初始啟動並執行時候都會分配好 Method Area(方法區) 和Heap(堆) ,而JVM 每遇到一個線程,就為其分配一個 Program Counter Register(程式計數器) , VM Stack(虛擬機器棧)和Native Method Stack (本地方法棧), 當線程終止時,三者(虛擬機器棧,本地方法棧和程式計數器)所佔用的記憶體空間也會被釋放掉。這也是為什麼我把記憶體地區分為線程共用和非線程共用的原因,非線程共用的那三個地區的生命週期與所屬線程相同,而線程共用的地區與JAVA程式啟動並執行生命週期相同,所以這也是系統記憶體回收的場所只發生線上程共用的地區(實際上對大部分虛擬機器來說知發生在Heap上)的原因。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.