一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 基于Java中字符串內存位置詳解

基于Java中字符串內存位置詳解

2020-06-05 14:38jingxian JAVA教程

下面小編就為大家帶來一篇基于Java中字符串內存位置詳解。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

前言

之前寫過一篇關于JVM內存區域劃分的文章,但是昨天接到螞蟻金服的面試,問到JVM相關的內容,解釋一下JVM的內存區域劃分,這部分答得還不錯,但是后來又問了Java里面String存放的位置,之前只記得String是一個不變的量,應該是要存放在常量池里面的,但是后來問到new一個String出來應該是放到哪里的,這個應該是放到堆里面的,后來又問到String的引用是放在什么地方的,當時傻逼的說也是放在堆里面的,現在總結一下:基本類型的變量數據和對象的引用都是放在棧里面的,對象本身放在堆里面,顯式的String常量放在常量池,String對象放在堆中。

常量池的說明

常量池之前是放在方法區里面的,也就是在永久代里面的,從JDK7開始移到了堆里面。這一改變我們可以從oracle的release version的notes里的** Important RFEs Addressed in JDK 7 **看到。

?
1
2
3
Area: HotSpot
Synopsis: In JDK 7, interned strings are no longer allocated in the permanent generation of the Java heap, but are instead allocated in the main part of the Java heap (known as the young and old generations), along with the other objects created by the application. This change will result in more data residing in the main Java heap, and less data in the permanent generation, and thus may require heap sizes to be adjusted. Most applications will see only relatively small differences in heap usage due to this change, but larger applications that load many classes or make heavy use of the String.intern() method will see more significant differences.
RFE: 6962931

String內存位置說明

1.顯式的String常量

?
1
2
String a = "holten";
String b = "holten";

•第一句代碼執行后就在常量池中創建了一個值為holten的String對象;

•第二句執行時,因為常量池中存在holten所以就不再創建新的String對象了。

•此時該字符串的引用在虛擬機棧里面。

1.String對象

?
1
2
String a = new String("holtenObj");
String b = new String("holtenObj");

•Class被加載時就在常量池中創建了一個值為holtenObj的String對象,第一句執行時會在堆里創建new String("holtenObj")對象;

•第二句執行時,因為常量池中存在holtenObj所以就不再創建新的String對象了,直接在堆里創建new String("holtenObj")對象。

驗證一下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
 * Created by holten.gao on 2016/8/16.
 */
public class Main {
  public static void main(String[] args){
    String str1 = "高小天";
    String str2 = "高小天";
    System.out.println(str1==str2);//true
    
    String str3 = new String("高大天");
    String str4 = new String("高大天");
    System.out.println(str3==str4);//false
  }
}

返回結果:

?
1
2
true
false

以上這篇基于Java中字符串內存位置詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 午夜精品久久久久久久99蜜桃i | 天美传媒影视在线免费观看 | chinese456老年gay china外卖员gay帮口 | 沉香如屑西瓜视频免费观看完整版 | 久久黄色免费 | 201天天爱天天做 | 美女逼逼软件 | 欧美日韩国产一区二区三区不卡 | 99久久精品国内 | 爱色成人网 | 娇妻在床上迎合男人 | 91天堂一区二区 | 半挠脚心半黄的网站 | 操老妇| 99av涩导航 | haodiaocao的视频这里看 | 黑人与老女人做受 | 国产愉拍精品视频手机 | 国产成人手机在线 | 草逼的视频 | 国产欧美一区视频在线观看 | 成年人在线免费看 | 白发在线视频播放观看免费 | 成人综合网址 | 午夜影院免费入口 | 日韩免费在线视频观看 | 91在线 一区 二区三区 | 亚洲七七久久综合桃花 | 国内精品自产拍在线观看91 | jm漫天堂破解版 | chinaese中国女人厕所小便 | 久久精品国产在热亚洲完整版 | 国产精品二区高清在线 | 亚洲精品中文字幕第一区 | 日本大学生xxxxx69泡妞 | 美女扒开胸罩露出奶 | 亚洲精品视频导航 | 欧美成人免费观看bbb | 亚洲精品欧洲久久婷婷99 | 亚洲卡一卡2卡三卡4卡无卡三 | 欧美最新在线 |