最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java運(yùn)行時數(shù)據(jù)區(qū)域和類結(jié)構(gòu)詳解

 更新時間:2021年07月31日 10:35:26   作者:xiaoluo5238  
這篇文章主要介紹了java運(yùn)行時數(shù)據(jù)區(qū)域和類結(jié)構(gòu),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Java運(yùn)行時數(shù)據(jù)區(qū)域

java運(yùn)行時數(shù)據(jù)區(qū)可以分為:方法區(qū)、虛擬機(jī)棧、本地方法棧、堆和程序計數(shù)器

線程私有:虛擬機(jī)棧、本地方法棧、程序計數(shù)器

線程共享:方法區(qū)、堆

程序計數(shù)器

一塊較小的內(nèi)存空間,當(dāng)前線程所執(zhí)行字節(jié)碼的行號指示器,它是程序控制流的指示器,分支、循環(huán)、跳轉(zhuǎn)、異常處理、線程恢復(fù)等基礎(chǔ)功能都需要依賴這個計數(shù)器來完成。

每條線程都擁有一個獨(dú)立的程序計數(shù)器。

Java虛擬機(jī)棧

線程私有的,它的生命周期與線程相同。

每個方法被執(zhí)行時,java虛擬機(jī)都會創(chuàng)建一個棧幀,用于存儲 局部變量表、操作數(shù)棧、動態(tài)鏈接、方法出口等信息

動態(tài)鏈接:符號在運(yùn)行中轉(zhuǎn)化為直接引用的過程,就是動態(tài)連接(預(yù)支對應(yīng)的靜態(tài)連接,是指類加載階段將靜態(tài)的符號引用轉(zhuǎn)成)。

本地方法棧

作用于java虛擬機(jī)棧類似,不過作用的是本地的native 方法。

java堆

線程共享的一塊內(nèi)存區(qū)域,用來存放對象實例?!皫缀酢彼械膶ο蠖挤峙湓诙阎?。

由于及時編譯,特別是逃逸分析技術(shù)日益請打,對象也不一定分配在堆中(可能棧上分配標(biāo)量替換)。

java堆中可以劃分出多個線程私有的分配緩沖區(qū)(TLAB)來提高對象分配效率,這個TLAB只保證該線程才能在此分配,但是所有線程都是可以進(jìn)行訪問的。

方法區(qū)

線程共享,存放虛擬機(jī)加載的類型信息、常量靜態(tài)變量、即時編輯器編譯后的代碼緩存等數(shù)據(jù)。

方法區(qū)的運(yùn)行時常量池:存放 類加載器中加載Class文件中的常量池表。

java對象內(nèi)存分配

字節(jié)碼new 指令 -> 檢查常量池 ->類加載器(加載、連接(檢查、準(zhǔn)備、解析)、初始化)

檢查后,就要為新生對象進(jìn)行內(nèi)存分配了。分配策略:

在這里插入圖片描述

逃逸分析

分析對象的作用域是否在本方法中,如果只有在本方法中,那么他可以棧上分配,逃逸分析jdk7以后是默認(rèn)開啟的。

new 的對象不一定在堆中,他可能在棧上分配和標(biāo)量替換

棧上分配:JVM調(diào)優(yōu)方式之一,方法的對象如果不逃逸在外,那么它可以分配在棧上,他的生命周期與方法調(diào)用一致,減小GC的壓力。

標(biāo)量替換:如果對象不存在逃逸,JVM可能不會創(chuàng)建該對象,而是將該對象變量分解成若干個成員變量所替換,這樣就可以在棧幀或寄存器上分配(不用連續(xù)的空間),jdk7默認(rèn)開啟。標(biāo)量替換優(yōu)先于棧上分配。

TLAB:線程本地分配緩存區(qū)(也是堆中)

Eden中分配內(nèi)存時,如果多個線程都同時分配內(nèi)存,會造成指針碰撞情況,為了提高對象分配效率,使用TLAB。

線程初始化時,會申請一點指定大小的內(nèi)存,只提供當(dāng)前線程進(jìn)行內(nèi)存分配,這樣每個線程都單獨(dú)擁有一個空間。

TLAB是虛擬機(jī)在堆內(nèi)存的eden劃分出來的一塊專用空間。

TLAB沒有沒有足夠空間來滿足操作時,需要向當(dāng)前線程重新申請新的TLAB

java類文件結(jié)構(gòu)

class 字節(jié)碼的文件結(jié)構(gòu),嚴(yán)格按照順序記性解析

類型 名稱 備注
u4 magic 魔數(shù),識別Class文件格式,值為:0XCAFEBABE
u2 minor_version 副版本號
u2 major_version 主版本號,45-?,JDK13為57,JDK8為52
u2 constant_pool_count 常量池計算器
cp_info constant_pool 常量池,class資源庫
u2 access_flags 訪問標(biāo)志,public、final等9個標(biāo)志。有16個標(biāo)志位,每一位標(biāo)識一種訪問標(biāo)志。
u2 this_flags 類索引,常量池中的索引值
u2 super_class 父類索引,常量池中的索引值
u2 interfaces_count 接口計數(shù)器
u2 interfaces 接口索引集合,常量池中的索引值
u2 fields_count 字段個數(shù)
field_info fields 字段集合, 字段標(biāo)志(public、static等)、字段名常量索引、描述常量索引(類型)
u2 methods_count 方法計數(shù)器
method_info methods 方法集合,和字段集合差不多,方法標(biāo)志、方法名索引、方法描述索引(返回類型、方法參數(shù)列表)
u2 attributes_count 附加屬性計數(shù)器
attribute_info attributes 附加屬性集合

常量池

常量池分為:字面量符號引用

字面量:文本字符串、final常量值等

