欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

(1) 概念

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

關(guān)于棧幀的理解: 創(chuàng)建啟動一個線程,就創(chuàng)建了一個虛擬機??臻g(存放多個節(jié)點,先進后出).可能出現(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中只有值傳遞,當為基本數(shù)據(jù)類型時,傳的是字面值常量,當為引用類型,傳的是地址.

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

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

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

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

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

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

4. Java堆(線程共享)

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

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

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

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

(1) 概念

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

(2) 補充: 其他常量池

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

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

總結(jié)

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

相關(guān)文章

  • JAVA 生成隨機數(shù)并根據(jù)后臺概率靈活生成的實例代碼

    JAVA 生成隨機數(shù)并根據(jù)后臺概率靈活生成的實例代碼

    本篇文章主要介紹了JAVA 生成隨機數(shù)并根據(jù)后臺概率靈活生成的實例代碼,具有一定的參考價值,有興趣的可以了解一下
    2017-08-08
  • Java實現(xiàn)登錄和注冊案例

    Java實現(xiàn)登錄和注冊案例

    這篇文章主要為大家詳細介紹了Java實現(xiàn)登錄和注冊案例,把用戶信息存進集合,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 從SpringBoot打war包并配置外部Tomcat運行的全流程

    從SpringBoot打war包并配置外部Tomcat運行的全流程

    由于其他原因,我們需要使用SpringBoot打成war包放在外部的Tomcat中運行,本文就以一個案例來說明從SpringBoot打war包到Tomcat配置并運行的全流程經(jīng)過,需要的朋友可以參考下
    2024-06-06
  • idea快速生成代碼配置的方法示例

    idea快速生成代碼配置的方法示例

    本文主要介紹了idea快速生成代碼配置的方法示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 深入學(xué)習Java 動態(tài)代理

    深入學(xué)習Java 動態(tài)代理

    Java 動態(tài)代理機制的出現(xiàn),使得 Java 開發(fā)人員不用手工編寫代理類,只要簡單地指定一組接口及委托類對象,便能動態(tài)地獲得代理類。下面小編和大家來一起學(xué)習一下吧
    2019-05-05
  • 微信開發(fā)準備第一步 Maven倉庫管理新建WEB項目

    微信開發(fā)準備第一步 Maven倉庫管理新建WEB項目

    這篇文章主要為大家詳細介紹了微信開發(fā)準備第一步,Maven倉庫管理新建WEB項目,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Scala入門教程詳解

    Scala入門教程詳解

    這篇文章主要介紹了Scala入門教程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2019-06-06
  • StringUtils工具包中字符串非空判斷isNotEmpty和isNotBlank的區(qū)別

    StringUtils工具包中字符串非空判斷isNotEmpty和isNotBlank的區(qū)別

    今天小編就為大家分享一篇關(guān)于StringUtils工具包中字符串非空判斷isNotEmpty和isNotBlank的區(qū)別,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 圖書管理系統(tǒng)java版

    圖書管理系統(tǒng)java版

    這篇文章主要為大家詳細介紹了java版的圖書管理系統(tǒng),通過實例為大家快速掌握數(shù)據(jù)庫編程技術(shù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • MyBatis-Plus?Page?分頁不生效的問題解決

    MyBatis-Plus?Page?分頁不生效的問題解決

    分頁是常見的一種功能,本文主要介紹了MyBatis-Plus?Page分頁不生效的問題解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2024-07-07

最新評論