JVM系列運行時數據區(qū)(Run-Time Data Areas)

      網友投稿 626 2025-03-31

      JVM系列之運行時數據區(qū)(Run-Time Data Areas)


      1、官網概括

      引用官網說法:

      The Java Virtual Machine defines various run-time data areas that are used during execution of a program. Some of these data areas are created on Java Virtual Machine start-up and are destroyed only when the Java Virtual Machine exits. Other data areas are per thread. Per-thread data areas are created when a thread is created and destroyed when the thread exits.

      運行時數據區(qū),是java虛擬機定義的在程序執(zhí)行期間使用的各種運行時的數據區(qū)。這些運行時數據區(qū)分為兩種,一種是在java虛擬機啟動時創(chuàng)建,僅在java虛擬機退出時才被銷毀,這種可以理解為線程共享的。另外一種是數據區(qū)是針對每個線程的,是在創(chuàng)建線程時創(chuàng)建的,并在線程退出時銷毀這個數據區(qū),這種可以理解為線程私有的。

      2、圖例和思維導圖

      JVM運行時數據區(qū)圖例:

      思維導圖:Java虛擬機運行時數據區(qū),虛擬機棧、本地方法棧、程序計數器是線程私有的,方法區(qū)、堆是線程共享的

      3、方法區(qū)(Method Area)

      what is method area? 下面摘錄官網對方法區(qū)的描述

      (1)、方法區(qū)是線程共享的內存區(qū)域,在虛擬機啟動時創(chuàng)建

      JVM系列之運行時數據區(qū)(Run-Time Data Areas)

      The Java Virtual Machine has a method area that is shared among all Java Virtual

      Machine threads.

      The method area is created on virtual machine start-up.

      (2)、雖然方法區(qū)是堆的一個邏輯部分,但是其別名為非堆(Non-heap),目的是和堆區(qū)分開

      The method area is analogous to the storage area for compiled code of a conventional language or analogous to the “text” segment in an operating system process

      (3)、方法區(qū)存儲運行時常量池、字段和方法數據,以及方法和構造函數的代碼,包括在類和實例初始化和接口初始化中使用的特殊方法

      It stores per-class structures such as the run-time constant pool, field and method data, and the code for methods and constructors, including the special methods (§2.9) used in class and instance initialization and interface initialization.

      ps,注意點:如果方法區(qū)中的內存不能用于滿足分配請求,Java 虛擬機將拋出一個OutOfMemoryError.

      歸納:JVM方法區(qū)中存儲了每個類的信息(包括類的名稱、方法信息、字段信息),靜態(tài)變量,常量已經編譯器編譯后的代碼等。方法區(qū)是線程共享的,習慣上方法區(qū)也被稱為“永久代”。如果方法區(qū)中的內存不能用于滿足分配請求,Java 虛擬機將拋出內存不足異常

      4、堆(Heap)

      (1)、Java堆是Java虛擬機所管理內存中最大的一塊,堆是運行時數據區(qū),從中分配所有類實例和數組的內存

      The Java Virtual Machine has a heap that is shared among all Java Virtual Machine threads. The heap is the run-time data area from which memory for all class instances and arrays is allocated.

      (2)、堆是在虛擬機啟動時創(chuàng)建的,是所有 Java 虛擬機線程之間共享的

      The Java Virtual Machine has a heap that is shared among all Java Virtual Machine threads.

      The heap is created on virtual machine start-up

      注意:如果計算需要的堆多于自動存儲管理系統所能提供的堆,Java 虛擬機將拋出一個 OutOfMemoryError.

      歸納:Java 中的堆是用來 存儲對象本身的以 及數組,堆是被所有 線程共享的。Java 堆從 GC 的角度還可以細分為: 新生代( Eden 區(qū) 、 From Survivor 區(qū) 和 To Survivor 區(qū) )和老年代。。如果計算需要的堆多于自動存儲管理系統所能提供的堆,Java 虛擬機將拋出一個 OutOfMemoryError.

      5、Java虛擬機棧

      Java虛擬機棧:Java Virtual Machine Stacks

      (1)、每一個java虛擬機線程都有一個java虛擬機棧,在線程創(chuàng)建時候就創(chuàng)建虛擬機棧

      Each Java Virtual Machine thread has a private Java Virtual Machine stack,

      created at the same time as the thread

      (2)、java虛擬機線程中的每一個方法對應一個棧幀;調用一個方法,就向虛擬機棧中壓入一個棧幀;一個方法調用完成,就將改棧幀從棧中彈出

      A Java Virtual Machine stack stores frames (§2.6)

      A new frame is created each time a method is invoked. A frame is destroyed when

      its method invocation completes.

      6、 棧幀(Stack Frame)

      棧幀:每個棧幀對應一個被調用的方法,可以理解為一個方法的運行空間

      每個棧幀中包括局部變量表(Local Variables)、操作數棧(Operand Stack)、動態(tài)鏈接(Dynamic Linking)、方法返回地址(Return Address)

      局部變量表:方法中定義的局部變量以及方法的參數存放在這張表

      操作數棧:以壓棧和出棧的方式存儲操作數的

      動態(tài)鏈接:每個幀都包含對當前方法類型的運行時常量池的引用,以支持方法代碼的動態(tài)鏈接,class方法的文件代碼指的是要調用的方法和要通過符號引用訪問的變量。動態(tài)鏈接將這些符號方法引用轉換為具體方法引用,根據需要加載類以解析尚未定義的符號,并將變量訪問轉換為與這些變量的運行時位置相關聯的存儲結構中的適當偏移量(重點理解一下符號方法引用轉換為具體方法引用,class文件編譯為字節(jié)碼之后,會有一個符號引用規(guī)范,動態(tài)鏈接就是將符號方法引用轉換為具體方法引用)

      方法返回地址:當一個方法開始執(zhí)行后,只有兩種方式可以退出,一種是遇到方法返回的字節(jié)碼指令;一種是遇見異常,并且該異常不在方法內處理,則方法調用會 突然完成。執(zhí)行athrow指令 ( § athrow ) 也會導致顯式拋出異常,如果當前方法未捕獲異常,則會導致方法調用突然完成。突然完成的方法調用永遠不會向其調用者返回值。

      注意:

      如果線程中的計算需要比允許的更大的 Java 虛擬機堆棧,則 Java 虛擬機將拋出一個StackOverflowError.

      如果 Java 虛擬機堆??梢詣討B(tài)擴展,并且嘗試擴展但沒有足夠的內存來實現擴展,或者如果沒有足夠的內存可以為新線程創(chuàng)建初始 Java 虛擬機堆棧,則 Java 虛擬機機器拋出一個OutOfMemoryError.

      7、程序計數器(The pc Register)

      每個java虛擬機線程都有自己的程序計數器。在任何時候,每個 Java 虛擬機線程都在執(zhí)行單個方法的代碼,如果該方法不是 native,則該pc寄存器包含當前正在執(zhí)行的 Java 虛擬機指令的地址。如果線程當前正在執(zhí)行的方法是native,則 Java 虛擬機pc 寄存器的值是未定義的

      The Java Virtual Machine can support many threads of execution at once (JLS §17). Each Java Virtual Machine thread has its own pc (program counter) register. At any point, each Java Virtual Machine thread is executing the code of a single method, namely the current method (§2.6) for that thread. If that method is not native, the pc register contains the address of the Java Virtual Machine instruction currently being executed. If the method currently being executed by the thread is native, the value of the Java Virtual Machine’s pc register is undefined. The Java Virtual Machine’s pc register is wide enough to hold a returnAddress or a native pointer on the specific platform.

      8、本地方法棧(Native Method Stacks)

      對于一般的方法,都是在java虛擬機棧指向,如果當前線程執(zhí)行的方法是Native類型的,這些方法就會在本地方法棧中執(zhí)行,學習本地方法??梢院吞摂M機棧對比。

      native方法實例,可以點到String源碼里看,如圖,這個方法就是一個native方法:

      異常情況:

      1.棧深度大于已有深度:StackOverflowError

      2.可擴展深度大于能夠申請的內存:OutOfMemoryError

      Java JVM 虛擬化

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:裝修公司工程項目進度表(裝修公司施工計劃進度表)
      下一篇:按上下左右鍵整個表格跟著走,(上下左右表格跟著動)
      相關文章
      亚洲韩国精品无码一区二区三区| 亚洲一区二区影院| 亚洲AV无码国产精品麻豆天美| www.亚洲精品.com| 亚洲国产成人久久精品软件| 亚洲Av无码一区二区二三区| 亚洲国产精品乱码在线观看97| 在线观看亚洲一区二区| 久久久久久亚洲AV无码专区| 亚洲综合在线视频| 亚洲视频一区二区三区| 亚洲黄色网址在线观看| 亚洲国产福利精品一区二区 | 亚洲视频一区二区三区| 亚洲综合色一区二区三区小说| 亚洲精选在线观看| 夜夜亚洲天天久久| 亚洲国产中文在线二区三区免| 亚洲一级在线观看| 99热亚洲色精品国产88| 亚洲依依成人亚洲社区| 亚洲日韩久久综合中文字幕| 亚洲av无码成人影院一区| 99亚洲精品卡2卡三卡4卡2卡| 亚洲第一页日韩专区| 狠狠亚洲狠狠欧洲2019| 亚洲日韩精品无码一区二区三区| 国产亚洲精品自在久久| 亚洲国产一区二区三区青草影视| 久久久久亚洲精品日久生情| 亚洲国产精品人久久电影| 国产人成亚洲第一网站在线播放| 亚洲AV无码国产精品永久一区| 亚洲Av无码乱码在线播放| 中文字幕亚洲无线码a| 久久久久无码精品亚洲日韩| 久久精品国产亚洲77777| 亚洲一卡2卡4卡5卡6卡残暴在线| 亚洲一区二区三区写真| 少妇亚洲免费精品| 亚洲精品无码精品mV在线观看|