国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【jvm系列-06】深入理解對(duì)象的實(shí)例化、內(nèi)存布局和訪問定位

這篇具有很好參考價(jià)值的文章主要介紹了【jvm系列-06】深入理解對(duì)象的實(shí)例化、內(nèi)存布局和訪問定位。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

JVM系列整體欄目


內(nèi)容 鏈接地址
【一】初識(shí)虛擬機(jī)與java虛擬機(jī) https://blog.csdn.net/zhenghuishengq/article/details/129544460
【二】jvm的類加載子系統(tǒng)以及jclasslib的基本使用 https://blog.csdn.net/zhenghuishengq/article/details/129610963
【三】運(yùn)行時(shí)私有區(qū)域之虛擬機(jī)棧、程序計(jì)數(shù)器、本地方法棧 https://blog.csdn.net/zhenghuishengq/article/details/129684076
【四】運(yùn)行時(shí)數(shù)據(jù)區(qū)共享區(qū)域之堆、逃逸分析 https://blog.csdn.net/zhenghuishengq/article/details/129796509
【五】運(yùn)行時(shí)數(shù)據(jù)區(qū)共享區(qū)域之方法區(qū)、常量池 https://blog.csdn.net/zhenghuishengq/article/details/129958466
【六】對(duì)象實(shí)例化、內(nèi)存布局和訪問定位 https://blog.csdn.net/zhenghuishengq/article/details/130057210

一,對(duì)象實(shí)例化、內(nèi)存布局和訪問定位

1,對(duì)象的實(shí)例化

創(chuàng)建對(duì)象的方式和創(chuàng)建對(duì)象的步驟主要有以下幾種方式
【jvm系列-06】深入理解對(duì)象的實(shí)例化、內(nèi)存布局和訪問定位

1.1,創(chuàng)建對(duì)象的幾種方式

在日常開發(fā)中,創(chuàng)建對(duì)象的方式主要有以下幾種:

  • 最常見的方式:new 加構(gòu)造器,如果構(gòu)造器私有,可以通過靜態(tài)訪問,如單例模式,或者通過工廠加載
//new 構(gòu)造器 創(chuàng)建對(duì)象
Object object = new Object();
//構(gòu)造器靜態(tài)私有,如典型的單例模式
Object object = Object.getObject();
//工廠加載,SpringBean,SqlSessionBean
Object object = ObjectFactory.getObject();
  • 反射的方式:類的newInstance或者構(gòu)造器的newInstance·
