Java運行時內存模型(轉)

Java在運行時,可以根據聲明週期大致把內存分爲兩部分:與JVM聲明週期一致的內存,與線程生命週期一致的內存。根據Java虛擬機規範第二版,Java在運行時內存可以分爲以下6個部分:

  • PC計數器
  • 方法區
  • 運行時常量池
  • 本地方法棧

PC計數器

每個線程都有自己的PC計數器。在不是本地方法的時候,PC計數器始終記着下一條需要執行的指令。在執行本地方法的時候,PC計數器裏面是undefined。

每個線程對應着一個棧。棧(stack)是用來存儲幀(frame)的,棧只對幀進行pop和push的操作,每個方法對應一個幀。

堆(heap)的生命週期和JVM是一致的,所有的線程都可以共享堆。當堆裏面的東西沒有被引用時,垃圾回收器就會回收他們。

方法區

方法區也是和JVM的生命週期一致,邏輯上是堆的一部分。裏面存着每個class的數據,包括常量池,字段,方法等等。

運行時常量池

是方法區的一部分。存儲着類或者接口的常量。

本地方法棧

也就是在執行本地方法時所需的棧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章