java 內存分布_一圖看懂JVM內存分布,永久記住!

經常在說JVM內存分布,也經常去看,但是總是在面試的時候說不清楚或者模糊,甚至有可能說錯,只有真正的理解,并且在心中有一個總結構圖才能記得清楚說的清楚!

| JVM總覽圖

java內存區域主要分程序計數器、Java虛擬機棧、本地方法棧、Java堆、方法區、直接內存。其中程序計數器、Java虛擬機棧、本地方法棧屬于線程隔離,即他們都有自己的線程歸屬,其他屬于線程共享的。

| 各分區詳解

a、程序計數器

這個是當前線程正在執行的字節碼行號指示器。根據這里面的內存數據來確定程序接下來執行的指令。每個線程都有一個,相互隔離,線程切換回來時才知道怎么執行。如果執行的是方法,這里記錄的是虛擬機字節碼指令的地址。當執行的是Native方法的時候為空(Undefined)。

因為只存儲一個指令,所以它不會出現任何OutOfMemoryError。也是唯一一個!

b、Java虛擬機棧

每個線程私有,里面裝的多個棧幀,每個棧幀對于的一個方法。里面存儲的是Java方法的內存模型。相當于描述的是一個方法需要的內容。

如下圖,每個線程都有一個虛擬機棧,每個棧中都有多個棧幀。每個棧幀代表一個方法,一個方法的執行就是棧幀的進棧與出棧。

比如一個main方法調用了Method1(),Method1()調用Method2()。當線程執行的時候,先main方法對應的棧幀壓入虛擬機棧,作為棧幀1。然后調用Method1()時,Method1()對應的棧幀壓入虛擬機棧,作為棧幀2。然后調用Method2()時對應的棧幀壓入虛擬機棧作為棧幀3。當Method2()方法執行完成,棧幀3彈出。接著Method1()繼續執行,執行完成棧幀2彈出,接著main方法繼續執行,執行完成棧幀1彈出。整個方法執行完成。

每個棧幀存就是對方法的描述。其中局部變量表就是一個方法里面定義的變量,其中包括:基本數據類型(boolean、byte、char、short、int、float、long、double)和對象引用。

注:long和double會占兩個局部變量空間。

異常:線程請求的棧深度大于虛擬機允許的深度,將拋出StackOverflowError異常。如果虛擬機棧可以動態擴展,當擴展的時候沒有申請到內存的時候拋出OutOfMemoryError.

c、本地方法棧

線程私有,和上一個Java虛擬機棧作用相似,Java虛擬機棧是為Java方法服務,本地方法棧是為Native服務。

d、Java堆

Java虛擬機管理最大的一塊,線程共享,存放對象實例和數組。分新生代(1/3)和老年代(2/3),新生代還可以分Eden(8/10)、From Survivor(1/10) 、To Survivor(1/10),是主要根據垃圾清理來分的。

異常:無法再對對象實例分配,并且堆也無法擴展時,將拋出OutOfMemoryError。

e、方法區

線程共享,主要存儲被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯后的代碼。

運行時常量池也是方法區的一部分,比如String有一個常量池,他就是放到這個里面的。

異常:當方法區無法滿足內存分配時,將拋出OutOfMemoryError異常。

f、直接內存

NIO通過使用Native函數庫直接分配對外內存。

異常:不受Java堆大小限制,但是受機器的物理內存限制,當各個內存區域大于機器物理內存的時候,會出現OutOfMemoryError。

| 總結

Java作為面向對象的一門語言,表面上是JVM內存分布以線程劃分,實則主要也是類和對象的分布。簡單的總結對比圖:

Java程序員日常學習筆記,如理解有誤歡迎各位交流討論!

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

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

相關文章

