亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解Java字符串在內(nèi)存中的存儲(chǔ)位置

 更新時(shí)間:2019年05月10日 16:49:18   作者:dingpiao190  
這篇文章主要介紹了Java字符串在內(nèi)存中的存儲(chǔ)位置,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在JDK6的時(shí)候在Java虛擬機(jī)(這里指的是HotSpot)中內(nèi)存區(qū)域分為本地方法棧、虛擬機(jī)棧、堆、程序計(jì)數(shù)器、方法區(qū)等,方法區(qū)又被稱作永久代。

這里只說一下字符串的存儲(chǔ)位置,在Java虛擬機(jī)內(nèi)存中有個(gè)區(qū)域叫做運(yùn)行時(shí)常量池,是方法區(qū)的一部分。在JDK6中其中存放的有類的版本、字段、方法、接口等描述信息以及常量池,常量池用來存放編譯期間生成的各種字面量和符號(hào)引用,字符串就存儲(chǔ)在這個(gè)位置。下面通過代碼來看下現(xiàn)象。

這是JDK6的實(shí)驗(yàn)現(xiàn)象,Java虛擬機(jī)的配置如下:
-XX:PermSize=5M -XX:MaxPermSize=5M -Xms5M -Xmx5M -XX:-UseGCOverheadLimit -verbose:gc
其含義是方法區(qū)的初始大小為5M,最大為5M;堆空間的初始大小為5M,最大為5M,當(dāng)垃圾回收時(shí)間占的比例較高時(shí)不允許報(bào)錯(cuò),打印垃圾回收信息。

import java.util.ArrayList;
import java.util.List;

public class StringTest {


  static String base = "string";

  public static void main(String[] args) {
    List list = new ArrayList();
    for (int i = 0; i < Integer.MAX_VALUE; i++) {
      String str = base + base;
      base = str;
      list.add(str.intern());
    }
  }

}

運(yùn)行錯(cuò)誤如下:

 

可以看到報(bào)的是永久代即方法區(qū)的內(nèi)存溢出錯(cuò)誤,在這里使用了String API的inner方法,其作用是把首次遇到的字符串實(shí)例復(fù)制到永久代去,返回的也是永久代中這個(gè)字符串實(shí)例的引用。

在JDK7中字符串已經(jīng)從常量池中移除,方法區(qū)有被取消掉的趨勢,在JDK7的環(huán)境下虛擬機(jī)中使用相同的配置運(yùn)行以上代碼,情況如下:

 

我們看到的信息是Java虛擬機(jī)堆溢出,由此可見在JDK7中字符串的存儲(chǔ)位置已經(jīng)被移到了堆中。

在JDK8的環(huán)境下,使用相同的虛擬機(jī)配置信息,就會(huì)報(bào)一個(gè)錯(cuò)誤,錯(cuò)誤如下:

 

指出永久代已經(jīng)在JDK8中移除。
在JDK8中新出現(xiàn)的內(nèi)存區(qū)域叫做元空間,其位于本地內(nèi)存中。我們將JDK8的虛擬機(jī)配置信息修改為如下:
-Xms5M -Xmx5M -XX:MetaspaceSize=5M -XX:MaxMetaspaceSize=5M -verbose:gc
其含義是堆內(nèi)存的初始大小為5M,最大空間為5M,元空間的初始大小為5M,最大為5M,打印垃圾回收的信息。
運(yùn)行遇上相同的代碼,打印的錯(cuò)誤信息如下:

 

可以看到是堆內(nèi)存溢出,在這里筆者產(chǎn)生一個(gè)疑問,因?yàn)橥ㄟ^網(wǎng)上看的資料說的是此處應(yīng)該為元空間溢出的錯(cuò)誤,但是筆者通過實(shí)際的測試發(fā)現(xiàn),其報(bào)的錯(cuò)誤依然是堆內(nèi)存溢出的錯(cuò)誤,也就是在JDK8中字符串的存儲(chǔ)位置是堆?
因?yàn)閷?shí)驗(yàn)結(jié)果跟網(wǎng)上看到的有區(qū)別,暫且在這里打上一個(gè)問號(hào)。

以上所述是小編給大家介紹的Java字符串在內(nèi)存中的存儲(chǔ)位置詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • java.imageIo給圖片添加水印的實(shí)現(xiàn)代碼

    java.imageIo給圖片添加水印的實(shí)現(xiàn)代碼

    最近項(xiàng)目在做一個(gè)商城項(xiàng)目, 項(xiàng)目上的圖片要添加水?、?添加圖片水印;②:添加文字水印;一下提供下個(gè)方法,希望大家可以用得著
    2013-07-07
  • Spring中@Autowire注入的深入講解

    Spring中@Autowire注入的深入講解

    這篇文章主要給大家介紹了關(guān)于Spring中@Autowire注入的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • MyBatis與Hibernate的比較

    MyBatis與Hibernate的比較

    Hibernate 與Mybatis都是流行的持久層開發(fā)框架,但Hibernate開發(fā)社區(qū)相對(duì)多熱鬧些,支持的工具也多,更新也快,當(dāng)前最高版本4.1.8。而Mybatis相對(duì)平靜,工具較少,當(dāng)前最高版本3.2
    2016-01-01
  • 對(duì)比Java講解Kotlin中?.與!!.的區(qū)別

    對(duì)比Java講解Kotlin中?.與!!.的區(qū)別

    這篇文章主要給大家介紹了關(guān)于對(duì)比Java,實(shí)例講解Kotlin中?.與!!.的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用kotlin具有一定參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06
  • [Java]詳解Socket和ServerSocket學(xué)習(xí)筆記

    [Java]詳解Socket和ServerSocket學(xué)習(xí)筆記

    即時(shí)類應(yīng)用或者即時(shí)類的游戲,HTTP協(xié)議很多時(shí)候無法滿足于我們的需求,這會(huì),Socket對(duì)于我們來說就非常實(shí)用了。本篇文章主要介紹了Socket和ServerSocket,有興趣的可以了解一下。
    2016-12-12
  • Java instanceof關(guān)鍵字用法詳解及注意事項(xiàng)

    Java instanceof關(guān)鍵字用法詳解及注意事項(xiàng)

    instanceof 是 Java 的保留關(guān)鍵字。它的作用是測試它左邊的對(duì)象是否是它右邊的類的實(shí)例,返回 boolean 的數(shù)據(jù)類型。本文重點(diǎn)給大家介紹Java instanceof關(guān)鍵字用法詳解及注意事項(xiàng),需要的朋友參考下吧
    2021-09-09
  • java實(shí)現(xiàn)馬踏棋盤游戲

    java實(shí)現(xiàn)馬踏棋盤游戲

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)馬踏棋盤游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • IDEA配置碼云Gitee的使用詳解

    IDEA配置碼云Gitee的使用詳解

    這篇文章主要介紹了IDEA配置碼云Gitee的使用,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 2020最新 idea下載、安裝與創(chuàng)建項(xiàng)目測試的教程圖解

    2020最新 idea下載、安裝與創(chuàng)建項(xiàng)目測試的教程圖解

    這篇文章主要介紹了2020最新 idea下載、安裝與創(chuàng)建項(xiàng)目測試的教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • SpringBoot?整合mybatis+mybatis-plus的詳細(xì)步驟

    SpringBoot?整合mybatis+mybatis-plus的詳細(xì)步驟

    這篇文章主要介紹了SpringBoot?整合mybatis+mybatis-plus的步驟,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06

最新評(píng)論