摘要:小結程序計數器和虛擬機棧是線程私有的,而堆和方法區是線程共享的除了虛擬機運行時內存,在中使用類可以直接操作本機內存。
Java的內存區域
運行時內存 程序計數器(Program Counter Register)Java虛擬機在執行Java程序中會把它所管理的內存劃分為若干個數據區域,這些區域有各自的用途,以及生命周期,有些依賴虛擬機進程啟動而存在,有些依賴用戶線程的啟動和結束而建立和銷毀
程序計數器是一塊較小的內存空間,可以看作是當前線程所執行的字節碼的指示器,字節碼解釋器通過改變這個計數器的值來選取下一條需要執行的字節碼指令。
由于Java虛擬機的多線程是通過線程調度(輪詢)切換分配處理器執行時間的方式來實現的,在任何一個確定的時刻都只會執行一條線程中的指令。所以為了當線程切換后能找到之前執行指令的位置,每個線程都需要有一個獨立的程序計數器,各個線程之間的程序計數器互相不影響,這類內存區域為“線程私有”的內存區域。
Java虛擬機棧和程序計數器一樣,Java虛擬機棧(以下簡稱棧)也是“線程私有”的,它的生命周期和線程相同,每個方法在執行時都會創建一個棧幀(Stack Frame)用于存儲局部變量表(方法中定義的變量),操作數棧,動態鏈接,方法出口等信息。每個方法從調用直至執行完成的過程,就是對應著一個棧幀在棧中入棧和出棧的過程。
本地方法棧本地方法棧和Java虛擬機棧一樣,本地方法棧用于執行Native方法
Java堆(Java Heap)Java堆是被所有線程共享的一塊內存區域,在虛擬機啟動時被創建。此內存區域的唯一目的就是存放對象的實例,幾乎所有的對象實例都在這里分配內存,Java堆是垃圾收集器管理的主要區域,由于現在很多收集器都采用分代收集算法,所有Java堆還可以細分為:新生代和老年代。可以通過-Xmx和-Xms來控制堆內存的大小
方法區方法區和Java堆一樣,也是各個線程共享的內存區域,它用于存儲已經被虛擬機加載的類信息,常量,靜態變量,即時編譯器編譯后的代碼等數據。一般也稱作為“永代區”(Permanent Generation),這里要特別說明一下,因為我們使用的主流虛擬機HotSpot的設計團隊用“永代區”來實現方法區,這樣HotSpot的垃圾收集器就可以像管理堆那樣管理這部分內存,在JDK1.7的HotSpot中,已經把字符串常量池移出“永代區”了。
直接內存(Direct Memory)直接內存并不是虛擬機運行時數據區的一部分,但是如果你使用了NIO的類,就會導致OutOfMemoryError異常出現
NIO引入了一種基于通道(Channle)與緩沖區(Buffer)的I/O方法,它可以使用Native函數庫直接分配堆外的內存,然后通過一個存儲在Java堆中的DirectByteBuffer對象作為這塊內存的引用進行操作。這樣能避免在Java堆和Native堆中來回復制數據的開銷,本機直接內存的分配不會受到Java堆大小的限制,但是會受到物理內存的限制,所有也會拋出OutOfMemoryError異常。
“程序計數器”和“Java虛擬機?!笔蔷€程私有的,而“Java堆”和“方法區”是線程共享的
除了虛擬機運行時內存,在Java中使用NIO類可以直接操作本機內存。
方法區在HotSpot中用于存放各種“常量信息”
Java堆中存放了程序中所有的對象實例
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64731.html
摘要:運行時數據區域虛擬機在執行程序的過程中會把它管理的內存劃分成若干個不同的數據區域。堆虛擬機所管理的內存中最大的一塊,堆是所有線程共享的一塊內存區域,在虛擬機啟動時創建。 《深入理解Java虛擬機:JVM高級特性與最佳實踐(第二版》讀書筆記 1 概述 對于Java程序員來說,在虛擬機自動內存管理機制下,不再需要像C/C++程序開發程序員這樣為內一個new 操作去寫對應的delete/...
摘要:深入理解虛擬機高級特性與最佳實踐第二版讀書筆記與常見面試題總結本節常見面試題介紹下內存區域運行時數據區。運行時數據區域虛擬機在執行程序的過程中會把它管理的內存劃分成若干個不同的數據區域。 《深入理解Java虛擬機:JVM高級特性與最佳實踐(第二版》讀書筆記與常見面試題總結 本節常見面試題: 介紹下Java內存區域(運行時數據區)。 對象的訪問定位的兩種方式。 1 概述 對于Java...
摘要:編譯參見深入理解虛擬機節走進之一自己編譯源碼內存模型運行時數據區域根據虛擬機規范的規定,的內存包括以下幾個運運行時數據區域程序計數器程序計數器是一塊較小的內存空間,他可以看作是當前線程所執行的字節碼的行號指示器。 點擊進入我的博客 1.1 基礎知識 1.1.1 一些基本概念 JDK(Java Development Kit):Java語言、Java虛擬機、Java API類庫JRE(...
閱讀 2448·2021-10-14 09:42
閱讀 1138·2021-09-22 15:09
閱讀 3545·2021-09-09 09:33
閱讀 3026·2021-09-07 09:59
閱讀 3639·2021-09-03 10:34
閱讀 3532·2021-07-26 22:01
閱讀 2822·2019-08-30 13:06
閱讀 1203·2019-08-30 10:48