1. 程式人生 > >JVM記憶體分為哪幾部分?各個部分的作用是什麼?

JVM記憶體分為哪幾部分?各個部分的作用是什麼?

  1. 堆。 堆是Java物件的儲存區域,任何用new欄位分配的Java物件例項和陣列,都被分配在堆上,Java堆可使用-Xms -Xmx進行記憶體控制,值得一提的是從JDK1.7版本之後,執行時常量池從方法區移到了堆上。
  2. 方法區。它用於儲存已被虛擬機器載入的類資訊,常量,靜態變數,即時編譯器編譯後的程式碼等資料,方法區在JDK1.7版本及以前被稱為永久代,從JDK1.8永久代被移除。
  3. 虛擬機器棧。虛擬機器棧中執行每個方法的時候,都會建立一個棧幀用於儲存區域性變量表,運算元棧,動態連結,方法出口等資訊。
  4. 本地方法棧。與虛擬機器棧發揮的作用相似,相比於虛擬機器棧為Java方法服務,本地方法棧為虛擬機器使用的Native方法服務,執行每個本地方法的時候,都會建立一個棧幀用於儲存區域性變量表,運算元棧,動態連結,方法出口等資訊。
  5. 程式計數器。指示Java虛擬機器下一條需要執行的位元組碼指令。
    以上五個區域是Java虛擬機器記憶體劃分情況,其中方法區和堆被JVM中多個執行緒共享,比如類的靜態常量就被存放在方法區,供類物件之間共享,虛擬機器棧,本地方法棧,pc暫存器是每個執行緒獨立擁有的,不會與其他執行緒共享。
    所以Java在通過new建立一個類物件例項的時候,一方面會在虛擬機器棧中建立一個該物件的引用,另一方面會在堆上建立類物件的例項,然後將物件引用指向該物件的例項。物件引用存放在每一個方法對應的棧幀中。

相關推薦

JVM記憶體分為部分?各個部分作用是什麼?

堆。 堆是Java物件的儲存區域,任何用new欄位分配的Java物件例項和陣列,都被分配在堆上,Java堆可使用-Xms -Xmx進行記憶體控制,值得一提的是從JDK1.7版本之後,執行時常量池從方法區移到了堆上。 方法區。它用於儲存已被虛擬機器載入的類資訊,常量,靜態變數,即時編譯器編譯後的程式碼等資料,

JVM記憶體個區,每個區的作用是什麼?(這裡還不是很懂,還要繼續理解)

JVM主要分以下幾個區: 方法區: a.很少發生來垃圾回收,但是並不代表不發生GC,在這裡進行的GC主要是對方法區裡的常量

編譯的程式佔用的記憶體分為以下部分

編譯的程式佔用的記憶體分為以下幾個部分    一、由C/C++編譯的程式佔用的記憶體分為以下幾個部分     1、棧區(stack)—   由編譯器自動分配釋放   ,存放函式的引數值,區域性變數的值等。其

程式的記憶體分配即一個由C/C++編譯的程式佔用的記憶體分為以下部分

