1. 程式人生 > >java虛擬機器記憶體區域

java虛擬機器記憶體區域

java虛擬機器執行時記憶體區域結構主要分為:
-方法區、堆、虛擬機器棧、本地方法區、程式計數器

  • 方法區
  • 虛擬機器棧
  • 本地方法區
  • 程式計數器

這裡寫圖片描述

程式計數器
程式計數器是較小的一塊記憶體區域,屬於執行緒私有的,它可以看作當前執行緒執行的位元組碼行號指示器,位元組碼直譯器工作時就是通過改變這個計數器的值來獲取下一條需要執行的位元組碼指令。分支、迴圈、異常處理、執行緒恢復等基礎操作都需要依賴程式計數器來完成操作。

虛擬機器棧
java虛擬機器棧也是執行緒私有的,它的生命週期和執行緒相同。每個方法在執行的同時會建立一個棧幀用於儲存區域性變量表、運算元棧、動態連結串列、方法出口等資訊,每一個方法執行完成的過程就對應著一個棧幀在虛擬機器棧中入棧到出棧的過程。
區域性變量表:存放編譯期可知的各種基本資料型別(boolean、byte、char、short、int、float、long、double)、物件的引用
在java虛擬機器規範中,對這個區域定義了兩種異常狀況:如果執行緒請求的棧深度大於虛擬機器所允許的深度,將丟擲StarckOverflowError異常;如果虛擬機器棧可以動態擴充套件,如果擴充套件時申請不到足夠的記憶體空間,就會
丟擲OutOfMemoryError異常

本地方法棧
本地方法棧和虛擬機器棧所發揮的作用非常相似、他們之間的區別在於虛擬機器棧微虛擬機器執行java方法(也就是位元組碼服務),而本地方法棧則為虛擬機器使用到的Native(本地)方法服務。

java堆
java堆被所有執行緒所共享,是java虛擬機器管理的記憶體中最大的一塊。在虛擬機器啟動的時候建立,此記憶體區域的唯一目的就是存放物件例項和陣列,幾乎所有的記憶體例項都在這裡分配記憶體。
java堆屎垃圾收集器管理的主要區域,因此很多時候也稱為“GC堆”。從記憶體回收角度看,應為現在收集器都採用分代收集演算法,所以java堆還可以細分為:新生代和老年代。從記憶體分配角度看,執行緒共享的java堆可能劃分出多個執行緒私有的分配緩衝區。
java堆可以處於物理上不連續的記憶體空間中,只要邏輯上是連續的即可,如果在堆中沒有記憶體完成例項分配,並且堆也無法在擴充套件時,將丟擲OutOfMemoryError異常

方法區
方法區是各個執行緒共享的記憶體區域,它用於儲存已被虛擬機器載入的類資訊、常量、靜態變數、
執行時常量池:方法區的一部分。Class檔案中除了類的版本、欄位、方法、介面等描述資訊之外,還有一項資訊就是常量池,用於存放編譯期生成的各種字面量和符號引用,
當方法區無法滿足記憶體的分配需求時,將丟擲OutOfmenoryError異常

直接記憶體
直接記憶體並不是虛擬機器執行時資料區的一部分,也不是java虛擬機器規範中定義的記憶體區域
在jdk1.4中加入NIO類,引入了一種基於通道和緩衝區的I/O方式、他可以使用Native函式庫直接分配堆外記憶體,然後通過一個儲存在java堆中的DirectByteBuffer物件作為這塊記憶體的引用直接操作。

相關推薦

jvm學習筆記(1)——java虛擬機器記憶體區域

一、java記憶體區域:      1、程式計數器(執行緒私有):     記憶體中較小的記憶體空間,可以當做當前執行緒所執行位元組碼的行號指示器。如分支、迴圈、跳轉、異常處理、執行緒恢復都需要依賴這個計數器完成。 2、java虛擬機

java虛擬機器記憶體區域的劃分以及作用詳解

        為什麼有時候學著學著會突然之間覺得一切度是那麼無趣,男的每個月也有那麼幾天難道?哈哈,不然是什麼,我還是要堅持,可以做少一點,但是不能什麼度不做。總會過去的,加油                                              

深入JVM(Java虛擬機器)(一)Java虛擬機器記憶體區域劃分

   本文為博主參閱自《深入理解Java虛擬機器:JVM高階特性與最佳實踐(第2版)》,書中的全部講解均以《Java虛擬機器規範(Java SE 7)》為依據    圖一中為JVM規範中對java虛擬機器記憶體區域的劃分及定義,為單執行緒時的粗略劃分 圖二,中所繪為JVM

java虛擬機器記憶體區域

java虛擬機器執行時記憶體區域結構主要分為: -方法區、堆、虛擬機器棧、本地方法區、程式計數器 方法區 堆 虛擬機器棧 本地方法區 程式計數器 程式計數器 程式計數器是較小的一塊記憶體

Java虛擬機器記憶體區域劃分-----內容為自己記憶所用

首先是通過網上圖片自己所畫的java虛擬機器記憶體圖 1.程式計數器 程式計數器與執行緒的相關的 當一個執行緒停止工作後,在次啟動該執行緒,執行緒是如何回到上一次停止工作的地方,此時便應用到了程式計數器 2.本地方法棧 它就是與外界一些關聯,比如作業系統之類

Java虛擬機器記憶體區域劃分

Java程式執行時的資料區域 Java虛擬機器在執行Java程式的過程中,會把它所管理的記憶體劃分為若干個不同的資料區域,這些區域都有各自的用途,以及建立和銷燬的時間,有的區域隨著虛擬機器程序的啟動而存在,有些區域則依賴使用者執行緒的啟動和結束而建立和銷燬。J

