我的理解: 1就创建一个String,没有处理,2,循环中str是a,4循环中str是aa,死循环也能跑很久才能占满内存 3部分的str是a的长度一直成指数增加,a, aa ,aaaa ,aaaaaaaa, aaaaaaaaaaaaaaaaa......这样增加的太快,内存溢出了
大概意思是写在while循环外面,str可以做为GC roots,引用的new String("a")不会被垃圾回收,因为char[] copy = new char[newLength];数组copy过程中导致的堆溢出, 如果写在while循环里面不会作为GC Roots,会调用finalize()会被垃圾回收。。。。
51,396
社区成员
85,836
社区内容
加载中
试试用AI创作助手写篇文章吧