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

Java內(nèi)存劃分:運(yùn)行時(shí)數(shù)據(jù)區(qū)域

 更新時(shí)間:2021年07月12日 08:52:50   作者:一顆蘋果.  
聽說Java運(yùn)行時(shí)環(huán)境的內(nèi)存劃分是挺進(jìn)BAT的必經(jīng)之路,這篇文章主要給大家介紹了關(guān)于Java運(yùn)行時(shí)數(shù)據(jù)區(qū)域(內(nèi)存劃分)的相關(guān)資料,需要的朋友可以參考下

1. 程序計(jì)數(shù)器(線程私有)

程序計(jì)數(shù)器是一塊比較小的內(nèi)存空間,可以看做是當(dāng)前線程所執(zhí)行的字節(jié)碼的行號(hào)指示器(切換線程后,能恢復(fù)到正確的執(zhí)行位置).

2. Java虛擬機(jī)棧(線程私有)

(1) 概念

虛擬機(jī)棧描述的是Java方法執(zhí)行的內(nèi)存模型 : 每個(gè)方法執(zhí)行的同時(shí)都會(huì)創(chuàng)建一個(gè)棧幀用于存儲(chǔ)局部變量表、操作數(shù)棧、動(dòng)態(tài)鏈接、方法出口 等信息。每一個(gè)方法從調(diào)用直至執(zhí)行完成的過程,就對(duì)應(yīng)一個(gè)棧幀在虛擬機(jī)棧中入棧和出棧的過程。聲明周期與線程相同。

關(guān)于棧幀的理解: 創(chuàng)建啟動(dòng)一個(gè)線程,就創(chuàng)建了一個(gè)虛擬機(jī)棧空間(存放多個(gè)節(jié)點(diǎn),先進(jìn)后出).可能出現(xiàn)兩種異常:

①StackOverflowError: 方法調(diào)用鏈太深(如遞歸);

②OOM

(2) 下面我們來分析一段代碼

public class VMStackTest {
    public static void main(String[] args) {
        int m = 1;
        int n = 2;
        swap1(1, 2);
        System.out.printf("main:m=%s, n=%s%n", m, n);
    }
    private static void swap1(int m, int n) {
        int tmp = m;
        m = n;
        n = tmp;
        Person p1 = new Person("p1");
        Person p2 = new Person("p2");
        swap2(p1, p2);
        System.out.printf("swap1:p1=%s, p2=%s%n", p1.name, p2.name);
    }
    private static void swap2(Person p1, Person p2) {
        Person tmp = p1;
        p1 = p2;
        p2 = tmp;
        System.out.printf("swap2:p1=%s, p2=%s%n", p1.name, p2.name);
    }
    static class Person{
        String name;
        public Person(String name) {
            this.name = name;
        }
    }
}

這段代碼的執(zhí)行結(jié)果是什么?

我們知道,Java中只有值傳遞,當(dāng)為基本數(shù)據(jù)類型時(shí),傳的是字面值常量,當(dāng)為引用類型,傳的是地址.

swap1中,只是修改了方法棧幀中的局部變量,對(duì)外面的局部變量不起作用,所以swap1中的交換是無效的.

swap2中也一樣,只是修改了方法棧幀中的局部變量,對(duì)外面的局部變量交換也是無效的.

所以最終的打印結(jié)果為:

如果要把p1,p2對(duì)象的名稱調(diào)換,p1.name="p2", p2.name="p1"(作用在堆里邊的對(duì)象)

3. 本地方法棧(線程私有)

本地方法棧與虛擬機(jī)棧的作用完全一樣,他倆的區(qū)別無非是本地方法棧為虛擬機(jī)使用的Native方法服務(wù),而虛擬機(jī)棧為JVM執(zhí)行的Java方法服務(wù)。

4. Java堆(線程共享)

Java堆(Java Heap)是JVM所管理的最大內(nèi)存區(qū)域。Java堆是所有線程共享的一塊區(qū)域,在JVM啟動(dòng)時(shí)創(chuàng)建。此內(nèi)存區(qū)域存放的都是對(duì)象實(shí)例。JVM規(guī)范中說到:"所有的對(duì)象實(shí)例以及數(shù)組都要在堆上分配"。

5. 方法區(qū)(線程共享)

方法區(qū)與Java堆一樣,是各個(gè)線程共享的內(nèi)存區(qū)域。它用于存儲(chǔ)已被虛擬機(jī)加載的類信息、常量、靜態(tài)變量(jdk1.7在方法區(qū)中;1.8在堆中)、即時(shí)編譯器編譯后的代碼等數(shù)據(jù)。

6. 運(yùn)行時(shí)常量池(方法區(qū)的一部分)

(1) 概念

