成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

Java String的intern方法使用場景示例

瀏覽:89日期:2022-08-20 17:08:00

在講intern方法前,我們先簡單回顧下Java中常量池的分類。

常量池的分類

Java中常量池可以分為Class常量池、運行時常量池和字符串常量池。

1. Class文件常量池

在Class文件中除了有類的版本、字段、方法、接口等描述信息外,還有一項信息是常量池(Constant Pool Table),用于存放編譯期生成的各種字面量和符號引用。

所謂字面量類似與我們平常說的常量,主要包括以下兩種

文本字符串,例如String a = 'aa'。其中'aa'就是字面量。 被final修飾的變量。

符號引用包括以下形式:

類和接口和全限定名:例如對于String這個類,它的全限定名就是java/lang/String。 字段的名稱和描述符:所謂字段就是類或者接口中聲明的變量,包括類級別變量和實例級的變量。 方法的名稱和描述符:所謂描述符就相當于方法的參數類型+返回值類型。

2. 運行時常量池

我們知道類加載器會加載對應的Class文件,上面介紹的Class文件常量池中的數據,會在類加載后進入方法區中的運行時常量池。運行時常量池是全局共享的,多個類共用一個運行時常量池。運行時常量池存在于方法區中。

3. 字符串常量池

看名字我們就可以知道字符串常量池是用來存放字符串的,也就是說Class文件常量池中的文本字符串會在類加載時進入字符串常量池。

那字符串常量池和運行時常量池是什么關系呢?上面我們說Class文件常量池中的字面量會在類加載后進入運行時常量池,其中字面量中也包括文本字符串,從這段文字我們可以知道字符串常量池存在于運行時常量池中,也就存在于方法區中。

但是到了JDK1.7時,字符串常量池被移出了方法區,轉移到了堆里了。另外需要我們重點注意的是:字符串常量池中存放的并不是字符串本身,而是字符串對象的引用。

程序運行時,除非手動向常量池中添加常量(比如調用intern方法),否則jvm不會自動添加常量到常量池。

String 的 intern 方法

String 方法的作用是:判斷字符串常量池中是否存在一個引用,這個引用指向的字符串對象和當前對象相等(使用 equals 方法判斷相等),如果存在直接返回這個引用,如果不存在則創建一個字符串對象并將其引用存入字符串常量池。

下面舉個列子幫助加深理解。

//代碼基于JDK 8//s1指向字符串常量池中的'自由之路'String s1 = '自由之路';//s2也指向字符串常量池中的'自由之路'String s2 = '自由之路';//s3指向堆中的某個對象String s3 = new String('自由之路');//因為字符串常量池中已經存在'自由之路'的引用,直接返回這個引用String s4 = s3.intern();//創建一個字符串對象String s5 = new String('ddd');//常量池中不存在指向'ddd'的引用,創建一個'ddd'對象,并將其引用存入常量池String s6 = s5.intern();//創建一個字符串對象String s7 = new String('ddd');//常量池中存在指向'ddd'的引用,直接返回String s8 = s7.intern();System.out.println('s1==s2:'+(s1==s2));System.out.println('s1==s3:'+(s1==s3));System.out.println('s1==s4:'+(s1==s4));System.out.println('s5==s6:'+(s5==s6));System.out.println('s6==s8:'+(s6==s8));System.out.println('s7==s8:'+(s7==s8));

返回的結果如下:

s1==s2:trues1==s2:falses1==s2:trues5==s6:falses6==s8:trues7==s8:false

intern 方法使用場景

我們來看下面這個方法。

public class Person{ String name; public void setName(String name) { this.name = name }}

假如現在的Person對象都叫小明,那么這些Person對象都會引用一個不同的字符串對象。

Java String的intern方法使用場景示例

如果我們改進下這個方法:

public class Person{ String name; public void setName(String name) { this.name = name.intern(); }}

