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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java虚拟机 第二章Java内存区域与内存溢出异常

發(fā)布時間:2024/6/30 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java虚拟机 第二章Java内存区域与内存溢出异常 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、運行時數(shù)據(jù)區(qū)域

  1.1、程序計數(shù)器

      線程私有,當前線程所執(zhí)行的字節(jié)碼行號指示器,

      Java虛擬機的多線程是通過線程輪流切換處理器執(zhí)行時間的方式來分配

  1.2、Java虛擬機棧

      線程私有,,虛擬機的局部變量表每個方法在執(zhí)行的時候都會創(chuàng)建棧幀用于存儲局部變量,操作數(shù)棧,動態(tài)鏈接方法出口等信息,每個方法從開始到結束

    對應著一個棧幀從入棧到出棧的過程,

  1.3、本地方法棧

      線程私有,本地方法棧是為虛擬機執(zhí)行native方法服務,有的虛擬機獎本地方法棧與虛擬機棧合二為一。

  1.4、Java堆

      GC堆,垃圾收集器管理的主要區(qū)域,用于存放對象實例,幾乎所有的Java對象實例都在這里分配空間,

  1.5、方法區(qū)

      用于存放虛擬機加載的類信息,常量,靜態(tài)變量,方法區(qū)中包含的都是在整個程序中永遠唯一的元素,如class,static變量

  1.6、運行時常量池

       JVM在執(zhí)行某個類的時候,必須經(jīng)過加載、連接、初始化,而連接又包括驗證、準備、解析三個階段。

      而當類加載到內(nèi)存中后,jvm就會將class常量池中的內(nèi)容存放到運行時常量池中,由此可知,運行時常量池也是每個類都有一個。

      在解析階段,會把符號引用替換為直接引用,解析的過程會去查詢字符串常量池,也就是我們上面所說的StringTable,

      以保證運行時常量池所引用的字符串與字符串常量池中是一致的。

  1.7、直接內(nèi)存

      Java使用naive函數(shù)庫直接分配堆外內(nèi)存,避免了在java堆和native堆中來回復制數(shù)據(jù)

2、hotspot虛擬機

  2.1、對象的創(chuàng)建

      如果java虛擬機的空閑內(nèi)存是連續(xù)的,直接向后挪出一段與對象大小相等的距離,稱為 指針碰撞

      如果不連續(xù),則從剩余內(nèi)存中尋找出足夠大小的內(nèi)存存放,稱 為 空閑列表方式

        如何避免線程安全

            為每個線程分配空間

            cas配上失敗重試

  2.2對象的內(nèi)存布局

      對象頭:運行時的自身數(shù)據(jù)(哈希碼,gc分代年齡,鎖狀態(tài))、類型指針

      實例數(shù)據(jù):對象真正存儲的數(shù)據(jù)

      對齊填充:每個對象的起始地址必須為8字節(jié)的整數(shù)倍

  2.3 對象的訪問定位

      句柄訪問:reference指向句柄池接著再指向具體對象,避免了對象的修改而需要修改reference的修改,增加了一次尋址

      直接指針定位:直接指向具體對象,

轉(zhuǎn)載于:https://www.cnblogs.com/karryzhang/p/9607522.html

總結

以上是生活随笔為你收集整理的java虚拟机 第二章Java内存区域与内存溢出异常的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。