運(yùn)行時(shí)常量池是方法區(qū)的一部分,存放字面量與符號(hào)引用。 字面量 : 字符串(JDK1.7后移動(dòng)到堆中) 、final常量、基本數(shù)據(jù)類型的值。 符號(hào)引用 : 類和結(jié)構(gòu)的完全限定名、字段的名稱和描述符、方法的名稱和描述符。

(2) 補(bǔ)充: 其他常量池

  • ① class文件常量池: Java文件編譯為class字節(jié)碼文件,存在的常量池,包含字面量和符號(hào)引用.
  • ② Java進(jìn)程運(yùn)行后,即使沒有執(zhí)行到某行代碼,也已經(jīng)把class文件常量池中的內(nèi)容放在運(yùn)行時(shí)常量池,如下圖:

  • ③ 字符串常量池: 1.7之前是在運(yùn)行時(shí)常量池里面,1.7之后,是在堆里面.

總結(jié)

本篇文章就到這里了,希望能夠給你一些幫助,也希望你能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Spring定時(shí)任務(wù)使用及如何使用郵件監(jiān)控服務(wù)器

    Spring定時(shí)任務(wù)使用及如何使用郵件監(jiān)控服務(wù)器

    這篇文章主要介紹了Spring定時(shí)任務(wù)使用及如何使用郵件監(jiān)控服務(wù)器,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • tcc分布式事務(wù)框架體系解析

    tcc分布式事務(wù)框架體系解析

    這篇文章主要為大家介紹了tcc分布式事務(wù)框架體系結(jié)構(gòu)的解析說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • Spring動(dòng)態(tài)代理實(shí)現(xiàn)日志功能詳解

    Spring動(dòng)態(tài)代理實(shí)現(xiàn)日志功能詳解

    這篇文章主要為大家詳細(xì)介紹了Spring動(dòng)態(tài)代理實(shí)現(xiàn)日志功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • LeetCode -- Path Sum III分析及實(shí)現(xiàn)方法

    LeetCode -- Path Sum III分析及實(shí)現(xiàn)方法

    這篇文章主要介紹了LeetCode -- Path Sum III分析及實(shí)現(xiàn)方法的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • springboot整合SSE的項(xiàng)目實(shí)踐

    springboot整合SSE的項(xiàng)目實(shí)踐

    SSE是一種可以主動(dòng)從服務(wù)端推送消息的技術(shù),本文主要介紹了springboot整合SSE的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • mybatis中Oracle參數(shù)為NULL錯(cuò)誤問題及解決

    mybatis中Oracle參數(shù)為NULL錯(cuò)誤問題及解決

    這篇文章主要介紹了mybatis中Oracle參數(shù)為NULL錯(cuò)誤問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • SpringBoot整合freemarker實(shí)現(xiàn)代碼生成器

    SpringBoot整合freemarker實(shí)現(xiàn)代碼生成器

    這篇文章主要為大家詳細(xì)介紹了SpringBoot如何整合freemarker實(shí)現(xiàn)一個(gè)簡(jiǎn)單的代碼生成器,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-03-03
  • Java中的FileWriter用法詳解與實(shí)戰(zhàn)記錄

    Java中的FileWriter用法詳解與實(shí)戰(zhàn)記錄

    這篇文章主要給大家介紹了關(guān)于Java中FileWriter用法的相關(guān)資料,包括寫入字符數(shù)據(jù)到文件、字符數(shù)組和部分字符寫入、配合BufferedWriter使用等方法,同時(shí)也解釋了其與OutputStreamWriter,BufferedWriter的異同特性,適合簡(jiǎn)單的文件寫入操作,需要的朋友可以參考下
    2024-10-10
  • Java虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)域匯總

    Java虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)域匯總

    這篇文章主要給大家介紹了關(guān)于Java虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)域的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Spring中的@Scheduled源碼解析

    Spring中的@Scheduled源碼解析

    這篇文章主要介紹了Spring中的@Scheduled源碼解析,定時(shí)任務(wù)調(diào)度的基礎(chǔ)是ScheduledAnnotationBeanPostProcessor類,這是一個(gè)實(shí)現(xiàn)了BeanPostProcessor接口的后置處理器,需要的朋友可以參考下
    2023-09-09

最新評(píng)論

个旧市| 清涧县| 瓦房店市| 昂仁县| 巴林左旗| 庄河市| 丰镇市| 阿尔山市| 启东市| 珲春市| 大石桥市| 太保市| 牙克石市| 高碑店市| 中超| 乃东县| 金昌市| 保康县| 东乌珠穆沁旗| 新竹县| 遵义县| 永泰县| 九龙城区| 郓城县| 赞皇县| 施甸县| 长宁区| 区。| 方城县| 泽州县| 禹州市| 阳曲县| 西充县| 榆树市| 新龙县| 洮南市| 天全县| 太仆寺旗| 马尔康县| 涟水县| 神农架林区|