日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JVM_java内存区域

發布時間:2025/3/15 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JVM_java内存区域 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java內存區域圖如下:

程序計數器:



Java虛擬機棧:
和程序計數器一樣,是線程私有的,它的生命周期與線程相同。每個方法被執行的時候都會同時創建一個棧幀用于存儲局部變量、操作棧、動態鏈接、方法出口等消息。每一個方法被調用直至執行完成的過程,就對應著一個棧幀在虛擬機中從入棧到出棧的過程。
局部變量表存放了編譯期可知的各種基本數據類型(boolean、byte、char、short、int、float、long、double)、對象引用(reference類型,它不等同于對象本身,根據不同的虛擬機實現,它可能是一個指向對象起始地址的引用指針,也可能指向一個代表對象的句柄或者其他此對象相關位置)和returnAddress類型(指向了一條字節碼指令地址)。
這個區域規定了兩種異常:如果線程請求的棧深度大于虛擬機所允許的深度,將拋出StackOverflowError異常;如果虛擬機可以動態擴展,當擴展無法申請到足夠的內存時會拋出OutOfMemoryError異常。

本地方法棧
本地方法棧和虛擬機棧所發揮的作用非常相似,其區別不過是虛擬機棧為虛擬機執行Java方法(也就是字節碼)服務,而本地方法棧則是為虛擬機使用到Native方法服務。與虛擬機一樣本地方法棧會拋出StackOverflowError和OutOfMemoryError。

Java堆
對于大多數應用來說,Java堆(Java heap)是Java虛擬機所管理的內存中最大的一塊。Java堆是被所有線程共享的一塊內存區域,在虛擬機啟動時創建。此內存區域的唯一目的就是存放對象實例,幾乎所有的對象實例都在這里分配內存。所有對象實例以及數組都要在堆上分配。
Java堆是垃圾收集器管理的主要區域,因此很多時候也被稱作“GC堆(Garbage Collected Heap)”。Java堆中還可以細分為:新生代和老年代‘再細致一點的有Eden空間、From Survivor空間、To Survivor空間等。

方法區
方法區與Java堆一樣,是各個線程共享的內存區域,它用于存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯后的代碼等數據。

運行時常量池是方法區的一部分,class文件中除了有類的版本、字段、方法、接口等描述等信息外,還有一項信息就是常量池,用于存放編譯期生產的各種字面量和符號引用,這部分內容將在類加載后存放到方法區的運行時常量池中。
上面是方法區域的介紹

對象訪問
對象在訪問時會涉及到Java棧、Java堆、方法區這三個最重要內存區域之間的關聯
Object obj=new Object();
這句話中,“Object obj”的語義將會反映到Java棧的本地變量表中,作為一個reference類型數據出現。而“new Object()”這部分的語義將會反映到Java堆中,形成了一塊存儲了Object類型所有實例數據值的結構化內存。
另外,在Java堆中還必須包括能查到此對象類型數據(如對象類型、父類、實現的接口、方法等)的地址信息,這些類型數據則存儲在方法區中。

使用句柄方式訪問:

使用直接指針訪問方式:


實戰:OutOfMemoryError
Java堆溢出:
Java堆用于存儲對象實例,我們只要不斷地創建對象,并且保證GC Roots到對象之間有可達路徑來避免垃圾回收機制清楚這些對象,就會在對象數量到達最大堆的容量限制后產生內存溢出異常。


首先是判斷是內存泄漏還是內存溢出。

虛擬機和方法棧溢出

總結

以上是生活随笔為你收集整理的JVM_java内存区域的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。