91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java項目中字符串的存儲位置是哪里

發布時間:2021-01-28 09:46:07 來源:億速云 閱讀:662 作者:Leah 欄目:編程語言

本篇文章為大家展示了Java項目中字符串的存儲位置是哪里,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

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

這里只說一下字符串的存儲位置,在Java虛擬機內存中有個區域叫做運行時常量池,是方法區的一部分。在JDK6中其中存放的有類的版本、字段、方法、接口等描述信息以及常量池,常量池用來存放編譯期間生成的各種字面量和符號引用,字符串就存儲在這個位置。下面通過代碼來看下現象。

這是JDK6的實驗現象,Java虛擬機的配置如下:
-XX:PermSize=5M -XX:MaxPermSize=5M -Xms5M -Xmx5M -XX:-UseGCOverheadLimit -verbose:gc
其含義是方法區的初始大小為5M,最大為5M;堆空間的初始大小為5M,最大為5M,當垃圾回收時間占的比例較高時不允許報錯,打印垃圾回收信息。

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());
    }
  }

}

運行錯誤如下:

Java項目中字符串的存儲位置是哪里 

可以看到報的是永久代即方法區的內存溢出錯誤,在這里使用了String API的inner方法,其作用是把首次遇到的字符串實例復制到永久代去,返回的也是永久代中這個字符串實例的引用。

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

Java項目中字符串的存儲位置是哪里 

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

在JDK8的環境下,使用相同的虛擬機配置信息,就會報一個錯誤,錯誤如下:

Java項目中字符串的存儲位置是哪里 

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

Java項目中字符串的存儲位置是哪里 

上述內容就是Java項目中字符串的存儲位置是哪里,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大余县| 旌德县| 连城县| 曲水县| 商洛市| 电白县| 大石桥市| 饶河县| 塔城市| 庆元县| 洛川县| 亳州市| 盐边县| 蒲城县| 石林| 和林格尔县| 泰和县| 来宾市| 盐津县| 道真| 青海省| 嘉峪关市| 门头沟区| 颍上县| 绥化市| 馆陶县| 扎兰屯市| 土默特右旗| 九江市| 涿鹿县| 德令哈市| 衡南县| 东辽县| 凤山市| 田阳县| 广昌县| 疏勒县| 台山市| 刚察县| 阜城县| 菏泽市|