JAVA的内存管理(100分)

  • 主题发起人 主题发起人 takou
  • 开始时间 开始时间
T

takou

Unregistered / Unconfirmed
GUEST, unregistred user!
请问在jre1.3上,String 类型的变量是什么时候释放内存了?
比如:1。
下例中,如果对s每次都赋不同的值,是否会造成内存不够呢。
String s = "123456";
while(true)
{
s = "123245";//每次都赋不同的值
}
2。 Vector中的String对象,在Vector.removeAllElements后是否会立即释放String对象的
内存呢。
 
jvm willdo
all things
 
请正面回答问题并说清楚一点可以吗。
 
Java will caculate all the memory that maybe used when execute and then
allocate memory.
So we shall never worry about it.
And if the memory is out of use, java may call gc() to collect the garbage, and release the memory used by them.
I think it won't release the memory right now for the object.
But if it is a constain variable or a temp variable, it will release the useless memory.
 
作为程序员其实根本无法控制,JAVA的内存释放(Garbage collection)。
所以在一般情况下,不必担心这个问体,因为它是由JVM包办了,担心也没方法。
但如果是负载比较重的情况下(比如说server程序),要尽量进行对象重用,
避免反复new对象。至于如何掌握对象重用,那就是体现水平的地方了。
 
我感觉当你声明一个字符串类型变量时就已经分配了内存,而当你赋值时只是在内存区写
数据,我最近也正在学Java,不过是刚开始。
“在Java中,垃圾收集器在设计时已考虑到了内存的释放问题(尽管这并不包括清除一个对象
涉及到的其他方面)。垃圾收集器“知道”一个对象在什么时候不再使用,然后会自动释放
那个对象占据的内存空间。采用这种方式,另外加上所有对象都从单个根类Object继承的事
实,而且由于我们只能在内存堆中以一种方式创建对象,所以Java的编程要比C++的编程简
单得多。我们只需要作出少量的抉择,即可克服原先存在的大量障碍”
摘自thinking in java中文版
 
也许是 String 操作时,往往不需要new 从而使人觉得迷惑.
在java中,声明一个对象时(String是一个对象),只是产生
一个句柄(类似于指针的作用),只有在赋与实际值时,才
分配内存空间。
 
完全同意tuki的說法,應該給他加分(給我10分吧)
 
TO: tuki:
请用例解释一下对象重用好吗?
可另外给分。
 
一般如String这样的对象,没有太大必要去重用。
但如果是 java.sql.Connection, 或者是XMLdo
M和SAX类型Parser
重量级的对象,就有重用必要。
重用原理并不难,可以在Main进入时,把需要的对象都new出来
然后加入Vector等对象容纳组件中,用的时候拿出来,用完再放回去。
这样就可以只在启动时花点时间。运行时效率就可大幅度提高。
但如果涉及多线程时,就要当心 死锁,同步等问题。
样例代码。。。
一下也想不出比较典型而短小的样例。
不好意思,其实me也不太在行 。。。
提醒一点 tuti 非tuki
 
另外再给tuti60分。请来拿。
 
请tuti进来拿60分。
 
多人接受答案了。
 
后退
顶部