1. 程式人生 > >初探jvm虛擬機器之記憶體管理(一)

初探jvm虛擬機器之記憶體管理(一)

本篇記錄一些概念性的東西,後續結合例項分析虛擬機器的記憶體機制。

java虛擬機器在程式執行時將記憶體劃分為以下幾個區域,每個區域作用,生命週期各不相同

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

這裡寫圖片描述

程式計數器 
執行緒執行的位元組碼行號指示器。 
多執行緒是通過時間片輪轉法獲取cpu時間,執行執行緒,因此當執行緒再次獲得cpu時須確保定位到上次執行到哪裡,由此可見程式計數器是執行緒私有的 
虛擬機器棧 
虛擬機器棧體現方法執行時的記憶體情況。 
每一個方法被執行時都會建立一個棧幀用於儲存區域性變量表,操作棧,動態連結,方法出口等資訊。 
每一個方法從開始執行到執行結束的過程實際上就是棧幀從虛擬機器棧從入棧到出棧的過程 
虛擬機器棧是執行緒私有的,生命週期與執行緒相同 
1)區域性變量表存放了編譯期可知的 
boolean,byte,char,short,int,long,float,double八種基礎型別 
及renference 引用,引用並不是物件例項,根據不同的虛擬機器,它可能是指向物件初始地址的引用指標,也可能是代表物件的一個控制代碼 
2)區域性變量表的空間在編譯期分配完成,當進入一個方法幀中分配多少空間是確定不變的。 
3)long和double佔用2個區域性變數空間,其餘型別佔用1個 
本地方法棧

 
本地方法棧與虛擬機器棧功能類似,本地方法棧是為虛擬機器呼叫到的native方法提供記憶體服務。 
 
堆是虛擬機器記憶體中較大的一塊區域,用來儲存物件例項,所有執行緒共享 
堆是虛擬機器主要GC區 
方法區 
方法區用來儲存被虛擬機器載入的類資訊,常量,靜態變數,即時編譯後的程式碼 
方法區是執行緒共享的 
該區一般不參與GC,即使參與也是隻針對常量池和型別解除安裝 
執行時常量池 
1)方法區的一部分 
2)用於存放編譯期生成的各種字面量和符號引用 
3)動態的,執行時常量池在執行時也可進入

相關推薦

初探jvm虛擬機器記憶體管理

本篇記錄一些概念性的東西,後續結合例項分析虛擬機器的記憶體機制。java虛擬機器在程式執行時將記憶體劃分為以下幾個區域,每個區域作用,生命週期各不相同程式計數器 虛擬機器棧 本地方法棧 方法區 堆程式計數器 執行緒執行的位元組碼行號指示器。 多執行緒是通過時間片輪轉法獲取cp

JAVA 虛擬機器記憶體管理

JMM ( Java Memory Model )概要 如圖:為java執行時資料區,在程式執行過程中對記憶體的分配、垃圾的回收都在執行時資料區中進行。 方法區和堆被執行緒所共享(藍色區塊) JVM棧、本地方法棧、程式計數器為執行緒所獨享(綠色區塊)

《深入理解JVM虛擬機器》讀書筆記

此書一共分為5個部分:走近Java自動記憶體管理機制虛擬機器執行子系統程式編譯與程式碼優化高效併發這裡,我直接跳過第一部分的內容,開始第二部分的內容。此部分包括:Java記憶體區域與記憶體溢位異常垃圾收集器與記憶體分配策略虛擬機器效能監控與故障處理工具調優案例分析與實戰開記!

java虛擬機器JVM--java虛擬機器記憶體管理新生代、老年代

前言 在上一篇部落格中,還遺留了一個問題:JVM的記憶體如何分配最高效?換一種說法就是:JVM的記憶體是如何的分配以及回收的?通過前面兩篇部落格的鋪墊:java虛擬機器JVM–java虛擬機器的結構, java虛擬機器JVM–java虛擬機器垃圾的回收機制詳解

【原創】技術系列 記憶體管理

作者:CppExplore 地址:http://www.cppblog.com/CppExplore/(2)boost::pool系列。boost的記憶體池最低層是simple_segregated_storage,類似於Loki中的chunk,在其中申請釋放block(boost中把block稱為c

技術系列 記憶體管理

2、定長記憶體池。典型的實現有LOKI、BOOST。特點是為不同型別的資料結構分別建立記憶體池,需要記憶體的時候從相應的記憶體池中申請記憶體,優點是可以在使用完畢立即把記憶體歸還池中,可以更為細粒度的控制記憶體塊。    與變長的相比,這種型別的記憶體池更加通用,另一方面對於

技術系列 記憶體管理

(2)boost::pool系列。boost的記憶體池最低層是simple_segregated_storage,類似於Loki中的chunk,在其中申請釋放block(boost中把block稱為chunk,暈死,這裡還是稱其為block)採用了和loki的chunk中同樣

Linux虛擬記憶體管理

