精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試官:說下你對方法區演變過程和內部結構的理解

開發 前端
雖然 Java 虛擬機規范把方法區描述為堆的一個邏輯部分,但是它卻有一個別名叫做 Non-Heap(非堆),目的應該是與 Java 堆區分開來。所以,方法區可以看作是一塊獨立于 Java 堆的內存空間。

[[425846]]

之前我們已經了解過“運行時數據區”的程序計數器、虛擬機棧、本地方法棧和堆空間,今天我們就來了解一下最后一個模塊——方法區。

簡介

創建對象時內存分配簡圖

《Java虛擬機規范》中明確說明:“盡管所有的方法區在邏輯上屬于堆的一部分,但一些簡單的實現可能不會選擇去進行垃圾收集或者進行壓縮。”

雖然 Java 虛擬機規范把方法區描述為堆的一個邏輯部分,但是它卻有一個別名叫做 Non-Heap(非堆),目的應該是與 Java 堆區分開來。所以,方法區可以看作是一塊獨立于 Java 堆的內存空間。

方法區與 Java 堆一樣,是各個線程共享的內存區域。方法區在 JVM 啟動時就會被創建,并且它的實際的物理內存空間是可以不連續的,關閉 JVM 就會釋放這個區域的內存。

永久代、元空間

《java虛擬機規范》對如何實現方法區,不做統一要求。例如:BEA JRockit/IBM J9 中不存在永久代的概念。而對于 HotSpot 來說,在 jdk7 及以前,習慣上把方法區的實現稱為永久代,而從 jdk8 開始,使用元空間取代了永久代。

方法區是 Java 虛擬機規范中的概念,而永久代和元空間是 HotSpot 虛擬機對方法區的一種實現。通俗點講:如果把方法區比作接口的話,那永久代和元空間可以比作實現該接口的實現類。

直接內存

永久代、元空間并不只是名字變了,內部結構也進行了調整。永久代使用的是 JVM 的內存,而元空間使用的是本地的直接內存。

直接內存并不是 JVM 運行時數據區的一部分,因此不會受到 Java 堆的限制。但是它會受到本機總內存大小以及處理器尋址空間的限制,所以如果這部分內存也被頻繁的使用,依然會導致 OOM 錯誤的出現。

方法區的大小

方法區的大小是可以進行設置的,可以選擇固定大小也可以進行擴展。

jdk7 及以前

  1. -XX:PermSize=N //方法區 (永久代) 初始分配空間,默認值為 20.75M 
  2. -XX:MaxPermSize=N //方法區 (永久代) 最大可分配空間。32位機器默認是64M,64位機器默認是82M 

jdk8及以后

默認值依賴于平臺,windows下:

  1. -XX:MetaspaceSize=N //方法區 (元空間) 初始分配空間,如果未指定此標志,則元空間將根據運行時的應用程序需求動態地重新調整大小。 
  2. -XX:MaxMetaspaceSize=N //方法區 (元空間) 最大可分配空間,默認值為 -1,即沒有限制 

與永久代很大的不同就是,如果不指定大小的話,隨著更多類的創建,虛擬機會耗盡所有可用的系統內存。

方法區的大小決定了系統可以保存多少個類,如果系統定義了太多的類,比如:加載大量的第三方 jar 包、Tomcat 部署的工程過多、大量動態生成反射類等都會導致方法區溢出,拋出內存溢出錯誤。

  • 永久代:OutOfMemoryError:PermGen space
  • 元空間:OutOfMemoryError:Metaspace

至于如何解決 OOM 異常,將在以后的文章中講解!

jvisualvm

