没想到这里被拿到提问了里面来了,不好意思给大家带来不好的影响,我是写这本书的人,或者叫人为某些东西可以分享的分享者,不算是真正的作者。
关于这个问题并不是本书的重点,我们只是通过这个小话题展开一些探讨和思考,逐步理解更多的东西。
关于3楼同学提到的+申请新的空间,这个要看情况,有些会涉及到编译时合并的问题。常规情况下会新分配空间,到底会多分配多少空间?以及空间到底是如何转换的,简单说它编译完成后有分配StringBuilder,最后toString出来的,分配的空间不止一块。
而常规情况下慢其实的关键不是分配空间部分,因为JVM现在的版本分配一个对象的时间是非常快的,导致的主要原因是循环中的分配会导致前一次循环的结果会变成垃圾,而且垃圾会越来越大,导致不断做GC的情况,随着垃圾越来越大,在经过Minor GC后Survivor空间放不下会直接进入Old区域,那么随之而来的就是不断FULL GC,这些可以将GC日志输出打印得到结论。StringBuilder本身在实现上也会发生扩容的问题,不过它最大的区别在于扩容后在下一轮循环的时候append的内容只要没有达到上限,数组就还可以继续复用,不会变成垃圾,不过它并不是没有优化的余地,它也有缺陷,从数据结构和空间上就能看得非常清楚(当然很多人不需要知道,所以也只是写给一部分人看的)。
当然还有很多细节这里肯定说不完,会在样章中说一说,证明这些结论的内容会在讲解JVM的章节联系起来讲,第一章只是说个大概而已,在后续讲解挺多内容的地方也会涉及到相关的问题和原因。为啥和这玩意较劲,一个是天天和他打交道,另一个是希望大家通过理解这种东西然后去逐步思考和理解更多的东西,如果仅仅着眼于这个点上,那么在这本书确实学不到什么,前言没有公布在PDF中是我的遗憾,其实在前言中有说明本书的阅读方法以及适合的人群,针对的人和写作目的。
最后我留下一些地址吧,以免大家在这个问题上继续纠结:
关于本书还有一些前言、第3、第5章的样章,可以在博客中找到,以及本书写作针对的人群,写作的目的和心态都在博客中存在,谢谢!
博客主地址:http://blog.csdn.net/xieyuooo
目录及下册要写的内容:http://blog.csdn.net/xieyuooo/article/details/38373409
前言(个人推荐,因为这个可以看出你是否适合此书以及如何阅读该书,文章头部是广告,可忽略):http://blog.csdn.net/xieyuooo/article/details/38612913
第3章的部分手稿(和实际书有点区别,但不大):http://blog.csdn.net/xieyuooo/article/details/17452383
第5章的部分手稿(同上,有点区别):http://blog.csdn.net/xieyuooo/article/details/17318131
CSDN勘误沟通:http://blog.csdn.net/xieyuooo/article/details/39339997
iteye勘误沟通:http://www.iteye.com/topic/1135477
2014年9月26日 00:01