Code Bye

java中String变动的内存问题

都说String变动后会新建一个位置,如:
String sql=“xxxxx”;sql=“yyyyyyyyyyyy”;
在这个过程中”xxxxx”被释放了吗?
典型的对象释放是将对象置为null,
假如本人在sql=“yyyyyyyyyyyy”;之后加上sql=null,“xxxxx”被释放了吗?还是说只释放了“yyyyyyyyyyyy”。
解决方案

15

String sql=“xxxxx”;理论上xxxxx应该是在常量池中(常量池中有xxxx则直接将引用记数+1,常量池中没有时会创建字符串并放入常量池), sql = null; 或sql = “yyyy”; 之后假如仍然有变量引用该空间则不会被标记, 假如此时没有被引用且一段时间内也没有被引用的话会被标记, 之后才会被GC扫描回收.

1

“xxxxx”应该是被释放了吧。去找本关于java虚拟机的书看吧

2

l楼说的很明白,

2

    不会马上被释放 会被标记

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明java中String变动的内存问题