我們可以通過 JDK 自帶的 jvisualvm 工具來查看程序加載的類文件:

  1. public class MethodAreaDemo1 { 
  2.     public static void main(String[] args) { 
  3.         System.out.println("start..."); 
  4.         try { 
  5.             Thread.sleep(1000000); 
  6.         } catch (InterruptedException e) { 
  7.             e.printStackTrace(); 
  8.         } 
  9.         System.out.println("end..."); 
  10.     } 

運行程序,可以看到一個簡單的程序就需要加載這么多的類文件。

高水位線

對于一個64位的服務器端 JVM 來說,XX:MetaspaceSize=21 就是初始的高水位線,一旦觸及這個水位線,Full GC 將會被觸發并卸載沒用的類(即這些類對應的類加載器不再存活),然后這個高水位線將會重置。

新的高水位線的值取決于 GC 后釋放了多少元空間:

  • 如果釋放的空間不足,那么在不超過 MaxMetaspaceSize 時,適當提高該值;
  • 如果釋放空間過多,則適當降低該值。

如果初始化的高水位線設置過低,高水位線調整情況會發生很多次。通過垃圾回收器的日志可以觀察到 Full GC 多次調用。為了避免頻繁地GC,建議將 -XX :MetaspaceSize 設置為一個相對較高的值。

內部結構

《深入理解Java虛擬機》書中對方法區存儲內容描述如下:它用于存儲已被虛擬機加載的類型信息、常量、靜態變量、即時編譯器編譯后的代碼緩存等。接下來我們就一起來看一下它的內部結構。

類型信息

對每個加載的類型( 類 class、接口 interface、枚舉 enum、注解 annotation),JVM 必須在方法區中存儲以下類型信息:

這個類型的完整有效名稱(全名=包名.類名)

這個類型直接父類的完整有效名(對于 interface 或是 java. lang.Object ,都沒有父類)

這個類型的修飾符( public , abstract, final 的某個子集)

這個類型直接接口的一個有序列表

域(Field)信息

  1. JVM必須在方法區中保存類型的所有域(field,也稱為屬性)的相關信息以及域的聲明順序;
  2. 域的相關信息包括:域名稱、 域類型、域修飾符(public, private,protected, static, final, volatile, transient 的某個子集)

方法(Method)信息

JVM 必須保存所有方法的以下信息,同域信息一樣包括聲明順序:

  • 方法名稱
  • 方法的返回類型(或void)
  • 方法參數的數量和類型(按順序)
  • 方法的修飾符(public, private, protected, static, final,synchronized, native , abstract 的一個子集)
  • 方法的字節碼(bytecodes)、操作數棧、局部變量表及大小( abstract 和 native 方法除外)
  • 異常表( abstract 和 native 方法除外)每個異常處理的開始位置、結束位置、代碼處理在程序計數器中的偏移地址、被捕獲的異常類的常量池索引

non-final 的類變量

  • 靜態變量和類關聯在一起,隨著類的加載而加載,他們成為類數據在邏輯上的一部分
  • 類變量被類的所有實例所共享,即使沒有類實例你也可以訪問它。

我們可以通過例子來查看:

  1. public class MethodAreaDemo2 { 
  2.     public static void main(String[] args) { 
  3.         Order order = null
  4.         order.hello(); 
  5.         System.out.println(order.count); 
  6.     } 
  7.  
  8. class Order { 
  9.     public static int count = 1; 
  10.     public static final int number = 2; 
  11.  
  12.     public static void hello() { 
  13.         System.out.println("hello!"); 
  14.     } 

運行結果為:

  1. hello! 

可以打開 IDEA 的 Terminal 窗口,在 MethodAreaDemo2.class 所在的路徑下,輸入 javap -v -p MethodAreaDemo2.class 命令

通過圖片我們可以看出被聲明為 final 的類變量的處理方法是不一樣的,全局常量在編譯的時候就被分配了。

運行時常量池

說到運行時常量池,我們先來了解一下什么是常量池表。

常量池表

一個有效的字節碼文件中除了包含類的版本信息、字段、方法以及接口等描述信息外,還包含一項信息那就是常量池表(Constant Pool Table),里邊存儲著數量值、字符串值、類引用、字段引用和方法引用。

為什么字節碼文件需要常量池?

java 源文件中的類、接口,編譯后會產生一個字節碼文件。而字節碼文件需要數據支持,通常這種數據會很大,以至于不能直接存放到字節碼中。換一種方式,可以將指向這些數據的符號引用存到字節碼文件的常量池中,這樣字節碼只需使用常量池就可以在運行時通過動態鏈接找到相應的數據并使用。

運行時常量池

運行時常量池( Runtime Constant Pool)是方法區的一部分,類加載器加載字節碼文件時,將常量池表加載進方法區的運行時常量池。運行時常量池中包含多種不同的常量,包括編譯期就已經明確的數值字面量,也包括到運行期解析后才能夠獲得的方法或者字段引用。此時不再是常量池中的符號地址了,這里換為真實地址。

運行時常量池,相對于 Class 文件常量池的另一重要特征是:具備動態性,比如 String.intern()。

演進細節

針對的是 Hotspot 的虛擬機:

  • jdk1.6 及之前:有永久代 ,靜態變量存放在永久代上;
  • jdk1.7:有永久代,但已經逐步“去永久代”,字符串常量池、靜態變量移除,保存在堆中;
  • jdk1.8及之后:無永久代,類型信息、字段、方法、常量保存在本地內存的元空間,但字符串常量池、靜態變量仍在堆中;

演變示例圖

為什么要將永久代替換為元空間呢?

永久代使用的是 JVM 的內存,受 JVM 設置的內存大小限制;元空間使用的是本地直接內存,它的最大可分配空間是系統可用內存的空間。因為元空間里存放的是類的元數據,所以隨著內存空間的增大,能加載的類就更多了,相應的溢出的機率會大大減小。

在 JDK8,合并 HotSpot 和 JRockit 的代碼時,JRockit 從來沒有一個叫永久代的東西,合并之后就沒有必要額外的設置這么一個永久代的地方了。

對永久代進行調優是很困難的。

StringTable 為什么要調整

因為永久代的回收效率很低,在 full gc 的時候才會觸發。而 full GC 是老年代的空間不足、永久代不足時才會觸發。這就導致了StringTable 回收效率不高。而我們開發中會有大量的字符串被創建,回收效率低,導致永久代內存不足。放到堆里,能及時回收內存。

垃圾回收

相對而言,垃圾收集行為在這個區域是比較少出現的,但并非數據進入方法區后就“永久存在”了。方法區的垃圾收集主要回收兩部分內容:常量池中廢奔的常量和不再使用的類型。

方法區內常量池中主要存放字面量和符號引用兩大類常量:

  • 字面量比較接近 Java 語言層次的常量概念,如文本字符串、被聲明為 final 的常量值等。
  • 符號引用則屬于編譯原理方面的概念,包括類和接口的全限定名、字段的名稱和描述符、方法的名稱和描述符。

HotSpot 虛擬機對常量池的回收策略是很明確的,只要常量池中的常量沒有被任何地方引用,就可以被回收。

類型判定

判定一個常量是否“廢棄”還是相對簡單,而要判定一個類型是否屬于“不再被使用的類”的條件就比較苛刻了。需要同時滿足下面三個條件:

  • 該類所有的實例都已經被回收,也就是 Java 堆中不存在該類及其任何派生子類的實例;
  • 加載該類的類加載器已經被回收,這個條件除非是經過精心設計的可替換類加載器的場景,如OSGi、JSP的重加載等,否則通常是很難達成的;
  • 該類對應的 java.lang.Class 對象沒有在任何地方被引用,無法在任何地方通過反射訪問該類的方法。

Java 虛擬機被允許對滿足上述三個條件的無用類進行回收,這里說的僅僅是“被允許”,而并不是和對象一樣,沒有引用了就必然會回收。

本文轉載自微信公眾號「阿Q說代碼」,可以通過以下二維碼關注。轉載本文請聯系阿Q說代碼公眾號。

 

責任編輯:武曉燕 來源: 阿Q說代碼
相關推薦

2025-01-13 09:24:32

2025-03-07 00:00:10

2020-05-12 23:20:50

Tomcat內部結構

2019-07-26 06:42:28

PG架構數據庫

2021-11-25 10:18:42

RESTfulJava互聯網

2021-08-09 07:47:40

Git面試版本

2024-09-27 15:43:52

零拷貝DMAIO

2020-06-12 15:50:56

options前端服務器

2020-12-01 08:47:36

Java異常開發

2025-02-21 15:25:54

虛擬線程輕量級

2025-03-21 00:00:05

Reactor設計模式I/O 機制

2024-10-24 16:14:43

數據傳輸CPU零拷貝

2025-08-18 00:00:00

零拷貝系統調用函數

2022-03-21 09:05:18

volatileCPUJava

2015-08-13 10:29:12

面試面試官

2024-09-25 12:26:14

2021-03-05 07:27:59

技術架構演變

2021-11-11 16:37:05

模板模式方法

2024-07-25 18:20:03

2025-04-09 00:00:00

點贊
收藏

51CTO技術棧公眾號

爱情岛论坛亚洲自拍| 岛国一区二区三区高清视频| 国产亚洲精品熟女国产成人| 国产成+人+综合+亚洲欧美| 国产精品久久久久久久久久久免费看| 999久久久| 国产欧美一区二区三区在线看蜜臂| 精品国产乱码久久久久久果冻传媒| 欧美中文字幕亚洲一区二区va在线| 免费在线精品视频| 欧美一级淫片aaaaaa| 热久久久久久久| 欧美精品福利在线| 麻豆视频免费在线播放| 麻豆一区一区三区四区| 欧美日韩的一区二区| 久久国产精品视频在线观看| 秋霞午夜在线观看| 91老师片黄在线观看| 91精品免费视频| 波多野结衣高清视频| 欧美日本国产| 日韩在线观看成人| 亚洲精品理论片| 中文字幕日韩在线| 欧美丝袜丝交足nylons| 鲁一鲁一鲁一鲁一色| 国产在线观看av| 久久久欧美精品sm网站| 国产福利久久| 国产农村妇女毛片精品久久| 天堂久久久久va久久久久| 欧美精品久久久久| 四虎影院中文字幕| 99久久精品国产亚洲精品| 亚洲免费人成在线视频观看| 91亚洲一线产区二线产区| 欧美黄色网络| 欧美性色aⅴ视频一区日韩精品| 国产一区二区三区小说| 中文字幕中文字幕在线中高清免费版| 欧美国产在线观看| 日本精品国语自产拍在线观看| 天堂中文在线看| 丁香六月久久综合狠狠色| 91手机在线视频| 国产女人18毛片18精品| 精品一区二区三区在线播放| 国产美女久久精品| 亚洲天堂网视频| 美女一区二区久久| 国产精品视频一区二区三区四| 日韩精品一区二区亚洲av观看| 国产农村妇女精品一区二区| 97av在线视频| 国产高清中文字幕| 日韩精品一区第一页| 热草久综合在线| 秋霞av一区二区三区| 亚洲自啪免费| 国产成人精品免高潮费视频| 在线免费观看av网址| 人人超碰91尤物精品国产| 国产精品免费网站| 91午夜交换视频| 极品美女销魂一区二区三区免费| 成人精品在线视频| 国产99久一区二区三区a片| 国产精品自产自拍| 亚洲一区二区免费| 亚洲欧美国产高清va在线播放| 粉嫩av亚洲一区二区图片| 国产美女99p| 欧美成人片在线| 国产精品视频免费看| 在线成人性视频| 欧美人与性动交α欧美精品济南到| 亚洲一级二级在线| 久久精品99国产| 另类一区二区| 精品国偷自产国产一区| 大黑人交xxx极品hd| 成人激情视频| 欧美久久精品一级黑人c片| 伊人365影院| 丝袜美腿亚洲综合| 成人激情综合网| 污污视频在线免费看| 国产日韩欧美在线一区| 在线观看18视频网站| 九色porny丨首页入口在线| 色老综合老女人久久久| www.成年人| 人妖一区二区三区| 久久精品成人一区二区三区 | 国产99久久精品一区二区300| 国产亚洲精品日韩| 三级影片在线看| 久久狠狠婷婷| 91黄色国产视频| 蜜桃视频在线入口www| 亚洲日本va在线观看| 精品视频在线观看一区| 国产精品无码久久久久| 日韩激情av在线免费观看| 免费黄在线观看| 伊人成人网在线看| 成人激情在线观看| 国产区高清在线| 亚洲一区视频在线| 日本不卡一区二区在线观看| 偷拍视屏一区| 欧美大片在线影院| 亚洲图片欧美在线| 久久久久久一级片| 青青草精品视频在线| 亚洲精品成人一区| 亚洲性无码av在线| 日韩特黄一级片| 国产黑丝在线一区二区三区| 神马影院一区二区三区| 国产激情在线播放| 欧美大片拔萝卜| а天堂中文在线资源| 国产精品夜夜夜| 成人免费在线看片| 黄色成年人视频在线观看| 一本色道久久综合亚洲aⅴ蜜桃| 国产又黄又嫩又滑又白| 天天操综合网| 国产精品久久久久久中文字| 伦理片一区二区三区| 精品欧美一区二区三区| 午夜男人的天堂| 好吊一区二区三区| 999视频在线免费观看| 欧美另类极品| 欧美日韩一区久久| 色偷偷男人天堂| 美女网站视频久久| 日韩亚洲欧美精品| 欧美123区| 亚洲天堂第一页| 亚洲精品久久久久久久久久| 国产视频视频一区| 中国丰满人妻videoshd| 久久动漫网址| 国内成人精品一区| 人妻一区二区三区四区| 一个色综合网站| 亚洲视频天天射| 亚洲婷婷在线| 国产亚洲精品久久飘花| 九九精品调教| 亚洲第一色中文字幕| 精品久久免费视频| 91亚洲永久精品| 成人三级视频在线播放 | 日本不卡在线观看| 最新日韩三级| 色婷婷av一区二区三区久久| 国产精品毛片一区二区在线看舒淇| 亚洲欧美综合网| 日本成人在线免费观看| 精品999日本| 久久伊人一区| www.国产精品| 久久6免费高清热精品| 欧美性猛交 xxxx| 色妹子一区二区| 911国产在线| 国产宾馆实践打屁股91| 波多野结衣之无限发射| blacked蜜桃精品一区| 91精品国产自产在线老师啪| av片在线观看永久免费| 亚洲国产精品福利| 天堂av免费在线观看| 最新日韩在线视频| 中文视频在线观看| 欧美a一区二区| www国产免费| 亚洲精品亚洲人成在线观看| 国产精品欧美一区二区| 中文在线字幕免费观看| 日韩精品在线看| 亚洲一区二区天堂| 亚洲成人在线网站| www.日本高清视频| 懂色av一区二区在线播放| 成年人视频网站免费观看| 99久久九九| 久久国产精品亚洲va麻豆| 欧美大片网站| 高清在线视频日韩欧美| 91网在线播放| 亚洲国产成人在线视频| 中文字幕乱码中文字幕| 亚洲高清免费观看| 黑人と日本人の交わりビデオ| 成人免费看黄yyy456| www.精品在线| 国产精品久久久久久久久久妞妞 | 欧美少妇bbb| 精品在线免费观看视频| 中文字幕欧美区| 国产精品入口麻豆| 国精产品一区一区三区mba桃花 | 精品视频在线一区二区在线| 欧美大片免费看| 生活片a∨在线观看| 日韩精品视频观看| 成人黄色在线观看视频| 欧美日韩综合色| 五月天婷婷导航| 亚洲国产精品影院| 亚洲怡红院在线观看| 国产亚洲欧美中文| 538国产视频| 国产精品88888| 91丨九色丨蝌蚪| 奇米一区二区三区av| 国产美女三级视频| 日韩午夜在线电影| 伊人网在线免费| 99精品美女| 亚洲成人第一| 欧美美女在线| 麻豆成人在线播放| 欧美影院天天5g天天爽| 国产精品一区二区三区免费| 蜜桃精品视频| 97欧洲一区二区精品免费| 日本亚洲欧洲无免费码在线| 国产精品久久久久久网站 | 97超碰资源| 久久综合偷偷噜噜噜色| 91在线高清视频| 91麻豆精品国产91久久久更新资源速度超快| 国产精国产精品| 国产精品亚洲一区二区三区在线观看| 2020欧美日韩在线视频| 美女高潮在线观看| 2018日韩中文字幕| 亚洲v.com| 欧美一级电影在线| 日韩电影网站| 国产精品美女主播| 日本午夜免费一区二区| 91九色单男在线观看| 青青久久精品| 1卡2卡3卡精品视频| 97久久综合精品久久久综合| 狠狠色狠狠色综合人人| 天海翼亚洲一区二区三区| 欧美亚洲精品日韩| 精品国产一区一区二区三亚瑟 | 99久久夜色精品国产亚洲狼 | 在线成人欧美| 91成人在线观看喷潮教学| 久久精品天堂| 色乱码一区二区三区在线| 精品在线免费视频| 亚洲制服在线观看| 不卡在线视频中文字幕| 久久中文字幕人妻| 国产女人aaa级久久久级| 黄色av片三级三级三级免费看| 亚洲精品欧美在线| 日韩免费黄色片| 91精品1区2区| 国产精品无码天天爽视频| 欧美不卡在线视频| 日韩专区一区二区| 中文字幕日韩综合av| av观看在线| 欧美性受xxxx黑人猛交| 成人四虎影院| www.久久久| 国产精品密蕾丝视频下载| 一区二区三区精品国产| 国产精品99免费看| 国产黄色特级片| 国产在线一区观看| 玖草视频在线观看| 亚洲私人黄色宅男| 国产精品100| 在线综合亚洲欧美在线视频 | 中文字幕久久精品| 里番在线播放| 国产精品人成电影在线观看| a看欧美黄色女同性恋| 视频在线一区二区三区| 激情久久中文字幕| 在线观看免费污视频| av在线不卡网| 99自拍视频在线| 色老综合老女人久久久| 高清毛片aaaaaaaaa片| 色小说视频一区| 综合毛片免费视频| 成人精品水蜜桃| 久久亚洲国产| www黄色av| 国产91富婆露脸刺激对白| 精品一区二区三孕妇视频| 午夜伦欧美伦电影理论片| 国产精品欧美久久久久天天影视| 亚洲乱码一区二区| 天堂成人av| 91欧美精品午夜性色福利在线| 亚洲精品动态| 久久久久久久久久久99| 国产精品亚洲综合一区在线观看| 欧美福利第一页| 欧美性色19p| 欧洲精品久久一区二区| 免费av一区二区| 久久天天久久| 日韩福利视频| 免费亚洲视频| 精品夜夜澡人妻无码av| 亚洲成人动漫在线观看| 亚洲va久久久噜噜噜无码久久| 日韩有码在线电影| 日本国产一区| 正义之心1992免费观看全集完整版| 久久国产精品久久w女人spa| 国产不卡一二三| 亚洲图片欧美一区| 朝桐光av在线一区二区三区| 久久激情视频免费观看| 亚洲青青一区| 丰满女人性猛交| 精彩视频一区二区| 欧美肥妇bbwbbw| 欧美日本视频在线| 91高清在线| 国产日韩欧美影视| 日韩精品久久| 日本美女视频一区| 成人免费在线视频观看| 99精品久久久久久中文字幕 | 女人高潮被爽到呻吟在线观看| 国产乱码一区| 夜久久久久久| 色婷婷在线影院| 欧洲人成人精品| caoporn国产精品免费视频| 国产精品视频免费观看www| 99久久精品网站| 午夜诱惑痒痒网| 亚洲一二三区视频在线观看| 欧美一区二区黄片| 欧美最猛性xxxxx亚洲精品| 伊人春色之综合网| 激情综合网俺也去| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 亚洲成人精品在线观看| 天堂在线中文字幕| 国产精品扒开腿做爽爽爽视频| 成人影院在线| 日韩欧美中文视频| 亚洲一线二线三线久久久| 天天综合网在线| 国产精品久久久久久av福利| 国产精品99久久精品| 一级黄色大片免费看| 天天综合网 天天综合色| 番号集在线观看| 91久久精品国产91性色| 亚洲第一黄网| 久久婷婷五月综合| 欧美一区二区三区人| free性欧美16hd| 日本一区二区三区在线视频| 精品一二三四区| 成人午夜视频精品一区| 国产亚洲欧洲高清| 精品入口麻豆88视频| 拔插拔插海外华人免费| 欧美韩日一区二区三区四区| 国产手机精品视频| 欧美最顶级丰满的aⅴ艳星| 99久久影视| 人人妻人人藻人人爽欧美一区| 欧美精品在线一区二区三区| 电影k8一区二区三区久久| 日韩精品伦理第一区| 丰满白嫩尤物一区二区| 天堂网一区二区| 久久久久久久久久av| 精品国产乱码| www.日本高清| 欧美一区二区三区播放老司机| 中老年在线免费视频| 99中文字幕在线观看| 国产欧美一区二区三区沐欲| 免费激情视频网站| 国产日韩欧美在线看|