一個由C/C++編譯到程式佔用的記憶體分為以下幾個部分: 1、棧區(stack)——由編譯器自動分配釋放,在不需要的時候自動清除。用於存放函式的引數、區域性變數等。操作方式類似資料結構中的棧(後進

Android 數據存儲方式分為種?

== 存在 禁止 dir pix 內容 key ner cti   10道題值得思考    第一道題    1、Android 數據存儲方式分為哪幾種?    SharedPreferences存儲數據    2. CotentProvider內容提供者    3. 文件存

CRM使用者可以分為類?

團隊領導的使命是達成業務目標,這一使命的核心是客戶和員工。   為了讓團隊獲取成功,團隊領導選拔合適的人才、樹立積極的企業文化、不斷激勵團隊。那麼,是否可以為團隊提供一些工具來達成業務目標呢?   如果沒有客戶關係管理(CRM)系統,或者現有的CRM系統過時了,可

區塊鏈的發展分為個階段來了解下

  提起區塊鏈,還要從比特幣說起。從比特幣誕生以後,經過一段時間的沉積,到2012年、2013年以後,才逐步為社會所認可,而且現在越來越熱。從2017年開始,比特幣迅速升溫,並在比特幣的基礎上又派生出以太幣、萊特幣等新的區塊鏈應用。人們對於數字貨幣的關注已經轉向了對區塊鏈

區塊鏈遊戲分為類?

當下,“區塊鏈+遊戲”可謂是區塊鏈眾多應用場景中最為火爆的一個。自從國外基於以太坊的區塊鏈遊戲 CryptoKitties(以太貓)進入公眾視野之後,它的高仿品就如韭菜一般,割了一茬又一茬,層出不窮的出現,到目前為止大概有近200款與之類似的遊戲。眾多區塊鏈遊戲,玩法自然也是

Jvm記憶體溢位的種情況

1、java堆溢位 java對用於儲存物件的例項,只要不斷的建立物件,並且保證GC Roots到物件之間有可達路徑來避免垃圾回收機制清除這些物件,那麼在物件數量達到最大堆的容量限制之後機會產生記憶體溢

java異常型別分為

    異常處理的目的是依據實際情況提供不同的錯誤應對策略與手段,使程式更穩定,更安全。異常處理的主要用途是提供準確的錯誤訊息,解釋失敗的原因、位置和錯誤型別等,同時提供一定的恢復能力,儘可能地保證資料完整性不被破壞,並讓程式能繼續執行。Java中的異常捕獲語句 Java 中

網路協議分為層---物理層,連線層,網路層,傳輸層,應用層詳解

訊號的傳輸總要符合一定的協議(protocol)。比如說長城上放狼煙,是因為人們已經預先設定好狼煙這個物理訊號代表了“敵人入侵”這一抽象訊號。這樣一個“狼煙=敵人入侵”就是一個簡單的協議。協議可以更復雜,比如摩爾斯碼(Morse Code),使用簡訊號和長訊號的組合,

測試工程師按技術可以分為

1、自動化測試工程師自動化測試工程師細分可以有UI自動化測試工程師,APP自動化測試工程師、介面自動化測試工程師等等。那麼怎麼才能成為一個合格的自動化測試工程師呢。首先,必須要掌握一門程式語言,應該以Java或者python為主,雖然什麼語言都可以用來做自動化測試,但畢竟這個

1_代數運算可以分為類,各有什麽意義?

設備 數字 lib 意義 數字化 技巧 產生 卷積 區域 代數運算可以分為哪幾類,各有什麽意義? 代數運算可以分為對兩幅或兩幅以上輸入圖像的加、減、乘、除運算四大類 加法運算通常用於平均值降噪等多種場合。圖像相加一般用於同一場景的多幅圖像求平均,以便有效 降低加

記憶體分為部分?堆與棧的區別

五大記憶體分割槽     在C++中,記憶體分成5個區,他們分別是堆、棧、自由儲存區、全域性/靜態儲存區和常量儲存區。     棧:就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。裡面的變數通常是區域性變數、函式引數等。     堆:就是那些由ne

JVM執行時區域由部分組成?分別介紹一下

Java虛擬機器的執行時區域構成圖如下所示:執行緒共享區域:Java堆:(1)Java堆是java虛擬機器所管理的記憶體中最大的一塊;(2)被所有執行緒共享區域,在虛擬機器啟動時建立,唯一目的存放物件例項;(3)堆區是gc的主要區域,通常情況下分為兩個區塊年輕代和年老代。更細

大資料工作由部分組成

關於大資料的概念,指的是無法在一定時間內用常規軟體工具對其內容進行抓取、管理和處理的資料集合。而大資料技術,是指從各種各樣型別的資料中,快速獲得有價值資訊的能力。那麼關於大資料的技術大致包含哪些內容? 一、資料採集 ETL工具負責將分佈的、異構資料來源中的資料如關係資料、平面資料檔案等抽取到臨時中間層後進

GitHub上獲得26236個Star的Java面試專案,看看你都會部分

對於很多人來說,找到一份工作不是問題,但找到一份合適而滿意的工作,卻不那麼簡單。有些人雖然很有實力但是往往卡在面試環節…… 本文為大家找了幾個Java相關的面試專案,其中有的已經在GitHub上獲得了26236個Star,下面我們一起來盤點一下這幾個Java面試專案。

JVM記憶體中各部分存放的內容

虛擬機器記憶體中主要有程式計數器、虛擬機器棧、本地方法棧、堆和方法區。 程式計數器和虛擬機器棧都是執行緒“私有”的記憶體。 程式計數器是一塊比較下的記憶體空間,主要村放程式碼執行的位置。分支、迴圈、跳轉、異常處理、執行緒恢復等基礎功能都需要一來這個計數器來完成。 例如,多執行緒中,為了執

netty(一) netty有部分構成

nbsp tro sock 說明 .com 日誌 內部使用 阻塞 opera netty netty是一個支持高並發的非阻塞I/O框架。 Channel Channel 是 NIO 基本的結構。它代表了一個用於連接到實體如硬件設備、文件、網絡套接字或程序組件,能夠執行

QPalette實例教程(QWidget自帶的顏色設置工具,對Window的各個部分都可設置顏色)

num tails 使用 amp img span font let com QPalette是一款非常好用的顏色設置工具: 頭文件:#include <QPalette> (^-^我沒有用這個頭文件也可以使用QPalette) 常用函數: void