日韩在线首页I俄罗斯pornI男女猛烈激情XX00高潮动态I超碰免费97I乱人伦99久久I欧美日韩成人一区I最新日韩视频在线观看I粉嫩AV四季AV绯色AVI五月导航

×

java堆空間結構是怎樣的?java對象在內存中是怎樣分配的?

分類:云服務資訊 編輯:碼眼看世界 瀏覽量:106
2021-04-25 12:01:51

  java堆指的是java虛擬機管理的一塊內存,這塊內存可以說是最大的一塊,同時它也是被所有的線程共享的一塊區域,它的創建一般是在虛擬機啟動的時候。java堆的作用就是存儲對象實例,差不多所有的對象實例都是在這里進行內存分配的。現在有很多的朋友對于java堆的空間結構比較感興趣,那么java堆空間結構是怎樣的?java對象在內存中是怎樣分配的呢?下面新網就給朋友們詳細的來分析一下。


  java堆空間結構是怎樣的?
  Java堆可以細分為:新生代和老年代;在細致一點的有Eden空間、From Survivor空間、To Survivor空間等。
  這樣劃分的目的是為了使 JVM 能夠更好的管理堆內存中的對象,可以根據跟個年代的特點采用最適當的收集算法。在新生代中,每次垃圾收集時都發現有大批的對象死去,只有少量存活,那就選用復制算法,只需要付出少量存活對象的復制成本就可以完成收集。而老年代中因為對象存活率高、沒有額外空間對它進行分配擔保,就必須使用"標記---整理"算法來進行回收。

  絕大部分 Java 程序員應該都見過 "java.lang.OutOfMemoryError: PermGen space" 這個異常。這里的 "PermGen space"其實指的就是方法區。不過方法區和“PermGen space”又有著本質的區別。前者是 JVM 的規范,而后者則是 JVM 規范的一種實現,并且只有 HotSpot 才有 “PermGen space”,而對于其他類型的虛擬機,如 JRockit(Oracle)、J9(IBM) 并沒有“PermGen space”。由于方法區主要存儲類的相關信息,所以對于動態生成類的情況比較容易出現永久代的內存溢出。最典型的場景就是,在 jsp 頁面比較多的情況,容易出現永久代內存溢出。


  方法區與Java堆一樣,是各個線程共享的內存區域,它用于存儲已被Java虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯后的代碼等數據。
  在Java8中移除了永生代,取而代之是元空間(Metaspace) 移除了永久代(PermGen),替換為元空間(Metaspace)
  永久代中的 class metadata 轉移到了 native memory(本地內存,而不是虛擬機);
  永久代中的 interned Strings 和 class static variables 轉移到了 Java heap;
  永久代參數 (PermSize MaxPermSize) ->。
  Java 對象在堆中的內存結構
  我們知道,函數每次被調用時,在內存中都有自己的活動記錄(activation record),稱為棧空間(stack). Java 的方法在調用時在 JVM 棧中為其分配一個棧幀(Java棧空間的一個片段),可以稱之為方法棧. 原則上,所有對象都在堆空間(Heap)中分配。
  java對象在內存中是怎樣分配的呢?
  一旦對象在堆中分配了空間,那本質上就是一系列的字節,那么如何找到對象中某個特定的屬性域呢? 編譯器通過一個內部表來保存每個域的偏移量。
  子類對象和父類對象擁有同樣的內存分布,當然,子類對象需要更多的空間來存放新的屬性域。
  這種分配方式的好處在于 Base類型的指針 如果指向了子類Derived的對象,依然在開頭的地方"看見"Base對象。
  因此, 子類對象(Derived)采用 父類引用(Base) 來進行的操作 保證是安全的,因此在運行時不需要動態地檢查 Base 引用的實際類型。
 

  然而這種實現方式是沒有效率的,假若一個類有很多方法,那么每個對象就要持有20個指針,相應的,每個對象都需要20個指針的內存空間,這會導致創建對象變慢,所占空間更大。


  程序計數器:是一個數據結構,用于保存當前正常執行的程序的內存地址。Java虛擬機的多線程就是通過線程輪流切換并分配處理器時間來實現的,為了線程切換后能恢復到正確的位置,每條線程都需要一個獨立的程序計數器,互不影響,該區域為“線程私有”。

  Java虛擬機棧:線程私有的,與線程生命周期相同,用于存儲局部變量表,操作棧,方法返回值。局部變量表放著基本數據類型,還有對象的引用。


  本地方法棧:跟虛擬機棧很像,不過它是為虛擬機使用到的Native方法服務。
  Java堆:所有線程共享的一塊內存區域,對象實例幾乎都在這分配內存。

  方法區:各個線程共享的區域,儲存虛擬機加載的類信息,常量,靜態變量,編譯后的代碼。拿HotSpot 虛擬機來說,在 JDK1.7的時候,方法區被稱作為永久代, 從JDK1.8開始,Metaspace (元空間)也就是我們所謂的方法區!


  運行時常量池:代表運行時每個class文件中的常量表。包括幾種常量:編譯時的數字常量、方法或者域的引用。

  特別注意其中Java 堆和方法區是 線程共享的。其他都是 線程私有的。


  java堆空間結構是怎樣的?以上就給大家介紹了關于java堆空間結構的問題,對于java堆空間結構,我們如果比較感興趣的話,就可以認真的了解下,同時,我們還可以了解下java對象在內存中的分配情況,這個問題也是非常有意義的,這樣我們對java堆就有了更為深刻的認識,如果還有疑問的話,可以咨詢新網。


