JVM能不能自动释放string所占用的存储空间

SimonDW 2005-04-04 09:28:11
Java里string对象是静态保存的。
如果程序中使用的字符串很多的话,这个所占用的空间就会很大。

我做的项目里有这样的问题:
因为要做log,所以会不断产生随时间变化而变化的字符串。
这样的话,就导致了使用了的heap堆不断增长。
如果产生速度比较快的话,就会明显的增长。

我想知道的是,这里的string会不会过一段时间后自动回收
被回收不常使用的部分?
...全文
257 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
SimonDW 2005-04-10
不过,好像我分析错,不是字符串占用的空间,
是用的log4j可能有什么缓存系统。
回复
SimonDW 2005-04-10
String 是immutable的类,是我弄错了。

到这里问,有时候还是能得到点东西的。
DanielYWoo你给的连接就很有用。
资料找起来,有时候真的是没办法一下子就能找到。

我只是需要足够确定的证据。
其实只要把heap的最大值设小点,等到极限了,
就会执行Full GC, log 里就可以看到变化了。
回复
wyx424 2005-04-06
你最好是写自己的回收代码,GC是不可靠的,因为没人会知道它什么时候会运行
回复
cuij7718 2005-04-06
对用StringBuffer,在处理大量的字符串的时候StringBuffer得效果提升很明显
回复
DanielYWoo 2005-04-06
>>Java里string对象是静态保存的。
要么你说错了,要么就是我理解错你的意思了。constant pool里的虽然是共享的,但绝不是静态的,heap里的就更不是了。

>>你最好是写自己的回收代码,GC是不可靠的
汗...

楼主,先看看这个再问,
http://java.sun.com/docs/hotspot/gc/
如果你懂了eden,generation, full gc, reachable的概念,你根本不用来论坛上问,问也是白问,大多数人都是一知半解来胡弄你的分
回复
kenny1979 2005-04-06
回复人: wyx424(思远) ( ) 信誉:100 2005-04-06 12:55:00 得分: 0


你最好是写自己的回收代码,GC是不可靠的,因为没人会知道它什么时候会运行

**************************************************************************
内存空间回收能自己写吗? 楼上的指条路!
回复
hongyan2004 2005-04-05
最好不要用STRING,用STRINGBUFFER更好,
是的,是过一段时间就会被GC回收
回复
yonggui111 2005-04-04
最好用StringBuffer类,要转换的时候用.toString()方法.
最好不要用 String s = "xxx";
回复
kingfish 2005-04-04
String s = new String("xxxxxxx");
这样是在heap上分配空间,如果s上没有任何引用, 那么就会被GC收集
回复
水之轮回 2005-04-04
JAVA里的垃圾回收机制是可以回收String用过后的内存空间,但照你的意思的话还是不要靠JVM的回收机制来回收你的String所花费的内存,因为JAVA里的回收机制并不是很可靠的,你不可能知道它何时才会启动,而且每次都要等到下次运行回收机制时才真正的回收你所不用的内存。
回复
发帖
Java SE
创建于2007-09-28

6.1w+

社区成员

Java 2 Standard Edition
申请成为版主
帖子事件
创建了帖子
2005-04-04 09:28
社区公告
暂无公告