JAVA虚拟机运行数据区
1.程序計數器
程序計數器是一段小的內存空間,可以把它看成當成線程所執行的字節碼的行號指示器。這個區域不會出現OUtOfMemoryError異常。
如果線程執行的是Java方法,則計數器記錄的是正在執行的虛擬機字節碼指令的地址;如果是Native方法,則計數器為空。
java虛擬機多線程是使用線程輪流切換并分配處理執行時間的方式來實現的,在任何一個確定的時刻,一個處理器都只會執行一條線程中的指令。為了線程切換后能夠恢復到正確的執行位置,每條線程都需要一套獨立的線程計數器
2.JAVA虛擬機棧
虛擬機棧也是線程私有的,它描述的是Java方法執行的內存模型。每個方法對應一個棧幀,存儲這個方法的各種信息。每次一個方法的執行,就對應一個棧幀在虛擬機棧入棧到出棧的過程。
如果線程請求的棧深度大于虛擬機所允許的深度,就會出現StackOverFlowException。如果允許動態擴展,在擴展的過程中,如果無法申請到足夠的內存,則會拋出OutOfMemoryException異常。
3.本地方法棧
與虛擬機棧相似,區別是虛擬機棧執行java方法,而本地虛擬機使用到的是native方法服務。
4..Java堆
Java堆是所有線程共享的內存區域,在虛擬機啟動的時候創建。此內存區域的目的是存放對象實例,幾乎所有對象實例都在這里分配內存。
Java堆是垃圾收集管理的主要區域。
5.方法區
方法區可以看作堆的邏輯部分,是各個線程共享的內存區域,存儲著虛擬機加載的常量,靜態變量,以及類信息。這個區域的內存回收的目標就是針對常亮池的回收和對類型的卸載,也是較為難處理的部分。
直接內存
直接內存并不是虛擬機運行時數據區的一部分,它是加入的NIO類引入的基于通道的存儲方式,它的原理是從用native函數庫得到一個堆外內存,然后用一個java類DirectByteBuffer來指向它,使得內存的容量增加。
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的JAVA虚拟机运行数据区的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装Cocoapods详细教程
- 下一篇: MAT内存管理使用