String频繁拼接操作导致内存溢出?java程序设计题目

发表时间:2017-12-26 09:48:01 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《手机咋截长图?苹果平板电脑换个主板多少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使用、内存占用、流量消耗、电量消耗的工具有哪些?手机软件需要的的运行内存和软件的大小有什么样关系》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题