聲明:免責聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,也不承認相關法律責任。如果您發現本社區中有涉嫌抄襲的內容,請發

送郵件至:operations@xinnet.com進行舉報,并提供相關證據,一經查實,本站將立刻刪除涉嫌侵權內容。本站原創內容未經允許不得轉載,或轉載時

需注明出處:新網idc知識百科

免費咨詢獲取折扣

Loading
主站蜘蛛池模板: 狠狠五月深爱婷婷网 | 强奷乱码中文字幕熟女导航 | 无码熟妇人妻av影片在线 | 国产欧美做爰xxxⅹ在线观看 | 真人真事免费毛片 | aaa亚洲精品 | 亚洲最大的成人网站 | 欧美性猛交xxx乱大交3 | 亚洲成人一区在线 | 国产在线第一区二区三区 | 欧美日产国产精品日产 | aaaaa爽爽爽久久久 | 精品人妻av区波多野结衣 | 国产精品高清在线 | 久久久久久久无码高潮 | 高清国产天干天干天干不卡顿 | 亚洲日韩看片无码超清 | 成人国产一区二区三区精品麻豆 | 国产粉嫩高中无套进入 | 国产精品美女久久久久久久久 | 可以免费看的黄色 | 无码av天堂一区二区三区 | 亚洲人成色99999在线观看 | 久久97人人超人人超碰超国产 | 欧美黑人猛猛猛 | 日韩高清在线中文字带字幕 | 少妇高潮av | 国产精品一区二区三 | 无码人妻久久一区二区三区免费丨 | 国产10000部拍拍拍免费视频 | 午夜精品久久久久久久99热 | 国产l精品国产亚洲区久久 国产男男无套激情11069 | 黑人做爰xxxⅹ性欧美有限公司 | 无码av免费永久免费永久专区 | 日韩美女做爰高潮免费 | 亚洲精品在线免费观看视频 | 久久久久久一区二区三区四区别墅 | 欧美女同在线 | 自拍偷拍色 | 污18禁污色黄网站免费观看 | 丰满少妇久久久久久久 | 亚洲制服 视频在线观看 | 中文字幕爆乳julia女教师 | 免费观看全黄做爰大片国产 | 亚洲黄色一区二区三区 | 国产yw.196天堂网站 | 无码熟妇人妻av影音先锋 | 欧美又大又硬又粗bbbbb影院 | www.成年人| 亚洲欧美bt | 亚洲精品无码高潮喷水a片软 | 91精品国产日韩一区二区三区 | 亚洲精品无码久久久影院相关影片 | 九九热视频在线 | 国产精品亚洲аv久久 | aⅴ中文字幕不卡在线无码 精国产品一区二区三区四季综 | 67194成l人在线观看线路无码 | 精品国产成人国产在线视 | 无码h肉动漫在线观看免费 国产精品欧美亚洲777777 | 久久丁香网 | 黄色一大片 | 波多野结衣在线观看一区二区三区 | 欧美激情aaa | 超污视频在线观看 | 深夜视频免费在线观看 | √天堂资源地址在线官网 | 亚洲国产av无码男人的天堂 | 欧美午夜特黄aaaaaa片 | 亚洲国产精品一区第二页 | 国产精品女同一区二区在线 | 特色特色大片在线 | 国产精品1区2区3区4区 | 国产小受呻吟gv视频在线观看 | 情侣黄网站大全免费看 | 一区二区三区四区产品乱码在线观看 | 夜夜被公侵犯的美人妻 | 在线观看高清av | 国内精品少妇在线播放98 | 久久这里只有是精品23 | 性欧美xxx内谢 | 精品人妻大屁股白浆无码 | 婷婷嫩草国产精品一区二区三区 | 校园春色 亚洲色图 | 性生活视频网站 | 国产69精品久久久久观看软件 | 日本黄页网站免费大全 | 国产伦精品一区二区三区视频孕妇 | 成人区精品一区二区 | 少妇性荡欲视频 | 无码人妻丰满熟妇区五十路 | 亚洲∧v久久久无码精品 | 午夜性爽视频男人的天堂 | 无码制服丝袜人妻ol在线视频 | 日韩精品在线第一页 | www成人在线 | 黄网站免费永久在线观看网址 | 热久久99这里有精品综合久久 | 黑人太粗太深了太硬受不了了 | 中文字幕国产精品 |