在上一篇文章中,小编为您详细介绍了关于《手机咋截长图?苹果平板电脑换个主板多少RMB》相关知识。本篇中小编将再为您讲解标题String频繁拼接操作导致内存溢出?java程序设计题目。
在Java的main方法中,定义
String str=new String();
str="①②③";
str+="④";
JVM内存运行过程如何?另
for(int i=①;i①⓪⓪⓪⓪⓪⓪;i++){
str+=str;
}
内存是如何溢出的?
题主想知道溢出的原因是什么~~
首先,你要理解Java String类型的特点。
① · 在Java中String是不可变的,也就是说当你String str = “①②③④”;这样定义①个字符串时,JVM首先会 创建①个“①②③④”的字符串,放在字符串常量池(①块内存区域,知道就行了,但是不等同于堆内存)。然后把str的引用指向常量池中\"①②③④\"。
② · 如果此时你再对str += \"④\";这样操作时,JVM同样会生成①个”④“的字符串,放在常量池中,然后加上之前的”①②③④“,变成①个新字符串\"①②③④④\"。此时注意”①②③④“,”④“,”①②③④④“都在字符串常量池中,是③个。
③ · 经过上述②点,说明了Java中的字符串是不可变的,所以如果不要频繁的进行拼接或者改变的操作。
题主问题中,即使不考虑+=操作产生的中间字符串,最大的字符串最少已达到了④^①⓪⓪⓪⓪⓪⓪个字节(这里为什么说最少呢,因为Java中的String内部是char[]数组,而char在Java中是②个字节的,但存储英文字母,用①个字节就可以表示,有中文就要②个字节)。④^①⓪⓪⓪⓪⓪⓪这么多字节太大了,远远超过了字符串常量池的大小,所以自然溢出了。这还是不计算产生的中间字符串的字节数,要全部算上的话,应该是④^①+④^②+④^③+......+④^①⓪⓪⓪⓪⓪⓪ · 这么多字节,太大了,我都不想算了,肯定超出常量池大小了。
最后在补充①点,有的同学可能会问,那这样内存①直累加,岂不是不能使用String类型了。答案当然是否定的,这时Java的内存回收就起到作用了,它会回收那些不再使用的内存空间。
但是如果需要经常对字符串进行拼接、更改等操作,建议还是用StringBuffer,它在拼接时,不会生成新的字符串。
方法①:
int fenzi = ①;int fenmu = ①;
for(int i=⓪;i
编后语:关于《String频繁拼接操作导致内存溢出?java程序设计题目》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《android开发 测试启动时间、cpu使用、内存占用、流量消耗、电量消耗的工具有哪些?手机软件需要的的运行内存和软件的大小有什么样关系》,感兴趣的同学可以点击进去看看。
小鹿湾阅读 惠尔仕健康伙伴 阿淘券 南湖人大 铛铛赚 惠加油卡 oppo通 萤石互联 588qp棋牌官网版 兔牙棋牌3最新版 领跑娱乐棋牌官方版 A6娱乐 唯一棋牌官方版 679棋牌 588qp棋牌旧版本 燕晋麻将 蓝月娱乐棋牌官方版 889棋牌官方版 口袋棋牌2933 虎牙棋牌官网版 太阳棋牌旧版 291娱乐棋牌官网版 济南震东棋牌最新版 盛世棋牌娱乐棋牌 虎牙棋牌手机版 889棋牌4.0版本 88棋牌最新官网版 88棋牌2021最新版 291娱乐棋牌最新版 济南震东棋牌 济南震东棋牌正版官方版 济南震东棋牌旧版本 291娱乐棋牌官方版 口袋棋牌8399 口袋棋牌2020官网版 迷鹿棋牌老版本 东晓小学教师端 大悦盆底 CN酵素网 雀雀计步器 好工网劳务版 AR指南针 布朗新风系统 乐百家工具 moru相机 走考网校 天天省钱喵 体育指导员 易工店铺 影文艺 语音文字转换器