您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關如何深入了解Java虛擬機內存,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
程序計數器(Program Counter Register)
Java虛擬機棧(VM Stack)
本地方法棧(Native Method Stack)
方法區(method area)
堆(heap)
用來指示程序執行哪一條指令,這跟匯編語言的程序計數器的功能在邏輯上是一樣的。JVM規范中規定,如果線程執行的是非native方法,則程序計數器中保存的是當前需要執行的指令地址,如果線程執行的是native方法,則程序計數器中的值undefined。每個線程都有自己獨立的程序計數器。為什么呢?因為多線程下,一個CPU內核只會執行一條線程中的指令,因此為了使每個線程在線程切換之后能夠恢復到切換之前的程序執行的位置,所以每個線程都有自己獨立的程序計數器。
本地方法棧(Native Method Stack)與虛擬機棧所發揮的作用是非常相似的,它們之間的區別不過是虛擬機棧為虛擬機執行Java方法(也就是字節碼)服務,而本地方法棧則為虛擬機使用到的Native方法服務。與虛擬機棧一樣,本地方法棧區域也會拋出StackOverflowError和OutOfMemoryError異常。
在C語言中,程序員可以通過malloc函數和free函數在堆上申請和釋放空間。那么在Java中是怎么樣的呢?Java中的堆是用來存儲對象本身的以及數組(當然,數組引用是存放在Java棧中的),幾乎所有的對象實例都在這里分配內存。在Java中,程序員基本不用去關心空間釋放的問題,Java的垃圾回收機制會自動進行處理。另外,堆是被所有線程共享的,在JVM中只有一個堆。
上述就是小編為大家分享的如何深入了解Java虛擬機內存了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。