欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JVM內(nèi)存模型知識(shí)點(diǎn)總結(jié)

 更新時(shí)間:2019年05月26日 14:02:03   投稿:laozhang  
在本篇文章里小編給大家分享了關(guān)于JVM內(nèi)存模型的學(xué)習(xí)心得以及相關(guān)知識(shí)點(diǎn)總結(jié),有興趣的朋友們跟著學(xué)習(xí)下。

內(nèi)存模型如下圖所示

堆是Java虛擬機(jī)所管理的內(nèi)存最大一塊。堆是所有線程共享的一塊內(nèi)存區(qū)域,在虛擬機(jī)啟動(dòng)時(shí)創(chuàng)建。此內(nèi)存區(qū)域唯一的目的就是存放對象實(shí)例。所有的對象實(shí)例都在這里分配內(nèi)存

Java堆是垃圾收集器管理的主要區(qū)域。從內(nèi)存回收的角度來看,由于現(xiàn)在的垃圾收集器采用的是分代收集算法。所以,java堆又分為新生代和老年代。從內(nèi)存分配的角度來說,線程共享的java對中可能劃分出多個(gè)線程私有的fenp緩沖區(qū)(Thread Local Allocation Buffer)。

可以通過 -Xms、-Xmx分別控制堆初始化是最小堆內(nèi)存和最大堆內(nèi)存大小。

虛擬機(jī)棧

與程序計(jì)數(shù)器一樣,java虛擬機(jī)棧也是線程私有的,他的生命周期與線程相同。

虛擬機(jī)棧描述的是Java方法的執(zhí)行的內(nèi)存模型:每個(gè)方法在執(zhí)行的同時(shí)會(huì)創(chuàng)建一個(gè)棧楨(stack frame)用于存儲(chǔ)局部變量表、操作數(shù)棧、動(dòng)態(tài)鏈表、方法出口等信息。每個(gè)方法從調(diào)用直至執(zhí)行完成的過程,就對應(yīng)著棧楨在虛擬機(jī)棧中入棧到出棧的過程。

虛擬機(jī)棧存儲(chǔ)的數(shù)據(jù)類型 局部變量表

存放的是編譯器可知得到各種基本數(shù)據(jù)類型

boolean、byte、char、short、int、float、long、double、對象引用(refrence類型,不等同于對象本身,一個(gè)指向?qū)ο蟮钠鹗純?nèi)存位置的引用指針) 操作數(shù)棧動(dòng)態(tài)鏈表方法出口

常見異常在虛擬機(jī)規(guī)范中,對這個(gè)區(qū)域規(guī)定了兩種異常情況: 如果線程請求的棧深度大于虛擬機(jī)所允許的深度,將拋出StackOverflowError

如果虛擬機(jī)棧可以動(dòng)態(tài)擴(kuò)展,擴(kuò)展時(shí)無法申請做夠的內(nèi)存,將會(huì)爬出OutOfMemorryError

本地方法棧

與虛擬機(jī)棧發(fā)揮的作用非常類似,他們之間的區(qū)別是虛擬機(jī)棧為虛擬機(jī)執(zhí)行java方法服務(wù),而本地方法棧則為虛擬機(jī)使用到的native方法服務(wù)。與虛擬機(jī)棧一樣,本地房發(fā)展區(qū)域也會(huì)拋出StackOverflowError,OutOfMemorryError異常。

方法區(qū)(1.8后該區(qū)域被廢棄)

方法區(qū)與java堆一樣,是各個(gè)線程所共享的,它用來存儲(chǔ)已被虛擬機(jī)加載的類信息、常量、靜態(tài)變量、即時(shí)編譯后的代碼等數(shù)據(jù)。

方法區(qū)是jvm提出的規(guī)范,而永久代就是方法區(qū)的具體實(shí)現(xiàn)。

java虛擬機(jī)對方法區(qū)的限制非常寬松,可以像堆一樣不需要連續(xù)的內(nèi)存可可選擇的固定大小外,還可以選擇不識(shí)閑垃圾收集,相對而言,垃圾收集行為在這邊區(qū)域是比較少出現(xiàn)的。

在方法區(qū)會(huì)報(bào)出 永久代內(nèi)存溢出的錯(cuò)誤。而java1.8為了解決這個(gè)問題,就提出了meta space(元空間)的概念,就是為了解決永久代內(nèi)存溢出的情況,一般來說,在不指定 meta space大小的情況下,虛擬機(jī)方法區(qū)內(nèi)存大小就是宿主主機(jī)的內(nèi)存大小

程序計(jì)數(shù)器

程序計(jì)數(shù)器是一塊較小的內(nèi)存空間,他可以看做是當(dāng)前線程所執(zhí)行字節(jié)碼的行號(hào)指示器。在虛擬機(jī)的概念模型里,字節(jié)碼解釋器工作時(shí)就是通過改變這個(gè)計(jì)數(shù)器的值來選擇下一條將要執(zhí)行的字節(jié)碼指令。

由于JAVA虛擬機(jī)的多線程是通過多線程流轉(zhuǎn)切換并分配處理器執(zhí)行時(shí)間的方式來實(shí)現(xiàn)的。在任一一個(gè)確定的時(shí)刻,一個(gè)處理器都只會(huì)執(zhí)行一條線程中的指令。因此,為了線程切換后能恢復(fù)到正確的執(zhí)行位置,每條線程都需要一個(gè)獨(dú)立的程序計(jì)數(shù)器,各個(gè)線程的計(jì)數(shù)器之間互不影響,獨(dú)立存儲(chǔ),我們稱該類內(nèi)存區(qū)域?yàn)榫€程私有

