1. 程式人生 > >java執行時的記憶體劃分

java執行時的記憶體劃分

Java 執行時的記憶體劃分

程式計數器

記錄當前執行緒所執行的位元組碼行號,用於獲取下一條執行的位元組碼。

當多執行緒執行時,每個執行緒切換後需要知道上一次所執行的狀態、位置。由此也可以看出程式計數器是每個執行緒私有的。

虛擬機器棧

虛擬機器棧由一個一個的棧幀組成,棧幀是在每一個方法呼叫時產生的。

每一個棧幀由區域性變數區運算元棧等組成。每建立一個棧幀壓棧,當一個方法執行完畢之後則出棧。

  • 如果出現方法遞迴調用出現死迴圈的話就會造成棧幀過多,最終會丟擲 StackOverflowError
  • 若執行緒執行過程中棧幀大小超出虛擬機器棧限制,則會丟擲 StackOverFlowError
  • 若虛擬機器棧允許動態擴充套件,但在嘗試擴充套件時記憶體不足,或者在為一個新執行緒初始化新的虛擬機器棧時申請不到足夠的記憶體,則會丟擲
    OutOfMemoryError

這塊記憶體區域也是執行緒私有的。

Java 堆

Java 堆是整個虛擬機器所管理的最大記憶體區域,所有的物件建立都是在這個區域進行記憶體分配。

這塊區域也是垃圾回收器重點管理的區域,由於大多數垃圾回收器都採用分代回收演算法,所有堆記憶體也分為 新生代老年代,可以方便垃圾的準確回收。

這塊記憶體屬於執行緒共享區域。

方法區

方法區主要用於存放已經被虛擬機器載入的類資訊,如常量,靜態變數


這塊區域也被稱為永久代

執行時常量池

執行時常量池是方法區的一部分,其中存放了一些符號引用。當 new 一個物件時,會檢查這個區域是否有這個符號的引用。

相關推薦

Java執行記憶體劃分

這篇文章可以說是摘抄自周志明的《深入理解Java虛擬機器》,但是加上了自己的理解,印象可以更深些。       Java虛擬機器在執行Java程式的時候會把他所管理的記憶體劃分為若干個不同的資料區域,

JAVA虛擬機器執行記憶體劃分--執行資料區域

Java虛擬機器在執行java程式時會把記憶體劃分為以下幾個不同的資料區域: java虛擬機器記憶體劃分(執行時)1、執行緒私有的:   程式計數器(Program Counter Register):可以看作當前執行緒所執行的位元組碼的行號指示器。java多執行緒中一個時刻,一個處理器都只會執行一條執

java執行記憶體區域劃分(1)

劇情預告     Java虛擬機器在執行Java程式的過程中會把它所管理的記憶體劃分為若干個不同的資料區域。     列舉一下:     1.方法區     2.虛擬機器棧     3.本地方法棧     4.堆     5.程式計數器         

1.Java執行記憶體區域

Java執行時記憶體區域 JVM虛擬機器執行時資料區域包括程式計數器,Java虛擬機器棧,本地方法棧,Java堆,方法區。此外,java程式執行時也會經常用到本地記憶體。關於它們的記憶體分佈圖如下所示: 下面具體介紹下上面提到的幾塊記憶體區域: 程式計數器

Java記憶體分配策略,Java執行記憶體分配

Java 記憶體分配策略 Java 程式執行時的記憶體分配策略有三種,分別是靜態分配,棧式分配,和堆式分配,對應的,三種儲存策略使用的記憶體空間主要分別是靜態儲存區(也稱方法區)、棧區和堆區。 靜態儲存區(方法區):主要存放靜態資料、全域性 static 資

java執行記憶體引數設定

package com.ibank.web; import com.tasfe.framework.netty.TasfeApplication; import com.tasfe.framework.

java執行記憶體劃分

Java 執行時的記憶體劃分 程式計數器 記錄當前執行緒所執行的位元組碼行號,用於獲取下一條執行的位元組碼。 當多執行緒執行時,每個執行緒切換後需要知道上一次所執行的狀態、位置。由此也可以看出程式計數器是每個執行緒私有的。 虛擬機器棧 虛擬

Java虛擬機器(JVM)執行記憶體區域劃分詳解

Java虛擬機器(JVM)記憶體區域劃分詳解 最近一直沒有怎麼更新自己的部落格,主要是由於老哥公司最近的一個招標專案忙得焦頭爛額,心力憔悴(ಥ_ಥ),趁著專案的空檔期來重構一下以前的一篇關於jvm記憶體區域劃分的部落格,仔細閱讀了一下之前的部落格,大量的文字敘

