Java -----JVM運行時數據區

一、JVM體系結構

想要了解運行時數據區,先關注一下JVM的體系結構,知道數據區在JVM的整體位置和作用。

JVM

二、JVM運行時數據區

1.程序計數器

一塊較小的內存空間,它是當前線程所執行的字節碼的行號指示器,字節碼解釋器工作時通過改變該計數器的值來選擇下一條需要執行的字節碼指令,分支、跳轉、循環等基礎功能都要依賴它來實現。每條線程都有一個獨立的的程序計數器,各線程間的計數器互不影響,因此該區域是線程私有的。

??? 當線程在執行一個Java方法時,該計數器記錄的是正在執行的虛擬機字節碼指令的地址,當線程在執行的是Native方法(調用本地操作系統方法)時,該計數器的值為空。另外,該內存區域是唯一一個在Java虛擬機規范中沒有規定任何OOM(內存溢出:OutOfMemoryError)情況的區域。

2.Java虛擬機棧—JVM Stacks

JVM棧是線程私有的,每個線程創建的同時都會創建JVM棧,java虛擬機對Java棧的兩種操作:以幀為單位的壓棧和彈棧。

每當線程調用一個Java方法是,虛擬機都會在該線程的Java棧中亞茹一個新的棧幀。而這個棧幀存儲著該方法的參數,局部變量,中間運算結果等等數據。

棧幀

由三部分組成:局部變量、操作數棧和幀數據區

局部變量:包含對應方法的參數和局部變量,局部變量區是以字長為單位存儲數據的,并且是一個從0開始計數的數組空間,數據類型int 、float、對象的引用reference和returnAddress被存儲在一個存儲空間,而類型byte、short和char的值存入數組前都會被轉換成int值。一次也是占據一個存儲空間,long和double在數組中占據連續的兩個存儲空間。

方法1?????? 方法一存儲

可以看到在0的位置會存儲一個隱含的變量this,用老表示調用該方法的對象本身。

類方法???????? 類方法存儲

而類方法并沒有this,因為類方法只與類相關。而與具體的對象無關。

操作數棧

虛擬機在操作數棧中存儲的是方法運算的操作數和運算結果,操作方式是壓棧和出棧,數據的存儲方式和上面說的局部變量存儲方式是一樣的。

Java虛擬機中國是沒有寄存器的,這也是符合JVM平臺無關特性的一點,虛擬機把操作數棧作為他的工作區,大多數指令都會從這里彈出數據,執行運算,然后再把結果壓回操作數棧

幀數據區

Java棧幀還需要一些數據來支持常量池解析、正常方法返回以及異常派發機制,這些信息都被保存在Java棧幀的幀數據區中

?

3.本地方法棧(Native Method Stacks)

該區域與虛擬機棧所發揮的作用非常相似,只是虛擬機棧為虛擬機執行Java方法服務,而本地方法棧則為使用到的本地操作系統(Native)方法服務。

4.Java堆(Java Heap)

它是JVM用來存儲對象實例以及數組值的區域,可以認為Java中所有通過new創建的對象的內存都在此分配,Heap中的對象的內存需要等待GC進行回收。

5.方法區域(Method Area)

方法區在JVM中也是一個非常重要的區域,它與堆一樣,是被線程共享的區域。在方法區中,存儲了每個類的信息(包括類的名稱、方法信息、字段信息)、靜態變量、常量以及編譯器編譯后的代碼等。

  在Class文件中除了類的字段、方法、接口等描述信息外,還有一項信息是常量池,用來存儲編譯期間生成的字面量和符號引用。

 在方法區中有一個非常重要的部分就是運行時常量池,它是每一個類或接口的常量池的運行時表示形式,在類和接口被加載到JVM后,對應的運行時常量池就被創建出來。當然并非Class文件常量池中的內容才能進入運行時常量池,在運行期間也可將新的常量放入運行時常量池中,比如String的intern方法。

在JVM規范中,沒有強制要求方法區必須實現垃圾回收。很多人習慣將方法區稱為“永久代”,是因為HotSpot虛擬機以永久代來實現方法區,從而JVM的垃圾收集器可以像管理堆區一樣管理這部分區域,從而不需要專門為這部分設計垃圾回收機制。不過自從JDK7之后,Hotspot虛擬機便將運行時常量池從永久代移除了。

總結:

內存區域

轉載于:https://www.cnblogs.com/Actexpler-S/p/7668662.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/251701.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/251701.shtml
英文地址,請注明出處:http://en.pswp.cn/news/251701.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

20155235 《網絡攻防》 實驗八 Web基礎

20155235 《網絡攻防》 實驗八 Web基礎 實驗內容 Web前端HTML(0.5分) 能正常安裝、啟停Apache。理解HTML,理解表單,理解GET與POST方法,編寫一個含有表單的HTML。Web前端javascipt(0.5分) 理解JavaScript的基本功能,理解DOM。編寫JavaScript驗…

python每天1道面試題(3)--字符串組合

