都说String变动后会新建一个位置,如:
String sql=“xxxxx”;sql=“yyyyyyyyyyyy”;
在这个过程中”xxxxx”被释放了吗?
典型的对象释放是将对象置为null,
假如本人在sql=“yyyyyyyyyyyy”;之后加上sql=null,“xxxxx”被释放了吗?还是说只释放了“yyyyyyyyyyyy”。
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
不会马上被释放 会被标记