《深入理解Java虛擬機器》讀書筆記4-執行記憶體區域

Java執行時資料區域     Java執行時資料區域如下圖所示:             l  程式計數器:較小的記憶體空間,當前程式所執行的位元組碼的行號指示器。如果執行一個java方法,計數器記錄正在執行的虛擬機器位元組碼指令地址;如果

java虛擬機器執行記憶體區域

java虛擬機器執行時記憶體區域 程式計數器、Java虛擬機器棧、本地方法棧、Java堆、方法區 (前3個為執行緒私有,後2個為執行緒共享) (1)程式計數器 當前執行緒所執行的位元組碼的行號指示器;通過改變這個計數器的值來選取下一條需要執行的位元組碼指令;分支、迴圈、跳

Java執行資料區域劃分

轉自:https://www.cnblogs.com/zawier/p/6816781.html?utm_source=itdadao&utm_medium=referral Java虛擬機器在執行Java程式的過程中會把它所管理的記憶體劃分為若干個不同的資料區域。這些區域都有各自的用途

JVM執行記憶體區域劃分

JVM執行時的記憶體區域分為:程式計數器,虛擬機器棧,本地方法棧,堆,方法區,執行時常量池以及直接記憶體區域 線面主要來分別說下這些區域的儲存內容作用 1.程式計數器    程式計數器是執行緒私有的,當前執行緒所執行的位元組碼行號指示器。位元組碼解析器通過改變這個計數器

JAVA執行資料區域:記憶體區域與記憶體溢位異常

方法區(Method Area) 儲存內容用於儲存已被虛擬機器載入的類資訊、常量、靜態變數、即時編譯器編譯後的程式碼等資料。與執行緒的關係 各個執行緒共享該記憶體區域異常 這區域的記憶體回收目標

獲取java程式執行記憶體資訊

由於最近想自己動手測試一下String和StringBuffer的效率問題,需要獲取程式執行時的記憶體佔中資訊,於是上網查了一下,根據查到的資料寫了個程式,發現結果有問題,才發現查到的資料是錯誤的.所以在這裡跟大家分享一下獲取記憶體佔用的正確方法

java執行資料區劃分

      Java執行時資料區包括:虛擬機器棧區,堆區,方法區,程式計數器等。       其中,虛擬機器棧區也就是我們常說的棧區,執行緒私有,用於存放基本資料型別,物件的引用和ReturnAddress,在編譯期間完成分配。       堆區:java堆,也成GC對

java程式執行記憶體分配詳解

一、 基本概念    每執行一個java程式會產生一個java程序,每個java程序可能包含一個或者多個執行緒,每一個Java程序對應唯一一個JVM例項,每一個JVM例項唯一對應一個堆,每一個執行緒有一個自己私有的棧。程序所建立的所有類的例項(也就是物件)或陣列(指的是

關於Eclipse執行java程式記憶體溢位

ECLIPSE執行java程式,系統提示OutOfMemoryError: PermGen space。 解決辦法: 設定run as --->run configuragtions--->jre標籤下的屬性VM arguments: -server -Xms5

Java-檢測Java程式執行記憶體消耗的方法-Jconsole

考CCF的時候,一個很重要的標準是程式碼執行時間和佔用記憶體。執行時間我們可以通過System.currentTimeMillis()方法來計算;而佔用記憶體沒有辦法(我暫時沒有找到辦法)直接通過程式檢視。要想檢視記憶體使用情況,就要藉助java的JDK提供的一

Java虛擬機器詳解(二)------執行記憶體結構

  首先通過一張圖瞭解 Java程式的執行流程:      我們編寫好的Java原始碼程式,通過Java編譯器javac編譯成Java虛擬機器識別的class檔案(位元組碼檔案),然後由 JVM 中的類載入器載入編譯生成的位元組碼檔案,載入完畢之後再由 JVM 執行引擎去執行。在載入完畢到執行過程中,J

JVM筆記-執行記憶體區域劃分

## 1. 概述 Java 虛擬機器在執行 Java 程式的過程中會把它管理的記憶體劃分為若干個不同的資料區域。它們各有用途,有些隨著虛擬機器程序的啟動一直存在(堆、方法區),有些則隨著使用者執行緒的啟動和結束而建立和銷燬(程式計數器、虛擬機器棧、本地方法棧)。 《Java 虛擬機器規範》中規定 Java