那么對象的引用結構如下圖所示

Java String的intern方法使用場景示例

這樣明顯可以節省多個字符串對象的空間。我寫了一個測試程序:

public class JavaTest { public static void main(String[] args) throws Exception { //一個很大的字符串 String s = 'c...c'; List<Person> personList = new ArrayList<>(); int count = 100000; for (int i = 0; i < count; i++) { Person p = new Person(); p.setName(new String(s)); //防止垃圾回收 personList.add(p); System.out.println(i); } System.out.println('success...'); } public static class Person{ private String name; public void setName(String name) { this.name = name; } }}

為了讓程序快速將內存耗盡,我這邊將內存設置成5M。

-Xms5m -Xmx5m

結果如下:

...9388993890Exception in thread 'main' java.lang.OutOfMemoryError: GC overhead limit exceededat com.csx.demo.spring.boot.util.JavaTest.main(JavaTest.java:15)

創建9w多個對象時已經報OutOfMemoryError錯誤了。

下面調整下 Person 的 set 方法,再執行下。

public static class Person{ private String name; public void setName(String name) { this.name = name.intern(); }}

999979999899999success...

順利執行完成。

以上就是Java String的intern方法使用場景示例的詳細內容,更多關于Java String的intern方法的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
久久综合九色综合欧美98| 亚洲一区二区三区四区五区中文 | 欧美一卡二卡在线观看| 亚欧色一区w666天堂| 国产美女一区| 亚洲另类春色国产| 亚洲欧洲一区二区在线观看| 国产精品天天摸av网| 色综合天天综合在线视频| 欧美一区二区在线免费播放| 久久不见久久见中文字幕免费| 一本到不卡精品视频在线观看| 亚洲国产日日夜夜| 亚洲一区二区三区精品动漫| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 久久中文在线| 亚洲国产一区二区视频| 久久久久成人精品免费播放动漫| 亚洲午夜久久久久久久久电影院| 国产视频久久| 亚欧色一区w666天堂| 久久国产高清| 偷拍与自拍一区| 色婷婷综合久久久中文字幕| 日韩成人一区二区三区在线观看| 久久国产日本精品| 日韩电影免费在线观看网站| 色久优优欧美色久优优| 麻豆中文一区二区| 欧美日本精品一区二区三区| 国产老肥熟一区二区三区| 91精品国产色综合久久| 成人在线一区二区三区| 欧美va亚洲va| 91在线云播放| 国产精品成人一区二区艾草 | 亚洲欧美怡红院| 国产精品一页| 午夜精品成人在线| 欧美日韩成人一区二区| 国产成人一级电影| 精品国产成人系列| 午夜亚洲福利| 亚洲精品菠萝久久久久久久| 久久久999| 国产在线视频一区二区| 日韩一卡二卡三卡四卡| 91原创在线视频| 亚洲婷婷综合久久一本伊一区| 国产精品免费在线| 美女任你摸久久| 日韩美女一区二区三区| 欧美日韩调教| 亚洲福利一区二区| 欧美视频在线不卡| 粉嫩绯色av一区二区在线观看| 久久久精品中文字幕麻豆发布| 亚洲午夜在线观看| 亚洲6080在线| 欧美撒尿777hd撒尿| 成人免费毛片嘿嘿连载视频| 中文av字幕一区| 免费久久久一本精品久久区| 久久精品噜噜噜成人88aⅴ| 日韩美女天天操| 亚洲高清精品中出| 肉肉av福利一精品导航| 欧美一区二区三区男人的天堂| 色综合天天综合色综合av | 在线观看视频91| 国产超碰在线一区| 中文天堂在线一区| 久久中文在线| 99久久综合色| 一二三四区精品视频| 欧美久久一二三四区| 91老师片黄在线观看| 夜夜爽夜夜爽精品视频| 欧美精品18+| 国内精品视频在线播放| 日本亚洲一区二区| 精品成人一区二区| 国产一区二区精品| 麻豆一区二区99久久久久| 26uuu久久天堂性欧美| 国产精品亚洲产品| 国产91富婆露脸刺激对白| 一区二区三区在线视频观看58| 欧美日韩午夜影院| 激情视频一区二区| 经典三级视频一区| 中文字幕一区在线观看| 欧美日韩国产首页| 亚洲高清视频一区| 国产伦理精品不卡| 亚洲三级免费电影| 欧美男女性生活在线直播观看| 欧美视频一区| 激情久久五月天| 国产精品久久久久久久久久久免费看 | 国产成人在线视频播放| 亚洲精品免费在线| 欧美一级午夜免费电影| 欧美日韩一区二区视频在线观看 | 欧美一区二区久久久| 伊人久久大香线蕉综合热线| 狠狠色伊人亚洲综合成人| 亚洲欧美日韩小说| 欧美大片在线观看| 亚洲中字在线| 欧美一站二站| 国产一区二区不卡| 亚洲不卡在线观看| 国产欧美视频一区二区三区| 在线播放中文字幕一区| 亚洲欧美日韩精品久久久| caoporn国产精品| 肉丝袜脚交视频一区二区| 久久精品网站免费观看| 欧美三区免费完整视频在线观看| 激情综合视频| 成人v精品蜜桃久久一区| 日韩一区精品视频| 亚洲日本青草视频在线怡红院 | 一区二区三区av电影 | 久久国产成人| 伊伊综合在线| av午夜精品一区二区三区| 日本不卡不码高清免费观看| 综合久久久久久| 精品久久久久久最新网址| 欧美自拍丝袜亚洲| 在线综合欧美| 色综合久久综合网97色综合| 国产在线麻豆精品观看| 午夜精品一区二区三区免费视频 | 日韩视频在线永久播放| 免费国产自线拍一欧美视频| 欧美不卡在线| 国产一区91精品张津瑜| 日韩激情视频在线观看| 亚洲欧美一区二区视频| 久久综合一区二区| 欧美丰满高潮xxxx喷水动漫| 老司机免费视频久久| 国产精品日韩| 亚洲国产精品一区二区第一页| 91日韩精品一区| 国产一区在线精品| 日韩国产在线观看一区| 亚洲摸摸操操av| 国产精品久99| 久久影院午夜论| 欧美一区二区日韩| 欧美另类z0zxhd电影| 色噜噜狠狠一区二区三区果冻| 亚洲一区二三| 99re热精品| 黄色精品免费| 欧美精品99| 91麻豆成人久久精品二区三区| 成人黄色电影在线| 粉嫩av一区二区三区| 国产精品一区二区在线播放| 美女视频网站久久| 美女网站在线免费欧美精品| 日韩精品三区四区| 亚洲高清免费视频| 亚洲国产乱码最新视频| 亚洲影院免费观看| 亚洲黄色在线视频| 亚洲欧美日韩国产手机在线| 一区在线播放视频| 中文字幕精品一区| 欧美激情一区二区三区蜜桃视频 | 国产精品久久一级| 国产精品久久久久影院亚瑟 | 国产日韩成人精品| 中文字幕高清不卡| 中文幕一区二区三区久久蜜桃| 日本一区二区成人在线| 亚洲国产激情av| 国产精品拍天天在线| 国产精品久久久久精k8| 亚洲三级电影全部在线观看高清| 亚洲欧美电影一区二区| 亚洲精品免费在线播放| 亚洲最大色网站| 亚洲国产一区二区视频| 五月天激情综合网| 麻豆久久久久久久| 精品一区二区在线免费观看| 国产在线视频精品一区| 国产99一区视频免费| 成人18视频日本| 91丨porny丨在线| 欧美日韩福利| 亚洲午夜精品久久久久久浪潮| 亚洲区一区二区三区| 国产精品久久久免费|