如果線程正在執(zhí)行一個(gè)Java方法,這個(gè)計(jì)數(shù)器記錄的是正在執(zhí)行的虛擬機(jī)字節(jié)碼指令的地址。

運(yùn)行時(shí)常量池

運(yùn)行時(shí)常量池是方法區(qū)的一部分。Class文件除了 有類的版本、字段、方法、接口等描述信息外,還有一項(xiàng)是常量池,用于存放編譯期生成的各種字面量和符號(hào)引用,這部分內(nèi)容在類加載后進(jìn)入方法區(qū)的運(yùn)行時(shí)常量池。

運(yùn)行時(shí)常量池相對于Class文件常量池的另外一個(gè)重要特征是具備動(dòng)態(tài)性.Java語言并不要求常量一定只有在編譯器才能產(chǎn)生,依舊是并非預(yù)置入Class文件中的常量池的內(nèi)容才能進(jìn)入方法區(qū)運(yùn)行時(shí)常量池

以上就是關(guān)于學(xué)習(xí)JVM內(nèi)存模型的知識(shí)點(diǎn)內(nèi)容總結(jié),感謝大家對腳本之家的支持。

相關(guān)文章

  • java讀取txt文件并輸出結(jié)果

    java讀取txt文件并輸出結(jié)果

    這篇文章主要介紹了java讀取txt文件并輸出結(jié)果,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 關(guān)于gradle多模塊項(xiàng)目依賴管理方式

    關(guān)于gradle多模塊項(xiàng)目依賴管理方式

    這篇文章主要介紹了關(guān)于gradle多模塊項(xiàng)目依賴管理方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • SpringBoot集成SpringSecurity安全框架方式

    SpringBoot集成SpringSecurity安全框架方式

    這篇文章主要介紹了SpringBoot集成SpringSecurity安全框架方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • SpringBoot整合Lucene實(shí)現(xiàn)全文檢索的詳細(xì)步驟

    SpringBoot整合Lucene實(shí)現(xiàn)全文檢索的詳細(xì)步驟

    全文搜索(Full-Text?Search)是指對大規(guī)模存儲(chǔ)在計(jì)算機(jī)系統(tǒng)中的文本數(shù)據(jù)進(jìn)行檢索和匹配的技術(shù),它允許用戶輸入關(guān)鍵字,然后從海量的文本數(shù)據(jù)中快速找到相關(guān)的信息,本文介紹了SpringBoot整合Lucene實(shí)現(xiàn)全文檢索的詳細(xì)步驟,需要的朋友可以參考下
    2024-03-03
  • Java使用反射和動(dòng)態(tài)代理實(shí)現(xiàn)一個(gè)View注解綁定庫

    Java使用反射和動(dòng)態(tài)代理實(shí)現(xiàn)一個(gè)View注解綁定庫

    這篇文章主要介紹了Java使用反射和動(dòng)態(tài)代理實(shí)現(xiàn)一個(gè)View注解綁定庫,代碼簡潔,使用簡單,擴(kuò)展性強(qiáng),結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • 如何在?Spring?Boot?中使用?OpenAI?ChatGPT?API

    如何在?Spring?Boot?中使用?OpenAI?ChatGPT?API

    這篇文章主要介紹了如何在Spring?Boot中使用OpenAI?ChatGPT?API,我們探索了 OpenAI ChatGPT API 以生成對提示的響應(yīng),我們創(chuàng)建了一個(gè) Spring Boot 應(yīng)用程序,它調(diào)用 API 來生成對提示的響應(yīng),需要的朋友可以參考下
    2023-08-08
  • Spring Boot 2.0 配置屬性自定義轉(zhuǎn)換的方法

    Spring Boot 2.0 配置屬性自定義轉(zhuǎn)換的方法

    這篇文章主要介紹了Spring Boot 2.0 配置屬性自定義轉(zhuǎn)換的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-11-11
  • Java大數(shù)據(jù)處理的核心技術(shù)MapReduce框架

    Java大數(shù)據(jù)處理的核心技術(shù)MapReduce框架

    MapReduce是一種分布式計(jì)算框架,適用于大規(guī)模的數(shù)據(jù)處理。它將大數(shù)據(jù)分成多個(gè)小數(shù)據(jù)塊,通過Map和Reduce兩個(gè)階段對數(shù)據(jù)進(jìn)行處理和分析。MapReduce框架具有可靠、高效、可擴(kuò)展等特點(diǎn),已經(jīng)成為大數(shù)據(jù)處理的核心技術(shù)
    2023-05-05
  • 使用Mybatis Generator結(jié)合Ant腳本快速自動(dòng)生成Model、Mapper等文件的方法

    使用Mybatis Generator結(jié)合Ant腳本快速自動(dòng)生成Model、Mapper等文件的方法

    這篇文章主要介紹了使用Mybatis Generator結(jié)合Ant腳本快速自動(dòng)生成Model、Mapper等文件的方法的相關(guān)資料,需要的朋友可以參考下
    2016-06-06
  • Java計(jì)算兩個(gè)日期時(shí)間之間的天數(shù)最簡方法

    Java計(jì)算兩個(gè)日期時(shí)間之間的天數(shù)最簡方法

    這篇文章給大家分享了Java計(jì)算兩個(gè)日期時(shí)間之間的天數(shù)最簡單的實(shí)現(xiàn)方法,有興趣的朋友可以參考學(xué)習(xí)下。
    2018-07-07

最新評(píng)論