分頁機制 虛擬記憶體—— 計算機的記憶體容量有限,而某些程序執行所需的記憶體空間可能超過記憶體總容量,因而出現機器記憶體容納不下該程序所有程式碼、資料和堆疊而只能容納其中一部分的情況。 虛擬儲存的基本思想:一個程序的程式碼、資料、堆疊的總容量可能超過可用實

Lua虛擬機器語法分析

      最近實在是忙,專案就快要釋出了,加班加點在所難免。繼上一篇關於lua基本資料型別的簡單分析後,我將繼續寫閱讀lua虛擬機器的原始碼筆記,這是第一次接觸虛擬機器工作原理,lua虛擬機器程式碼量不大,是個很好的學習的例子,應當堅持下去。關於語法分析,我覺得只需要弄清

深入理解java虛擬機器系列初篇:為什麼要學習JVM

前言 本來想著關於寫JVM這個專欄,直接寫知識點乾貨的,但是想著還是有必要開篇講一下為什麼要學習JVM,這樣的話讓一些學習者心裡有點底的感覺比較好... 原因一:面試 不得不說,隨著網際網路門檻越來越高,JVM知識也是中高階程式設計師階段必問的一個話題!現在不像以前了,以前會點html都好找工作,現在由於學習

侯捷 C++記憶體管理

本篇記錄 《侯捷 C++記憶體管理 》,整理各節的要點,以備查閱 1.Overview 2.記憶體分配的每一層面 3.四個層面的基本用法 1)、對比一下: 4.基本構件之一newdelete expression(上) ——》new和operator new、m

《深入理解java虛擬機器》讀書筆記---- 類載入機制

類載入的時機 1、類從虛擬機器載入到記憶體開始,到卸載出記憶體為止,整個生命週期分為七個階段:載入、驗證、準備、解析、初始化、使用和解除安裝。其中驗證、準備和解析統稱為連線階段。 2、載入、驗證、準備、初始化和解除安裝這五個階段是按順序執行的,而解析階段卻不一定,解析可以在初始化之後

《自己動手寫java虛擬機器》學習筆記-----命令列工具go

     專案地址:https://github.com/gongxianshengjiadexiaohuihui 在今年三月份的時候,看過這本書,但是可能知識儲備不足,許多東西都一知半解,導致看到一半就看不下去了,現在覺得自己進步挺大的,決定重新拾起這本書,並且把

部門第一次作業 在伺服器或虛擬機器上搭建網站伺服器的初步搭建

自己的伺服器上是CentOS系統且已用來搭建個人部落格,不想重灌Windows且不想已工作網站為主要網站,因此選用搭建虛擬機器的方式來完成任務。虛擬機器系統為Windows server 2008 R2標準版(本來我安裝的是web版,考慮到將來不知道還有哪些功能

深入理解作業系統原理程序管理

一、概述 1、為什麼引入程序 程式併發執行時具有如下特徵: 間斷性 程式在併發執行時,由於它們共享資源或為完成同一項任務而相互合作,使在併發程式之間形成了相互制約的關係。相互制約將導致併發程式具有“執行-暫停-執行”這種間斷性活動規律。 失去封閉性

iOS/OS X記憶體管理:基本概念與原理

CSDN移動將持續為您優選移動開發的精華內容,共同探討移動開發的技術熱點話題,涵蓋移動應用、開發工具、移動遊戲及引擎、智慧硬體、物聯網等方方面面。如果您想投稿、尋求《近匠》報道,或給文章挑錯,歡迎傳送郵件至tangxy#csdn.net(請把#改成@)。  在Objective-C的記憶體管理中,其實就

c/c++ 動態記憶體管理

C語言中 使用:malloc/calloc/realloc/free 進行動態記憶體管理 calloc:分配n個長度為size的連續記憶體空間,並初始為0 realloc:重新分配空間 void* realloc(void* p,size_t size)

記憶體管理

記憶體管理  記憶體分配的方式      記憶體分配方式有5種:        1)從靜態儲存區域分配。例如程式中定義的全域性變數和static變數就是這種方式分配記憶體的。記憶體在程式編譯的時候就已經分配好,這塊記憶體在程式的整個執行期間都存在。        2)在

Unity手遊框架 介面管理

引子 介面管理是做什麼用的?為了回答這個問題讓我們先來羅列與介面操作相關的程式碼: 在網路訊息的回掉函式中我們發現了對介面的顯示、隱藏及遮擋關係調整的操作。 public static void OnPacket_UserLogon(object

記憶體管理 ptmalloc基礎知識

    Top chunk對於主分配區和非主分配區的分配方式是不一樣的。對於非主分配區,會預先從mmap區銀河一塊較大記憶體模擬sub_heap,通過管理sub_heap來響應使用者請求。因為記憶體是按地址從低向高進行分配的,在空閒記憶體的最高處一定會存在著一塊空閒的chunk,叫做top chunk。當b