符號引用:

  • 類、接口全限定名
  • 字段、方法的名稱和描述符
  • 方法句柄和類型
  • 動態(tài)調(diào)用點和動態(tài)常量

常量池項目類型:

屬性表

Class 文件、字段表、方法表都可以攜帶自己的屬性表集合,描述某些場景專有的信息

在這里插入圖片描述

屬性(部分)有:

比如Code屬性,

類加載機(jī)制

類加載過程:

加載 -> 鏈接 (驗證、準(zhǔn)備、解析) -> 初始化

加載:用類加載器加載字節(jié)碼

驗證:驗證字節(jié)碼的合法性(滿足約束條件)

準(zhǔn)備:被加載類的靜態(tài)字段分配內(nèi)存

解析:符號引用解析成實際引用。

初始化:初始化常量、靜態(tài)類

類加載器:

啟動類加載器:加載最基礎(chǔ)的最重要的類,如JRE的lib下的jar包中的類

擴(kuò)展類加載器:他的弗雷是啟動類加載器,主要加載相對次要但又通用的類,如JRE的lib/ext下的jar的類

應(yīng)用類加載器:他的父類是擴(kuò)展類加載器,負(fù)責(zé)加載應(yīng)用程序路徑下的類。(指虛擬機(jī)參數(shù) -cp/-classpath、系統(tǒng)變量 java.class.path或環(huán)境變量 CLASSPATH 所指定的路徑)

同一字節(jié)流經(jīng)過不同類加載器加載,也會得到兩個不同的類。

雙親委派模式:讓父加載器盡量加載

雙親委派模式的破壞:

1)如果上層類加載器加載的類 加載 下層的類加載器加載的類

java引入了上下文類加載器,可以打通弗雷加載器去請求子類加載器加載的行為。如JNDI調(diào)用服務(wù)代碼的時候。

2)OSGI熱部署,使用網(wǎng)狀的類加載模式。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java實現(xiàn)統(tǒng)一異常處理的示例

    java實現(xiàn)統(tǒng)一異常處理的示例

    一個全局異常處理類需要處理三類異常1.業(yè)務(wù)類異常,2.運(yùn)行時異常 ,3.Error,本文給大家介紹java實現(xiàn)統(tǒng)一異常處理的示例,感興趣的朋友一起看看吧
    2021-06-06
  • Mac下安裝配置Maven并在IDEA中配置的詳細(xì)教程

    Mac下安裝配置Maven并在IDEA中配置的詳細(xì)教程

    這篇文章主要介紹了Mac下安裝配置Maven并在IDEA中配置,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • SpringCloud URL重定向及轉(zhuǎn)發(fā)代碼實例

    SpringCloud URL重定向及轉(zhuǎn)發(fā)代碼實例

    這篇文章主要介紹了SpringCloud URL重定向及轉(zhuǎn)發(fā)代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Spring Cloud Feign實例講解學(xué)習(xí)

    Spring Cloud Feign實例講解學(xué)習(xí)

    這篇文章主要介紹了Spring Cloud Feign實例講解學(xué)習(xí),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • Java中保留兩位小數(shù)的四種方法實現(xiàn)實例

    Java中保留兩位小數(shù)的四種方法實現(xiàn)實例

    今天小編就為大家分享一篇關(guān)于Java中保留兩位小數(shù)的四種方法實現(xiàn)實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • Spring核心之IOC與bean超詳細(xì)講解

    Spring核心之IOC與bean超詳細(xì)講解

    IOC-Inversion of Control,即控制反轉(zhuǎn)。它不是什么技術(shù),而是一種設(shè)計思想。這篇文章將為大家介紹一下Spring控制反轉(zhuǎn)IOC的原理,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-10-10
  • 使用spring?data的page和pageable如何實現(xiàn)分頁查詢

    使用spring?data的page和pageable如何實現(xiàn)分頁查詢

    這篇文章主要介紹了使用spring?data的page和pageable如何實現(xiàn)分頁查詢,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Java中內(nèi)存分配的幾種方法

    Java中內(nèi)存分配的幾種方法

    本文主要介紹Java中幾種分配內(nèi)存的方法。我們會看到如何使用sun.misc.Unsafe來統(tǒng)一操作任意類型的內(nèi)存。以前用C語言開發(fā)的同學(xué)通常都希望能在Java中通過較底層的接口來操作內(nèi)存,他們一定會對本文中要講的內(nèi)容感興趣
    2014-03-03
  • 關(guān)于使用Lambda表達(dá)式簡化Comparator的使用問題

    關(guān)于使用Lambda表達(dá)式簡化Comparator的使用問題

    這篇文章主要介紹了關(guān)于使用Lambda表達(dá)式簡化Comparator的使用問題,文中圖文講解了Comparator對象的方法,需要的朋友可以參考下
    2023-04-04
  • Java類庫BeanUtils組件使用方法及實例詳解

    Java類庫BeanUtils組件使用方法及實例詳解

    這篇文章主要介紹了Java類庫BeanUtils組件使用方法級實例詳解,需要的朋友可以參考下
    2020-02-02

最新評論

乐山市| 波密县| 武平县| 荆州市| 栾城县| 东山县| 台江县| 射阳县| 临朐县| 溧阳市| 翼城县| 滁州市| 通山县| 乾安县| 靖边县| 安塞县| 滕州市| 泸定县| 平潭县| 洪洞县| 涡阳县| 鹰潭市| 山阳县| 大埔区| 临潭县| 萍乡市| 准格尔旗| 安溪县| 中江县| 陵川县| 吴桥县| 凭祥市| 城固县| 镇雄县| 榆林市| 罗田县| 保亭| 青海省| 余江县| 胶州市| 宜章县|