成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

jvm內存結構的原理及應用

這篇文章主要講解了“jvm內存結構的原理及應用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“jvm內存結構的原理及應用”吧!

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都網站設計、成都網站制作、企業(yè)官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯(lián)網時代的尼瑪網站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!

jvm內存結構概述

jvm內存結構的原理及應用
??jvm內存結構主要包括:方法區(qū)、堆、虛擬機棧、本地方法棧、程序計數器等五大部分, 下面我們來具體看一下每一個部分。

1.1 虛擬機棧

  • 作用:
    虛擬機棧描述的是java方法執(zhí)行的動態(tài)內存模型,通過進棧、出棧來實現(xiàn)方法的調用結構。

  • 分析:
    ??棧結構的特點是后進先出,方法調用的過程也是后調用的方法返回結果后,先調用的方法再接著執(zhí)行,你是干柴,我是烈火。你是魚兒,我是小河。(此處不知道是蛋孵化了雞,還是雞生出了蛋)

??以methodA調用methodB為例,來看一下方法棧的執(zhí)行過程 jvm內存結構的原理及應用
首先是主方法進入空棧(圖中免去了這一步),主方法中調用methodA --》 methodA入棧 --》 methodA調用methodB --》 methodB入棧 --》 methodB執(zhí)行完畢,出棧并返回返回值 --》 methodA執(zhí)行完畢,出棧并返回返回值 --》主線程執(zhí)行完畢并出棧(圖中免去了這一步)--》程序執(zhí)行完畢。
??那么methodA、methodB中到底包含了哪些內容呢?
??我們不如從方法定義的角度來思考一下,編寫程序時,里面經常出現(xiàn)的幾個要素無外乎:變量、控制結構(循環(huán)、分支)、函數調用(也可以叫方法),函數其實就是用一定的控制結構來操作變量,中間穿插著其他函數的調用,分支結構主要控制的是程序執(zhí)行到哪一行,這個由我們后面1.5章節(jié)要講到的程序計數器來實現(xiàn),函數調用層次如上面所說由虛擬機棧來支持,而變量以及方法的出口就是methodA、methodB中的主要內容。
??methodA、methodB在虛擬機棧中叫做棧幀,棧幀中包括變量(局部變量表-基本類型、對象引用-對象內存地址等)以及返回值地址等信息,可以看出棧幀中包含的內容是編譯器就可確定大小的,當進入一個方法時,需要分配多大的局部變量空間是完全確定的,在運行期中不會改變局部變量表的大小。

  • 此區(qū)域可能出現(xiàn)的異常:
    棧是有深度的,方法調用層次超過棧的深度,就會出現(xiàn)StackoverflowError,一般是遞歸調用時,基線條件不合理時,容易出現(xiàn)此問題。
    當棧的深度增大時,所需要的局部變量表空間也隨之增長,當超過一定界限時,會出現(xiàn)OutOfMemoryError異常。

1.2 本地方法棧

  • 作用:
    本地方法棧與虛擬機棧的區(qū)別是調用的是不同類型的方法,本地方法棧用于記錄native方法的調用,本地方法棧中未對native方法實現(xiàn)語言、數據結構等做強制規(guī)定,主要由虛擬機自己定義并實現(xiàn)。

  • 注:
    由于本地方法棧和虛擬機棧的作用非常相似,因此部分虛擬機的實現(xiàn)中,就將這兩塊區(qū)域合并成了一個區(qū)域,例如比較常用的Hotspot。

  • 此區(qū)域可能出現(xiàn)的異常
    與虛擬機棧相同,此區(qū)域也有可能出現(xiàn)StackoverflowError或OutOfMemoryError。

