摘要:虛擬機運行時數據區虛擬機在執行程序的過程中會把它所管理的內存劃分為若干個不同的數據區域,以下是虛擬機所管理的運行時數據區程序計數器和寄存器來存放下一條指令地址類似,的程序計數器可看作當前線程所正在執行不是下一條的字節碼的行號指示器。
Java 虛擬機( Java Virtual Machine,縮寫為 JVM ):是一種能夠運行 Java 程序的抽象計算機。
特點:實現 Java 平臺無關性,使得編譯后的 Java 程序指令并不直接在硬件系統的 CPU 上執行,而由 JVM 執行。JVM 屏蔽了與具體操作系統平臺相關的信息,使得 Java 程序只需生成在 Java 虛擬機上運行的目標代碼(字節碼),再由 JVM把字節碼解釋成具體平臺上的機器指令執行,就可以在多種平臺上不加修改地運行。
Java 虛擬機運行時數據區Java 虛擬機在執行 Java 程序的過程中會把它所管理的內存劃分為若干個不同的數據區域,以下是 Java 虛擬機所管理的運行時數據區:
程序計數器和 pc 寄存器來存放下一條指令地址類似,JVM 的程序計數器可看作當前線程所正在執行(不是下一條)的字節碼的行號指示器。在虛擬機的概念模型里,字節碼解釋器工作時可以通過改變這個計數器的值來選取下一條需要執行的字節碼指令。
Java 虛擬機的多線程是通過線程輪流切換并分配處理器執行的時間來實現的,在任何確定的某個時刻,一個處理器都只會執行一條線程中的指令。因此,為了線程切換后能恢復到正確的執行位置,每條線程都有一個獨立的程序計數器,即線程私有。
Java 虛擬機棧描述了 Java 方法 執行的內存模型,即存放每個方法執行時創建的棧幀,用于存放局部變量表、操作數棧、動態鏈接、返回地址等信息,線程私有。
本地方法棧類似于 Java 虛擬機棧執行 Java 方法服務,本地方法棧則為虛擬機使用到的 Native 方法服務,線程私有。
Java 堆存放分配的對象實例及數組,可以處于物理上不連續的內存空間,只要邏輯連續即可,線程共享,區域主要由垃圾收集器管理。
方法區存儲一個類的結構信息,例如運行時常量池、成員變量和方法數據等,線程共享。
注意:方法區≠永久代(Permanent Generation),僅僅是因為HotSpot虛擬機中使用永久代來實現方法區,以此像管理堆內存一樣來管理方法區而已。
方法區的一部分,用于存放編譯期間生成的各種字面量(文字所表示的取值,即固定值,對于 String 而言,形如 String str="hello"這種屬于字面量,有專門的字符串池進行保存,形如String str = new String("hello")這種不屬于字面量,則是在堆上分配)和符號引用(相當于Linux中一個文件的軟鏈接,在該類實際執行時,才把符號引用轉為直接引用)。
本文發表于個人博客:http://lavnfan.github.io/,歡迎指教。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66030.html
摘要:一內存區域虛擬機在運行時,會把內存空間分為若干個區域,根據虛擬機規范版的規定,虛擬機所管理的內存區域分為如下部分方法區堆內存虛擬機棧本地方法棧程序計數器。前言 在JVM的管控下,Java程序員不再需要管理內存的分配與釋放,這和在C和C++的世界是完全不一樣的。所以,在JVM的幫助下,Java程序員很少會關注內存泄露和內存溢出的問題。但是,一旦JVM發生這些情況的時候,如果你不清楚JVM內存的...
摘要:運行時數據區域的學習,是學習以及機制的基礎,也是深入理解對象創建及運行過程的前提。了解內存區域劃分,是學習概念的前提。 Java 運行時數據區域的學習,是學習 jvm 以及 GC 機制的基礎,也是深入理解 java 對象創建及運行過程的前提。廢話不多說,直接進入正題: 一張圖總結 showImg(https://segmentfault.com/img/bVOMAn?w=685&h=5...
摘要:編譯器只需面向,生成能理解的代碼或字節碼文件。源文件經編譯器,編譯成字節碼程序,通過將每一條指令翻譯成不同平臺機器碼,通過特定平臺運行。漲見識,字節碼執行過程分析。解決辦法減少默認棧的容量來換取更多的線程支持。 前言 JVM是java的核心和基礎,在java編譯器和os平臺之間的虛擬處理器。它是一種基于下層的操作系統和硬件平臺并利用軟件方法來實現的抽象的計算機,可以在上面執行java的...
摘要:編譯器只需面向,生成能理解的代碼或字節碼文件。源文件經編譯器,編譯成字節碼程序,通過將每一條指令翻譯成不同平臺機器碼,通過特定平臺運行。漲見識,字節碼執行過程分析。解決辦法減少默認棧的容量來換取更多的線程支持。 前言 JVM是java的核心和基礎,在java編譯器和os平臺之間的虛擬處理器。它是一種基于下層的操作系統和硬件平臺并利用軟件方法來實現的抽象的計算機,可以在上面執行java的...
閱讀 2415·2021-11-25 09:43
閱讀 1249·2021-11-24 09:39
閱讀 750·2021-11-23 09:51
閱讀 2388·2021-09-07 10:18
閱讀 1857·2021-09-01 11:39
閱讀 2780·2019-08-30 15:52
閱讀 2595·2019-08-30 14:21
閱讀 2860·2019-08-29 16:57