public class Invoke {
    public static void main(String[] args) {
        try {
            Class<?> clazz1 = Class.forName("com.tky.jvm.Invoke");
            //通過類構(gòu)造器獲取對(duì)象
            Constructor<?> constructor = clazz1.getConstructor();
            Invoke invoke1 = (Invoke)constructor.newInstance();
            //通過類名獲取
            Class<Invoke> clazz2 = Invoke.class;
            Invoke invoke2 = clazz2.newInstance();
            //通過對(duì)象獲取
            Invoke in = new Invoke();
            Class<? extends Invoke> clazz3 = in.getClass();
            Invoke invoke3 = clazz3.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  • 克隆的方式:clone的方式,不調(diào)用任何構(gòu)造器,當(dāng)前類需要實(shí)現(xiàn)Cloneable接口以及clone方法
/**
 * @author zhenghuisheng
 * @date : 2023/4/10
 */
@Data
public class Clone implements Cloneable {
    private Long id;
    private String username;
    private String password;

    @Override
    protected Clone clone() throws CloneNotSupportedException {
        return (Clone)super.clone();
    }
}

class TestClone{
    public static void main(String[] args) {
        Clone clone1 = new Clone();
        clone1.setId(1L);
        clone1.setUsername("zhenghuisheng");
        clone1.setUsername("123456");
        try {
            Clone clone2 = clone1.clone();
            System.out.println(clone2.getId());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  • 反序列化的方式:從文件或者網(wǎng)絡(luò)中獲取二進(jìn)制流,將二進(jìn)制流轉(zhuǎn)換成對(duì)象
//對(duì)象序列化
Student s = new Student("1","zhenghuisheng","18");
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("d:/a.txt"));
objectOutputStream.writeObject(s);
objectOutputStream.close();

//對(duì)象反序列化
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d:/a.txt"));
Student student = (Student) inputStream.readObject();
  • 第三方庫(kù)Objenesis
//構(gòu)建 Objenesis 對(duì)象  Objenesis需要對(duì)應(yīng)的pom依賴對(duì)象
Objenesis objenesis = new ObjenesisStd();
ObjectInstantiator<Student> instantiator = objenesis.getInstantiatorOf(Student.class);
Student student = instantiator.newInstance();

1.2,對(duì)象創(chuàng)建的步驟

這里主要從執(zhí)行的角度來分析這個(gè)對(duì)象創(chuàng)建的步驟,如上圖所示,主要分為六個(gè)步驟來創(chuàng)建對(duì)象
【jvm系列-06】深入理解對(duì)象的實(shí)例化、內(nèi)存布局和訪問定位

1.2.1,判斷對(duì)象對(duì)應(yīng)的類是否加載,驗(yàn)證,準(zhǔn)備,解析和初始化

虛擬機(jī)在遇到一條new指令的時(shí)候,首先會(huì)去檢查這個(gè)指令的參數(shù)是否能在元空間的常量池中定位到一個(gè)類的符號(hào),并且檢查這個(gè)類是否經(jīng)歷過了加載、驗(yàn)證、準(zhǔn)備、解析和初始化這個(gè)幾個(gè)步驟。如果沒有,那么類加載器還在雙親委派的模式下,使用當(dāng)前類加載器的以 ClassLoader + package + class 為key進(jìn)行查找對(duì)應(yīng)的.class文件,如果沒有找到對(duì)應(yīng)的文件,則會(huì)拋出 ClassNotFoundException 異常,如果找到,則進(jìn)行類加載,并生成對(duì)應(yīng)的Class對(duì)象

1.2.2,為對(duì)象開辟空間,分配內(nèi)存

首先需要計(jì)算對(duì)象占用空間的大小,接著在堆中劃分一塊內(nèi)存給新對(duì)象,如果實(shí)例成員變量時(shí)引用變量,那么僅分配引用變量空間即可,即四個(gè)字節(jié)大小。如根據(jù)不同的基本數(shù)據(jù)類型其所占用的字節(jié)數(shù),從而得知每個(gè)變量占多大的空間,最后將這些變量所需要的空間全部疊加在一起,得到的就是這個(gè)總空間的字節(jié)數(shù)。

而內(nèi)存如果是規(guī)整的,那么虛擬機(jī)將采用的是 指針碰撞 的方式來為對(duì)象分配內(nèi)存。如下圖,就是將用過的內(nèi)存放在一邊,空閑的內(nèi)存放在另外一邊,中間放著一個(gè)分界點(diǎn)的指示器,內(nèi)存分配就是將指針向空閑那邊挪動(dòng),挪動(dòng)的距離就是對(duì)象所需要的大小 ,而指針碰撞這種方式,取決于虛擬機(jī)的垃圾回收算法是否具有壓縮功能。

【jvm系列-06】深入理解對(duì)象的實(shí)例化、內(nèi)存布局和訪問定位

如果內(nèi)存內(nèi)部不是規(guī)整的,虛擬機(jī)內(nèi)部就得維護(hù)一個(gè)列表來管理已使用的內(nèi)存和未使用的內(nèi)存,其方式被稱為 空閑列表 。如下圖,虛擬機(jī)內(nèi)部維護(hù)了一張表,記錄的是哪塊內(nèi)存時(shí)可用的,哪塊內(nèi)存時(shí)不可用的,然后在分配的時(shí)候,就從列表中找到一塊足夠打的空間劃分給對(duì)象實(shí)例,并更新表上的內(nèi)容。

【jvm系列-06】深入理解對(duì)象的實(shí)例化、內(nèi)存布局和訪問定位

1.2.3,處理并發(fā)問題

由于對(duì)象是在堆中創(chuàng)建,而堆又是共享區(qū)域,因此避免不了會(huì)出現(xiàn)這個(gè)并發(fā)的問題,而在堆內(nèi)部,主要采用了兩種方式來保證實(shí)例的安全性。

一種是采用CAS比較與交換的方式,失敗則重試,區(qū)域加鎖來保證更新的原子性,另一種是 每個(gè)線程預(yù)先分配一個(gè) TLAB。主要是通過這兩種方式來解決并發(fā)安全的問題。

1.2.4,對(duì)象初始賦值

這里進(jìn)行一個(gè)默認(rèn)的初始化。這樣所有屬性都有一個(gè)默認(rèn)值,保證對(duì)象實(shí)例字段在不賦值時(shí)就可以使用。因此在方法內(nèi)部,靜態(tài)變量在準(zhǔn)備階段就進(jìn)行了初始賦值,實(shí)例變量在分配空間的時(shí)候也進(jìn)行了初始賦值,因此這兩個(gè)可以直接使用變量,其他的變量如果沒有進(jìn)行顯示的初始化,那么會(huì)出現(xiàn)直接編譯失敗的情況。

1.2.5,設(shè)置對(duì)象的對(duì)象頭

將對(duì)象所屬的類、對(duì)象的hashCode、GC信息、年齡、鎖信息等存儲(chǔ)在對(duì)象的對(duì)象頭中。

1.2.6,執(zhí)行init方法進(jìn)行初始化

這里就行一個(gè)顯示初始化,初始化工作才正式開始。初始化成員變量,執(zhí)行實(shí)例化代碼塊,調(diào)用類的構(gòu)造方法,并把堆對(duì)象的首地址賦值給引用對(duì)象。因此一般來說,new 指令之后會(huì)接著就是執(zhí)行方法,將對(duì)象按照程序員的意愿進(jìn)行初始化,這樣真正可用的對(duì)象才算完整的創(chuàng)建出來。

2,對(duì)象的內(nèi)存布局

對(duì)象的內(nèi)存布局中,主要包括對(duì)象頭、實(shí)例數(shù)據(jù)和對(duì)其填充

【jvm系列-06】深入理解對(duì)象的實(shí)例化、內(nèi)存布局和訪問定位

2.1,對(duì)象頭(Header)

在對(duì)象頭中,又可以分為兩部分,一部分是運(yùn)行時(shí)的元數(shù)據(jù),另一部分就是類型指針。

運(yùn)行時(shí)元數(shù)據(jù)包括哈希碼、GC年齡分代、線程持有的鎖、持有鎖標(biāo)志、線程id、線程時(shí)間戳

由下圖可知,在對(duì)象的年齡分代為4bit,因此最大為1111,即15,又由于是從0開始,因此其最大年齡為15,所以在設(shè)置這個(gè)年齡的時(shí)候,只能往小設(shè)置。鎖的標(biāo)志位對(duì)應(yīng)的字節(jié)碼用01、10、11表示,其值分別對(duì)應(yīng)著1、2、3,并且這段鎖升級(jí)的過程是不可逆的。

【jvm系列-06】深入理解對(duì)象的實(shí)例化、內(nèi)存布局和訪問定位

而類型指針指向的是元數(shù)據(jù)InstanceKlass,確定該對(duì)象所屬的類型。如果是數(shù)組,還需要記錄數(shù)組的長(zhǎng)度

2.2,實(shí)例數(shù)據(jù)(Instance Data)

對(duì)象真正存儲(chǔ)的有效信息,包括代碼中定義的各種類型的字段,以及父類繼承下來的和本身?yè)碛械淖侄?/strong> 。并且在這些對(duì)象中,父類定義的變量會(huì)出現(xiàn)在子類之前,并且相同的字段總是會(huì)被分配在一起,如果CompactFields參數(shù)為true,子類的窄變量可能插入到父類變量的空隙。

2.3,代碼示例

接下來分析一下以下這段代碼

/**
 * @author zhenghuisheng
 * @date : 2023/4/7
 */
public class Customer {
    Integer id = 1001;
    String name = "zhenghuisheng";
    public Customer(){
        Account account = new Account();
    }
}
public class Test{
    public static void main(String[] args){
        Customer cust = new Customer(); 
    }
}

然后其對(duì)應(yīng)的內(nèi)存結(jié)構(gòu)如下圖所示,在這個(gè)main方法中,由于是靜態(tài)方法,因此局部變量表的第一個(gè)slot不是this,而局部變量表中的第二個(gè)cust是引用著堆中 new Customer()的實(shí)例地址,該實(shí)例對(duì)象中,主要就是上面的運(yùn)行時(shí)元數(shù)據(jù)、類型指針、對(duì)其填充等組成。運(yùn)行時(shí)數(shù)據(jù)區(qū)就包括唯一地址哈希值、結(jié)果多次GC后的年齡、是否獲得鎖等標(biāo)志;類型指針對(duì)應(yīng)的就是Customer的Klass類元信息;實(shí)例數(shù)據(jù)就包括自身的屬性以及父類屬性

【jvm系列-06】深入理解對(duì)象的實(shí)例化、內(nèi)存布局和訪問定位

3,對(duì)象的訪問定位

創(chuàng)建對(duì)象主要是為了更好的去使用他,JVM內(nèi)部主要是通過兩種方式實(shí)現(xiàn)對(duì)象引用訪問到內(nèi)部對(duì)象的,一種是直接指針,一種是句柄訪問。

如下代碼所示,一個(gè)創(chuàng)建對(duì)象需要涉及到堆,棧和方法區(qū),因此對(duì)象的定位以及訪問也需要設(shè)計(jì)這三個(gè)地方

//第一個(gè)User存在方法區(qū),主要是存儲(chǔ)類信息和運(yùn)行時(shí)常量池
//第二個(gè)user在棧中,作為變量存儲(chǔ)
//最后的 new User存儲(chǔ)在堆中
User user = new User();

句柄訪問 的方式如下,在Java堆中有一個(gè)句柄池,然后句柄池中保存指向堆中的實(shí)例的地址和指向方法區(qū)中保存類信息的地址,而在棧中只需保存句柄池的地址即可。

【jvm系列-06】深入理解對(duì)象的實(shí)例化、內(nèi)存布局和訪問定位

直接指針 就是不需要使用句柄池,在棧的局部變量表中直接保存堆中實(shí)例的地址,而在堆中會(huì)有一個(gè)指針去指向方法區(qū)中保留類信息的地址。在Hotspot虛擬機(jī)中,主要采用的是這種方式

【jvm系列-06】深入理解對(duì)象的實(shí)例化、內(nèi)存布局和訪問定位

句柄指針需要在堆空間中開辟空間存儲(chǔ)句柄池,因此會(huì)有一定的空間浪費(fèi),并且效率相對(duì)較低,但是如果出現(xiàn)對(duì)象的位置發(fā)生改變,如出現(xiàn)垃圾回收的情況,或者使用標(biāo)記整理算法的時(shí)候 ,這個(gè)棧中指向堆中的句柄池的指針可以不用發(fā)生改變,只需改變句柄池只向?qū)嵗龜?shù)據(jù)和方法區(qū)的指針。而這個(gè)直接指針的優(yōu)缺點(diǎn)就是就和句柄指針相反。

4,直接內(nèi)存初體驗(yàn)(了解)

在JDK8中,方法區(qū)的具體實(shí)現(xiàn)從永久代變成了元空間,而元空間使用的是本地內(nèi)存,又名直接內(nèi)存,這部分不屬于運(yùn)行時(shí)數(shù)據(jù)區(qū)的一部分,也不是《java虛擬機(jī)規(guī)范》中定義的內(nèi)存區(qū)域

【jvm系列-06】深入理解對(duì)象的實(shí)例化、內(nèi)存布局和訪問定位

在java代碼中,可以直接通過這個(gè) ByteBuffer.allocateDirect() 來進(jìn)行本地內(nèi)存空間的分配, 即直接通過這個(gè)NIO來進(jìn)行操作,并且在通常直接內(nèi)存的速度會(huì)直接優(yōu)于Java堆,其讀寫性能相對(duì)較高。因此處于性能考慮,讀寫頻繁的場(chǎng)合可以使用直接內(nèi)存,并且Java的NIO庫(kù),也允許Java程序使用直接內(nèi)存。

也可能會(huì)出現(xiàn) OutOfMemoryError 異常,由于直接內(nèi)存在Java堆之外,因此其大小不會(huì)受限于 -Xmx 指定的最大堆大小,但又由于系統(tǒng)的內(nèi)存始終是有限的,因此堆和直接內(nèi)存的總和依然受限于操作系統(tǒng)給出的最大內(nèi)存,但是在直接內(nèi)存中,也存在一定的缺點(diǎn):分配回收成本較高,并且不受JVM內(nèi)存回收管理。

因此可以直接內(nèi)存可以通過 MaxDirectMemorySize 進(jìn)行大小的設(shè)置,如果未指定,那么默認(rèn)和堆的最大值 -Xmx 參數(shù)值一致文章來源地址http://www.zghlxwxcb.cn/news/detail-415398.html

ByteBuffer byteBuffer = ByteBuffer.allocateDirect(100 * 1024);

到了這里,關(guān)于【jvm系列-06】深入理解對(duì)象的實(shí)例化、內(nèi)存布局和訪問定位的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 深入JVM了解Java對(duì)象實(shí)例化過程

    深入JVM了解Java對(duì)象實(shí)例化過程

    new :最常見的方式、 Xxx 的靜態(tài)方法, XxxBuilder/XxxFactory 的靜態(tài)方法 Class的newInstance 方法:反射的方式,只能調(diào)用空參的構(gòu)造器,權(quán)限必須是public Constructor的newInstance(XXX) :反射的方式,可以調(diào)用空參、帶參的構(gòu)造器,權(quán)限沒有要求 使用 clone() :不調(diào)用任何的構(gòu)造器,要求當(dāng)

    2023年04月24日
    瀏覽(16)
  • 深入理解多線程編程和 JVM 內(nèi)存模型

    深入理解多線程編程和 JVM 內(nèi)存模型

    目錄 一、什么是多線程編程 二、JVM介紹 三、?JVM 內(nèi)存模型 多線程編程是一種編程方式,它允許程序在同一時(shí)間內(nèi)執(zhí)行多個(gè)線程或任務(wù)。線程是程序執(zhí)行的最小單位,多線程編程可以將任務(wù)拆分為多個(gè)線程,每個(gè)線程獨(dú)立執(zhí)行特定的操作或任務(wù)。 在傳統(tǒng)的單線程編程中,程

    2024年01月23日
    瀏覽(21)
  • 深入理解JVM——垃圾回收與內(nèi)存分配機(jī)制詳細(xì)講解

    深入理解JVM——垃圾回收與內(nèi)存分配機(jī)制詳細(xì)講解

    所謂垃圾回收,也就是要回收已經(jīng)“死了”的對(duì)象。 那我們?nèi)绾闻袛嗄男?duì)象“存活”,哪些已經(jīng)“死去”呢? 給對(duì)象中添加一個(gè)引用計(jì)數(shù)器,每當(dāng)有一個(gè)地方引用它時(shí),計(jì)數(shù)器就加一;當(dāng)引用失效時(shí),計(jì)數(shù)器就減1;任何時(shí)刻計(jì)數(shù)器為0的對(duì)象就是不可能再被使用的。 但是

    2024年02月12日
    瀏覽(26)
  • 深入理解 JVM 之——Java 內(nèi)存區(qū)域與溢出異常

    深入理解 JVM 之——Java 內(nèi)存區(qū)域與溢出異常

    更好的閱讀體驗(yàn) huge{color{red}{更好的閱讀體驗(yàn)}} 更好的閱讀體驗(yàn) 本篇為深入理解 Java 虛擬機(jī)第二章內(nèi)容,推薦在學(xué)習(xí)前先掌握基礎(chǔ)的 Linux 操作、編譯原理、計(jì)算機(jī)組成原理等計(jì)算機(jī)基礎(chǔ)以及扎實(shí)的 C/C++ 功底。 該系列的 GitHub 倉(cāng)庫(kù):https://github.com/Doge2077/learn-jvm Java 虛擬機(jī)在

    2024年02月09日
    瀏覽(22)
  • 深入理解JVM:Java使用new創(chuàng)建對(duì)象的流程

    ????????①new 對(duì)象 ????????②反射 ????????③對(duì)象的復(fù)制 ????????④反序列化 先看看常量池里面有沒有,如果有,就用常量池的 看這個(gè)類有沒有被加載過,如果沒有,就執(zhí)行類加載以及類的初始化。(對(duì)象的大小,在類加載的時(shí)候就確定了)。 對(duì)象在堆內(nèi)存

    2024年02月15日
    瀏覽(30)
  • 深入理解C++中的堆與棧:內(nèi)存管理的關(guān)鍵區(qū)別與實(shí)例解析

    深入理解C++中的堆與棧:內(nèi)存管理的關(guān)鍵區(qū)別與實(shí)例解析

    ? 概述: C++中,堆和棧是兩種不同的內(nèi)存分配方式。棧自動(dòng)分配、釋放內(nèi)存,適用于短生命周期變量;堆需要手動(dòng)管理,適用于動(dòng)態(tài)分配內(nèi)存,但需要顯式釋放以防內(nèi)存泄漏。通過清晰的示例源代碼,演示了它們?cè)谧兞可芷凇⒃L問方式等方面的區(qū)別。 C++中的堆(heap)和

    2024年02月22日
    瀏覽(31)
  • 【jvm系列-10】深入理解jvm垃圾回收器的種類以及內(nèi)部的執(zhí)行原理

    【jvm系列-10】深入理解jvm垃圾回收器的種類以及內(nèi)部的執(zhí)行原理

    JVM系列整體欄目 內(nèi)容 鏈接地址 【一】初識(shí)虛擬機(jī)與java虛擬機(jī) https://blog.csdn.net/zhenghuishengq/article/details/129544460 【二】jvm的類加載子系統(tǒng)以及jclasslib的基本使用 https://blog.csdn.net/zhenghuishengq/article/details/129610963 【三】運(yùn)行時(shí)私有區(qū)域之虛擬機(jī)棧、程序計(jì)數(shù)器、本地方法棧 https

    2024年02月05日
    瀏覽(32)
  • 【Java虛擬機(jī)學(xué)習(xí)2】HotSpot虛擬機(jī)下對(duì)象的創(chuàng)建及在Java堆中對(duì)象的內(nèi)存分配、布局和對(duì)象的訪問

    【Java虛擬機(jī)學(xué)習(xí)2】HotSpot虛擬機(jī)下對(duì)象的創(chuàng)建及在Java堆中對(duì)象的內(nèi)存分配、布局和對(duì)象的訪問

    對(duì)象的生命周期主要分為創(chuàng)建、使用、銷毀這三大階段。從它被創(chuàng)建的一刻開始,到它被垃圾收集器(Garbage Collector)回收的一刻結(jié)束 對(duì)象的創(chuàng)建 。包括:1、類的加載 2、內(nèi)存的分配 3、初始化零值 4、設(shè)置對(duì)象頭 5、執(zhí)行init方法(具體操作步驟請(qǐng)看上述內(nèi)容,其中步驟1的類

    2024年02月16日
    瀏覽(21)
  • 【jvm系列-07】深入理解執(zhí)行引擎,解釋器、JIT即時(shí)編譯器

    【jvm系列-07】深入理解執(zhí)行引擎,解釋器、JIT即時(shí)編譯器

    JVM系列整體欄目 內(nèi)容 鏈接地址 【一】初識(shí)虛擬機(jī)與java虛擬機(jī) https://blog.csdn.net/zhenghuishengq/article/details/129544460 【二】jvm的類加載子系統(tǒng)以及jclasslib的基本使用 https://blog.csdn.net/zhenghuishengq/article/details/129610963 【三】運(yùn)行時(shí)私有區(qū)域之虛擬機(jī)棧、程序計(jì)數(shù)器、本地方法棧 https

    2024年02月01日
    瀏覽(30)
  • 【JUC系列-01】深入理解JMM內(nèi)存模型的底層實(shí)現(xiàn)原理

    【JUC系列-01】深入理解JMM內(nèi)存模型的底層實(shí)現(xiàn)原理

    JUC系列整體欄目 內(nèi)容 鏈接地址 【一】深入理解JMM內(nèi)存模型的底層實(shí)現(xiàn)原理 https://zhenghuisheng.blog.csdn.net/article/details/132400429 【二】深入理解CAS底層原理和基本使用 https://blog.csdn.net/zhenghuishengq/article/details/132478786 【三】熟練掌握Atomic原子系列基本使用 https://blog.csdn.net/zhenghuis

    2024年02月12日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包