1.3 堆

  • 作用:
    堆是jvm是管理的內存中最大的一塊,此區(qū)域只有一個作用就是存放對象實例。(java是面向對象語言--》堆用于存放對象實例 --》堆占用空間最大,嗯,沒毛病鐵子。)

  • 注 :
    由于此區(qū)域占用內存空間最大,而且對象的創(chuàng)建與銷毀是比較頻繁的,那內存空間不夠用了怎么辦?跟殺豬挑最肥的宰是一個道理,此區(qū)域是垃圾回收的主要區(qū)域。java為我們省去了代碼層手動釋放內存的工作,通過垃圾回收器來實現(xiàn)自動化的內存回收(《7天精通java》:《21天c++從入門到入土》,知道自動垃圾回收的重要性了吧)

  • 此區(qū)域可能出現(xiàn)的異常:
    為對象分配空間時,內存不足,會出現(xiàn)OutOfMemoryError(敲黑板)。
    對應的排查策略:配置參數-XX:+HeapDumpOnOutOfMemoryError,這樣虛擬機在出現(xiàn)此異常時,會生成內存堆存儲快照,使用工具Eclipse Memory Analyzer或jprofiler,可以分析某些對象占用空間百分比,快速定位到問題,如果代碼存在問題,例如不停的創(chuàng)建某些對象,但并不釋放,那就要通過修改代碼來解決問題,如果代碼不存在問題,就需要通過加大物理內存,調整jvm堆參數來增加堆大小。(-Xms 堆初始化大小,-Xms 對空間最大大小,實際配置過程中,一般設置成一樣的大小,避免出現(xiàn)內存抖動,影響穩(wěn)定性)

1.4 方法區(qū)

  • 作用:
    方法區(qū)主要用于存取類信息、常量、靜態(tài)變量、運行時常量池等。

  • 分析:
    運行時常量池用于存取字面量和符號引用,當使用雙引號聲明String變量時,此變量并不是開辟到堆空間當中,而是開辟到方法區(qū)中的運行時常量池中的,運行時常量池不僅可以在編譯期產生,也可以在程序運行期間,動態(tài)產生,例如String中的intern方法,就是在程序運行狀態(tài)中將字符串值放到運行時常量池中的。

  • 此區(qū)域可能出現(xiàn)的異常:
    此區(qū)域在內存不足時,也會出現(xiàn)OutOfMemoryError異常。

1.5 程序計數器

  • 作用:
    程序計數器主要是用于記錄當前線程所執(zhí)行的字節(jié)碼的行號指示器,即當前線程執(zhí)行到了哪一行,由于功能比較簡單,所以與其他幾個區(qū)域相比,內存空間占用的非常小。

  • 此區(qū)域可能出現(xiàn)的異常:
    程序計數器的作用決定了在此區(qū)域中不會出現(xiàn)由程序本身導致的異常,如果此處出現(xiàn)異常,是jvm本身的設計缺陷。

  • 注:
    如果線程執(zhí)行的是java方法,計數器對應的是字節(jié)碼指令的地址,但是如果是native方法,底層是非java實現(xiàn)的,此時計數器對應的值是undefined

  • 引申:
    說到了程序計數器,在部分編程語言中,是支持goto關鍵字的,goto可以讓程序直接跳轉到指定行,java是不支持goto的,但是把goto作為了保留字,即java不支持此種語法,但是也不讓開發(fā)者去定義為變量,防止后續(xù)java發(fā)展過程中,加入goto關鍵字后,導致部分程序運行異常。

1.6 線程共享區(qū)與線程獨占區(qū)

??上面五個區(qū)域中,方法區(qū)和堆是線程共享的區(qū)域,這兩個區(qū)域中放置的內容是與線程無關的,任意一個線程都可能會訪問到這兩塊區(qū)域中的內容。
??對于每個線程來說,它的調用方法棧應該是獨屬于某個線程的,如果多個線程共用一個方法棧那程序的執(zhí)行順序是無法得到保障的,線程執(zhí)行到哪一行應該也是唯一的,因此方法棧、程序計數器是線程獨占的。

感謝各位的閱讀,以上就是“jvm內存結構的原理及應用”的內容了,經過本文的學習后,相信大家對jvm內存結構的原理及應用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關知識點的文章,歡迎關注!

名稱欄目:jvm內存結構的原理及應用
網頁地址:http://jinyejixie.com/article20/igogjo.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站制作、商城網站、建站公司、標簽優(yōu)化微信小程序、服務器托管

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

h5響應式網站建設
潼关县| 赤水市| 锡林郭勒盟| 通化市| 林口县| 晋宁县| 峨眉山市| 万年县| 台山市| 南部县| 剑阁县| 易门县| 十堰市| 无为县| 阜宁县| 无为县| 卓尼县| 德江县| 宜都市| 德州市| 新建县| 高清| 五莲县| 黄浦区| 绵竹市| 香河县| 商丘市| 肃南| 闽侯县| 左贡县| 铁岭市| 南平市| 黄龙县| 大荔县| 喀什市| 密山市| 开平市| 衡阳县| 株洲市| 新密市| 贺州市|