java虛擬機器---記憶體區域

1.程式計數器: 主要作用是記錄正在執行的虛擬機器位元組碼指令的地址,或者接下來要執行的下條指令地址,簡單的說就是記錄正在執行的程式碼地址或者將要執行程式碼的地址(這樣說不是很準確,只是好理解)分支

Java虛擬機器--記憶體區域劃分

執行時資料區域 在執行時資料區內,白色部分的是執行緒私有的:虛擬機器棧、本地方法棧、程式計數器 程式計數器:執行緒私有,可以看做當前執行緒所執行的位元組碼的行號指示器。若執行緒正在執行

Java虛擬機器-記憶體區域

jvm記憶體區域 方法區(Method Area) 常量池(Run-Time Constant Pool) 堆(Heap 程式計數器(Program Counter) 虛擬機器棧(Java Virtual Machine Sta

《深入理解Java虛擬機器》個人讀書總結——JAVA虛擬機器記憶體

《深入理解Java虛擬機器》個人讀書總結——JAVA虛擬機器記憶體 最近在讀《深入理解Java虛擬機器》,網上對Java虛擬機器的總結有很多,自己覺得自己也應該記錄一點個人的讀書總結,以便日後複習方便。 隨著開發工作的逐漸深入,對Java的理解不能止步於crud,Java不像C語言

java虛擬機器(第二版) 第二章總結 (三)-手工復現java虛擬機器記憶體溢位(OutOfMemoryError異常)

  文章概述 的java虛擬機器記憶體溢位的簡要概述,復現堆記憶體,棧記憶體,方法區的執行時常量池記憶體等區域的溢位情況,以及上述區域發生記憶體溢位的判斷方式和解決思路。   1,概述:      IDE為eclipse,需要在執

Java虛擬機器 記憶體管理與垃圾回收

java和C++之間有一堵由記憶體自動分配與垃圾回收所圍成的高牆,外面的人想進來,裡面的人想出去 主要內容 記憶體分佈 垃圾回收機制 垃圾收集器 Java記憶體分佈 當java虛擬機器執行程式時,會把由虛擬機器管理的記憶體劃分為不同的區域,他們的作用不同,建立和銷燬時間也不同,有的是虛擬

Java虛擬機器記憶體模型與執行緒

Java虛擬機器—記憶體模型與執行緒 Lyon Keep balance,Be a better man! ​關注他 3 人讚了該文章 前言: 本文主要介紹Java的記憶體模型和Java執行緒。 Java記憶體模型的主要目標是定義程式中各個變數的訪問規則,即在JVM

JVM系列第6講:Java 虛擬機器記憶體結構

看到這裡,我相信大家對於一個 Java 原始檔是如何變成位元組碼檔案,以及位元組碼檔案的含義已經非常清楚了。那麼接下來就是讓 Java 虛擬機器執行位元組碼檔案,從而得出我們最終想要的結果了。在這個過程中,Java 虛擬機器會載入位元組碼檔案,將其存入 Java 虛擬機器的記憶體空間中,之後進行一系列的初始化

JVM調優--------理解java虛擬機器記憶體模型

java虛擬機器記憶體模型是java程式執行的基礎,為了能使Java應用程式正常執行,JVM虛擬機器將記憶體資料分為程式計數器,虛擬機器棧,本地方法棧,Java堆和方法區 程式計數器用於存放下一條執行的指令;虛擬機器棧和本地方法棧用於存放函式呼叫堆疊資訊;java堆用於存放Java程式執行時所需

Confluence 提高Java虛擬機器記憶體

Confluence 提高Java虛擬機器記憶體 版本 系統:CentOS release 6.8 (Final)Java版本:1.8.0_162Confluence版本:6.8.5 問題描述 confluence記憶體使用率的配置都是預設的,相對會比較低,可以根據實際server的配置情況,升級記憶

JVM篇:淺談java虛擬機器記憶體模型

  博主最近嘗試著瞭解JVM,博主目前的一些理解,總之會隨著博主的深入瞭解慢慢完善吧 圖片來自網路 當JVM執行時,便會建立這五個區域,退出時銷燬。 JVM的五個區域:方法區、堆、棧(也可以稱為虛擬機器棧)、程式計數器、本地方法棧 博主在這裡說明一下:方法區概括了元空間

Java虛擬機器-記憶體管理

參考深入理解Java虛擬機器 執行時記憶體包括: 方法區(Method Area) 虛擬機器棧(VM Stack) 本地方法棧(Native Method Stack) 堆(Heap) 程式計數器(Program counter Register) 程式計數器

JAVA虛擬機器記憶體劃分學習

JAVA虛擬機器所管理的記憶體將分為以下幾個區:  1.程式計數器:主要包括程式的分支、迴圈、跳轉、異常處理等基礎功能;  2.棧:主要用於儲存區域性變數、方法出口、物件引用等資訊; 是執行緒私有的,生命週期與執行緒相同;  3.堆:主要儲存物件的例項;是執

java 虛擬機器記憶體劃分,類載入過程以及物件的初始化

涉及關鍵詞: 虛擬機器執行時記憶體 java記憶體劃分 類載入順序  類載入時機  類載入步驟  物件初始化順序  構造程式碼塊順序 構造方法 順序 記憶體區域   java記憶體圖  堆 方法區 虛擬機器棧 本地方法棧 程式計數器  區域性變量表   棧幀  java堆 執行時常量池   直接記憶體