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

Java運行時數(shù)據(jù)區(qū)域(內存劃分)的深入講解

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

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

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

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

(1) 概念  

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

      關于棧幀的理解: 創(chuàng)建啟動一個線程,就創(chuàng)建了一個虛擬機??臻g(存放多個節(jié)點,先進后出).可能出現(xiàn)兩種異常: ①StackOverflowError: 方法調用鏈太深(如遞歸); ②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í)行結果是什么?

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

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

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

所以最終的打印結果為:

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

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

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

4. Java堆(線程共享)

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

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

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

6. 運行時常量池(方法區(qū)的一部分)

(1) 概念

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

(2) 補充: 其他常量池

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

③ 字符串常量池: 1.7之前是在運行時常量池里面,1.7之后,是在堆里面.

總結

到此這篇關于Java運行時數(shù)據(jù)區(qū)域(內存劃分)的文章就介紹到這了,更多相關Java運行時內存劃分內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • IntelliJ IDEA修改新建文件自動生成注釋的user名

    IntelliJ IDEA修改新建文件自動生成注釋的user名

    今天小編就為大家分享一篇關于IntelliJ IDEA修改新建文件自動生成注釋的user名,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • spring mvc路徑匹配原則詳解

    spring mvc路徑匹配原則詳解

    這篇文章主要介紹了spring mvc路徑匹配原則詳解,小編覺得還是挺不錯的,這里分享給大家,需要的朋友可以參考下,下面就和小編一起來看看吧
    2018-02-02
  • java String拼接時的問題匯總

    java String拼接時的問題匯總

    在本篇文章里小編給大家整理的是關于java String拼接時的問題匯總,有需要的朋友們可以參考下。
    2020-02-02
  • 詳解Java 線程中斷

    詳解Java 線程中斷

    這篇文章主要介紹了Java 線程中斷的相關資料,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2021-02-02
  • mybatis-plus雪花算法自動生成機器id原理及源碼

    mybatis-plus雪花算法自動生成機器id原理及源碼

    Mybatis-Plus是一個Mybatis的增強工具,它在Mybatis的基礎上做了增強,卻不做改變,Mybatis-Plus是為簡化開發(fā)、提高開發(fā)效率而生,但它也提供了一些很有意思的插件,比如SQL性能監(jiān)控、樂觀鎖、執(zhí)行分析等,下面一起看看mybatis-plus雪花算法自動生成機器id原理解析
    2021-06-06
  • 基于SpringBoot實現(xiàn)圖片上傳及圖片回顯

    基于SpringBoot實現(xiàn)圖片上傳及圖片回顯

    本篇文章主要介紹了SpringBoot如何實現(xiàn)圖片上傳及圖片回顯,文中通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2022-08-08
  • 詳解在Spring中如何自動創(chuàng)建代理

    詳解在Spring中如何自動創(chuàng)建代理

    這篇文章主要介紹了詳解在Spring中如何自動創(chuàng)建代理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • SpringKafka錯誤處理(重試機制與死信隊列)

    SpringKafka錯誤處理(重試機制與死信隊列)

    Spring Kafka提供了全面的錯誤處理機制,通過靈活的重試策略和死信隊列處理,下面就來介紹一下,具有一定的參考價值,感興趣的可以了解一下
    2025-04-04
  • Spring?IOC容器的Bean管理基于注解屬性注入方式

    Spring?IOC容器的Bean管理基于注解屬性注入方式

    這篇文章主要為大家介紹了Spring?IOC容器的Bean管理基于注解屬性注入方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Java 關鍵字 速查表介紹

    Java 關鍵字 速查表介紹

    下面小編就為大家?guī)硪黄狫ava 關鍵字 速查表介紹。小編覺得聽不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04

最新評論

佛山市| 宁南县| 包头市| 阿瓦提县| 关岭| 堆龙德庆县| 南溪县| 襄城县| 伊金霍洛旗| 辽宁省| 汝城县| 大兴区| 湖南省| 华安县| 龙游县| 扎兰屯市| 当阳市| 东乡族自治县| 建平县| 崇礼县| 芜湖县| 当涂县| 高密市| 安平县| 北碚区| 衡东县| 当涂县| 新平| 长春市| 桃园县| 天祝| 婺源县| 南郑县| 郴州市| 波密县| 西峡县| 汝阳县| 白城市| 邵阳市| 德昌县| 南投市|