""" 題目3:輸入一個字符串,輸出該字符串中字符的所有組合。舉個例子,如果輸入abc,它的組合有a、b、c、ab、ac、bc、abc。解題思路: 先用列舉法,舉例出組合元素長度分別是1,2,..,len(str)時的具體元素, 然后發現當數…

【每周一圖】蜂鳥

攝影/祈澈姑娘小花園偶遇的一只蜂鳥轉載于:https://www.cnblogs.com/wangting888/p/9702088.html

API網關如何實現對服務下線實時感知

上篇文章《Eureka 緩存機制》介紹了Eureka的緩存機制,相信大家對Eureka 有了進一步的了解,本文將詳細介紹API網關如何實現服務下線的實時感知。 一、前言 在基于云的微服務應用中,服務實例的網絡位置都是動態分配的。而且由于自動伸縮、故障和…

TCP為什么要三次握手和四次揮手

http://www.jellythink.com/archives/705 簡析TCP的三次握手與四次分手 https://zhuanlan.zhihu.com/p/24001696 計算機網絡面試題 https://www.zhihu.com/question/36930631 TCP四次分手中,主動關閉方最后為什么要等待2MSL之后才關閉連接? http://ww…

Java處理文件BOM頭的方式推薦

背景: java普通的文件讀取方式對于bom是無法正常識別的。 使用普通的InputStreamReader,如果采用的編碼正確,那么可以獲得正確的字符,但bom仍然附帶在結果中,很容易導致數據處理出錯。另外,對于存在BOM頭的…

封裝svg組件

如何封裝svg圖標組件 封裝svg圖標組件的方法有很多種,如果只是單純的想使用svg圖標,可以將svg導出fonts字體圖標使用,但這樣做會失去svg原有的樣式與尺寸,也可以當成img圖片或者背景引入,但這樣做非常繁瑣。 最近項目中…

RabbitMQ 延遲隊列,消息延遲推送

應用場景 目前常見的應用軟件都有消息的延遲推送的影子,應用也極為廣泛,例如: 淘寶七天自動確認收貨。在我們簽收商品后,物流系統會在七天后延時發送一個消息給支付系統,通知支付系統將款打給商家,這個過程…

windows Navicat Premium連接oracle

需要下載并指定Instant Client 下載地址:在oracle官網搜索Instant Client Downloads選擇自己需要的客戶端 //說明 //Navicat 版本 9 或以上捆綁了 instant client,但是捆綁的用不了,捆綁的10.2。因此下載高版本替換之 //版本有要求&#xff0…

關于arraylist的擴容機制

ArrayList會自動改變size的長度: 首先,ArrayList定義了一個私有的未被序列化的數組elementData,用來存儲ArrayList的對象列表(注意只定義未初始):private transient Object[] elementData;   其次&am…

不同級別UI設計師的區別有哪些?

不同等級的UI設計師在工作內容以及基本的薪資待遇方面也是有區別的,很多在UI培訓學校學習的小伙伴們并不知道各個等級的UI設計師工作內容有什么差別,那么合肥學碼思小編就給大家總結一下這些區別分別表現在哪些方面。 一、初級UI設計師 初級UI設計師的主…

Linux命令行參數前加--,-和不加杠

參數前“-”的表明后面的參數是字符形式。參數前“--”的則表明后面的參數是單詞形式。參數前有橫的是System V風格。 參數前沒有橫的是BSD風格。 轉載于:https://www.cnblogs.com/YYRise/p/9090476.html

反射筆記-----------------------------

1.反射基本概念: 01.定義: 反射是指在程序運行期間,能夠觀察和修改類或者類的對象的屬性和行為的特性! 02.作用: 001.在運行期間獲取類的修飾符,包名,類名,實現的接口,繼…

kubernetes 集群部署

kubernetes 集群部署 環境JiaoJiao_Centos7-1(152.112) 192.168.152.112JiaoJiao_Centos7-2(152.113) 192.168.152.113JiaoJiao_Centos7-3(152.114) 192.168.152.114已開通 4C8G80G 集群規劃 部署方式 環境準備:基于主機名稱通信,時間同步,關…

PHP學習筆記--抽象類和抽象方法的應用

抽象類** 什么是抽象方法?** 定義:如果一個類中的方法,沒有方法體的方法就是抽象方法(就是一個方法沒有使用{}而直接使用分號結束)* * abstract function test(); //抽象方法* * function test(){ //有方法體…

wordpress 顯示數學公式 (MathJax-LaTeX)

blog 不放一堆數學公式怎么能顯得高大上,所以 MathJax-LaTeX 也是必裝的插件之一了。 一、安裝 MathJax-LaTex 插件 直接在 wordpress 插件中,搜索并安裝 MathJax-LaTeX 二、安裝本地 MathJax 服務 不過由默認的 MathJax cdn 服務經常被墻,所…

長春理工大學第十四屆程序設計競賽(重現賽)F.Successione di Fixoracci

鏈接:https://ac.nowcoder.com/acm/contest/912/F 題意: 動態規劃(Dynamic programming,簡稱dp)是一種通過把原問題分解為相對簡單的子問題的方式求解復雜問題的方法。例如,假設小x一步能爬1層或2層臺階,求小x爬n層臺階…

ConstraintLayout

ConstraintLayout使用筆記 具體使用參考:http://blog.csdn.net/guolin_blog/article/details/53122387 ConstraintLayout 好處還是很明顯,確實可以減少嵌套。性能對比參閱:http://www.cnblogs.com/liujingg/p/7161319.html 簡單嵌套Constrain…

css權重

權重大小 內嵌權重為1000 <p style"color: yellow;">ALEX</p> id選擇器的權重為100&#xff0c;類選擇器的權重為10&#xff0c;標簽選擇器的權重為1. /*1 1 1*/ #box1 .wrap2 p{color: red; }當權重一樣的時候&#xff0c;是以后設置的屬性為準&#xf…

手機兩列布局,正方形

手機兩列布局&#xff0c;正方形。 直接貼出調試網站的結果&#xff0c;閱讀效果還不錯。 轉載于:https://www.cnblogs.com/blogzhang/p/11002428.html