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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

内存分段分页机制理解_深入理解虚拟机,JVM高级特性-自动内存管理机制

發布時間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 内存分段分页机制理解_深入理解虚拟机,JVM高级特性-自动内存管理机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是自動內存管理機制?
對于java程序員來說,有一點是要比C/C++程序員要方便的,那就是程序在運行時,java程序不需要為每一個對象其編寫對應的釋放內存的代碼,JVM虛擬機將為你在合適的時間去釋放內存空間,程序不容易出現內存泄漏和內存溢出問題,這就是JVM的自動內存管理機制。而也正是因為我們將內存控制權交給了虛擬機,如果我們不了解虛擬機是怎樣使用內存,錯誤排查將會是一項艱難的工作。
在我們了解JVM如何管理內存之前,有必要了解一下JVM運行時的數據區域

程序計數器:
程序計數器是一塊較小的空間,它可以看作是當前線程所執行的字節碼文件的行號指令器。在虛擬機的概念里,字節碼解釋器工作時就是通過改變這個計數器來選取下一條需要執行的字節碼指令,分支,循環,跳轉,異常處理都需要依賴這個計數器來完成。
由于java虛擬機的多線程是由線程輪流切換執行時間來實現的,一個處理器在某一段時間都執行一條線程中的指令,因此為了切換執行后恢復到正確的位置,每條線程都需要一個獨立的計數器,各個線程互不影響,這類內存區域為線程私有的內存。Java虛擬機棧:
與程序計數器一樣,Java虛擬機棧也是線程私有的,它的生命周期與線程相同。虛擬機棧描述的是Java方法執行的內存模型:每個方法在執行的同時都會創建一個棧幀用于存儲局部變量表、操作數棧、動態鏈接、方法出口等信息。每一個方法從調用直至執行完成的過程,就對應著一個棧幀在虛擬機棧中入棧到出棧的過程。
在Java虛擬機規范中,對這個區域規定了兩種異常狀況:如果線程請求的棧深度大于虛擬機所允許的深度,將拋出StackOverflowError異常;如果虛擬機棧可以動態擴展(當前大部分的Java虛擬機都可動態擴展,只不過Java虛擬機規范中也允許固定長度的虛擬機棧),如果擴展時無法申請到足夠的內存,就會拋出OutOfMemoryError異常!本地方法棧:
本地方法棧與虛擬機棧所發揮的作用是非常相似的,它們之間的區別不過是虛擬機棧為虛擬機執行Java方法(也就是字節碼)服務,而本地方法棧則為虛擬機使用到的Native方法服務。在虛擬機規范中對本地方法棧中方法使用的語言、使用方式與數據結構并沒有強制規定,因此具體的虛擬機可以自由實現它。甚至有的虛擬機(譬如SunHotSpot虛擬機)直接就把本地方法棧和虛擬機棧合二為一。與虛擬機棧一樣,本地方法棧區域也會拋出StackOverflowError和OutOfMemoryError異常。
Java堆:
對于大多數應用來說,Java堆(JavaHeap)是Java虛擬機所管理的內存中最大的一塊。Java堆是被所有線程共享的一塊內存區域,在虛擬機啟動時創建。此內存區域的唯一目的就是存放對象實例,幾乎所有的對象實例都在這里分配內存。
Java堆是垃圾收集器管理的主要區域,因此很多時候也被稱做“GC堆”。從內存回收的角度來看,由于現在收集器基本都采用分代收集算法,所以Java堆中還可以細分為:新生代和老年代;再細致一點的有Eden空間、FromSurvivor空間、To Survivor空間等。從內存分配的角度來看,線程共享的Java堆中可能劃分出多個線程私有的分配緩沖區。不過無論如何劃分,都與存放內容無關,無論哪個區域,存儲的都仍然是對象實例,進一步劃分的目的是為了更好地回收內存,或者更快地分配內存。
根據Java虛擬機規范的規定,Java堆可以處于物理上不連續的內存空間中,只要邏輯上是連續的即可,就像我們的磁盤空間一樣。在實現時,既可以實現成固定大小的,也可以是可擴展的,不過當前主流的虛擬機都是按照可擴展來實現的(通過-Xmx和-Xms控制)。如果在堆中沒有內存完成實例分配,并且堆也無法再擴展時,將會拋出OutOfMemoryError異常。小結:
運行時數據區域Java虛擬機在執行Java程序的過程中會把它所管理的內存劃分為若干個不同的數據區域。這些區域都有各自的用途,以及創建和銷毀的時間,有的區域隨著虛擬機進程的啟動而存在,有些區域則依賴用戶線程的啟動和結束而建立和銷毀。

總結

以上是生活随笔為你收集整理的内存分段分页机制理解_深入理解虚拟机,JVM高级特性-自动内存管理机制的全部內容,希望文章能夠幫你解決所遇到的問題。

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