Winodows10 安全登錄(Administrator賬戶與Microsoft Account關聯

我們都知道windows系統最大的管理員是administrator,linux是root,從windows7時代開始,安裝操作系統的時候會在最后一步提示創建一個本地賬戶一直延續到windows8、windows8.1、windows10。近期微軟發布了windows10后,很多用戶都開始…

微信企業號三個連接模式

在銀行里做微信企業號開發有半年多了,因銀行封裝了調用微信企業號的方法,說是微信企業號開發,其實就是jsp,java代碼的編寫,銀行用的開發工具是EOS,對這個工具我只想說,用久了,就找不…

java opencv安裝路徑_Java搭建opencv開發環境

由本菜13歷經4天才搭建的好的Java OpenCv開發環境帶來 .PS:不保證過程都是必須的,必要的.反正我自己成功了... 嘿嘿嘿.官方網站SourceForge點擊FilesFiles因為我的機器是Mac,所以選擇了unix. 然后下載3.4.3版本3.4.3PS:主要是因為剛開始接觸這個OpenCv的時候是用HomeBrew裝的, …

iBatis——執行原理

a) 執行原理 1、 將一個對象作為 參數(對象可以是Java Bean,Map實現和基本類型的包裝類),參數對象將為SQL修改語句和查詢語句設定參數值。 2、 執行 mapped statement。這是SQL Maps最重要的步驟。SQL Map框架將創建一個PreparedS…

讓IT工作者過度勞累的12個壞習慣

1. QQ、MSN、Gtalk,一個都不少。壞習慣 由于聊天對象與聊天內容的不可控制性,使用即時通訊軟件是降低工作效率的罪魁禍首。有調查顯示,使用即時通訊軟件,工作效率會降低 20%. 2. “總想多看一點點”——忘記上網的目的。 本想查找…

flux java_Java反應式框架Reactor中的Mono和Flux

1. 前言最近寫關于響應式編程的東西有點多,很多同學反映對Flux和Mono這兩個Reactor中的概念有點懵逼。但是目前Java響應式編程中我們對這兩個對象的接觸又最多,諸如Spring WebFlux、RSocket、R2DBC。我開始也對這兩個對象頭疼,所以今天我們就…

MySQL grant 權限,分別可以作用在多個層次上

1. grant 作用在整個 MySQL 服務器上:grant select on *.* to dbalocalhost; -- dba 可以查詢 MySQL 中所有數據庫中的表。grant all on *.* to dbalocalhost; -- dba 可以管理 MySQL 中的所有數據庫2. grant 作用在單個數據庫上:grant select on testdb…

用了2年的EOS的感受

EOS是普元信息技術股份有限公司開發的產品,核心是eclipse,給eclipse穿上了很多衣服。不知道普元公司給eclipse捐款了沒。 開發人員可以從它的官網免費下載,免費用。免費版的服務器最多鏈接數是5個人,這5個人在生產上行不通的&…

java 線程分組_Java多線程可以分組,還能這樣玩!

前面的文章,棧長和大家分享過多線程創建的3種方式《實現 Java 多線程的 3 種方式》。但如果線程很多的情況下,你知道如何對它們進行分組嗎?和 Dubbo 的服務分組一樣,Java 可以對相同性質的線程進行分組。來看下線程類 Thread 的所…

關于Android構建

“IDE都是給小白程序員的,大牛級別的程序員一定是命令行控,終端控,你看大牛都是使用vim,emacs 就一切搞定” 這話說的雖然有些絕對,但是也不無道理,做開發這行要想效率高,自動化還真是缺少不了命令行工具&a…

普元EOS開發學習(二)

1、QueryFormQueryForm控件是一個用來輸入查詢條件的表單&#xff0c;作為一個代碼片斷&#xff0c;以<h:form></h:form>形式嵌入在JSP頁面中。表單提交時&#xff0c;根據控件生成時設置的邏輯&#xff0c;可以對指定數據集進行有條件查詢&#xff0c;同時可以根據…

java map class_Java:聲明一個包含兩個相關泛型類型的Map(Map,Class ?extends ClassB )...

另一種方法是提供自己的Map實現.如果擴展現有實現并使用新類型,則不需要太多代碼&#xff1a;public class CompatibleHashMap extends HashMap, ClassB> {}現在,一個CompatibleHashMap< String>只允許你把ClassA< String>作為鍵和ClassB< String>作為價值…

centos 6 安裝zabbix 3.0

1.安裝PHP Zabbix 3.0對PHP的要求最低為5.4&#xff0c;而CentOS6默認為5.3.3&#xff0c;完全不滿足要求&#xff0c;故需要利用第三方源&#xff0c;將PHP升級到5.4以上&#xff0c;注意&#xff0c;不支持PHP7 rpm -ivh http://repo.webtatic.com/yum/el6/latest.rpm yum in…

普元EOS開發學習(一)

警惕EOS的拖圖元開發導致技術退步&#xff0c;請閱博主《用了2年EOS后的感受》 --------------- EOS開發和原有的JAVA開發有很大的不同&#xff0c;在開發的過程中&#xff0c;只能看到JSP頁面的源代碼&#xff0c;如果想要了解到操作類型的代碼&#xff0c;那么你只能看到XML…

java 共享鎖 獨占鎖_java中的公平鎖、非公平鎖、可重入鎖、遞歸鎖、自旋鎖、獨占鎖和共享鎖...

一、公平鎖與非公平鎖1.1 概述公平鎖&#xff1a;是指多個線程按照申請鎖的順序來獲取鎖。非公平鎖&#xff1a;是指在多線程獲取鎖的順序并不是按照申請鎖的順序&#xff0c;有可能后申請的線程比先申請的線程優先獲取到鎖&#xff0c;在高并發的情況下&#xff0c;有可能造成…

GoogleNet網絡分析與demo實例

參考自 up主的b站鏈接&#xff1a;霹靂吧啦Wz的個人空間-霹靂吧啦Wz個人主頁-嗶哩嗶哩視頻這位大佬的博客 Fun_機器學習,pytorch圖像分類,工具箱-CSDN博客 1. GoogLeNet網絡詳解 GoogLeNet在2014年由Google團隊提出&#xff08;與VGG網絡同年&#xff0c;注意GoogLeNet中的L大…

解決win10安卓虛擬機每十幾分鐘藍屏重啟問題

2012年第一次接觸android&#xff0c;它的虛擬機是很慢的&#xff0c;如今Intel HAXM 技術為 Android 模擬器加速&#xff0c; 使模擬器運行度媲美真機&#xff0c; 徹底解決模擬器運行慢的問題。問題也是由它而來&#xff0c;因為驅動和系統不兼容造成的。 CPU必須I3及I3以上才…

pg_resetxlog清理的pg_xlog下的WAL日志

PostgreSQL的pg_xlog下有大量日志&#xff0c;空間不足&#xff0c;如何刪除&#xff1f; Darren1:postgres:/usr/local/pgsql/data/pg_xlog:>ls 000000010000000000000008.00000028.backup 00000001000000000000009D 0000000100000000000000C9 0000000100000000000000F5…

mysql備份:一,Xtrabackup

資料來自于馬哥 注明&#xff1a;此工具不能備份出sql語句。另外只能適用innodb存儲引擎。 一、安裝 1、簡介 Xtrabackup是由percona提供的mysql數據庫備份工具&#xff0c;據官方介紹&#xff0c;這也是世界上惟一一款開源的能夠對innodb和xtradb數據庫進行熱備的工具。特點&…

51服務的開啟方式

服務開啟方式的知識點見博文&#xff1a;http://blog.csdn.net/zengmingen/article/details/49425161步驟&#xff1a; 1、新建Android項目名“51服務的開啟方式” 2、新建一個類 MyService&#xff0c;繼承 Service 3、在清單文件里配置第二步建的service 4、在Myservice類中覆…