Re: forcing finalize()
nukleus wrote:
Btw, I just read some posts on memory allocation/deallocation issues,
and I did not quite expect the behavior described.
I thought that object is gc'ed when there are no references left.
Java does not use reference counting.
Objects that are not reachable from the executing program can be
GC'ed.
So, if i have a multi-variable object, containing strings,
buffers, etc. and I put those objects in a Vector,
for the sake of argument, and, i do setElementAt() and set
it to null, i thought it becomes a subject to gc,
and, once it is gc'ed, all the buffers, strings, etc.,
it contains become subject to gc also.
The GC can/should GC them all in one sweep.
Secondly, if i have a string and then set it to a new value,
does the old value become a subject to gc?
Yes.
Sting s = "abc";
s = "def";
There are some special handling for string literals where Java
only have one object for the same literal.
What happens to "abc" string in terms of deallocation?
Is it the same as new String("def")
meaning that there is no longer a reference
to "abc" and it, therefore, is subject to gc?
Ignoring the special handling of String literals, then
as soon as there are no way to reach an object it can be GC'ed.
How do I release memory held by StringBuffer?
Just let the reference run out of scope.
When I set its size to 0 and start accumulating
a new data in it, what happens to the old data?
Is it gc'ed?
Depends on the implementation. You can look it up whether
it reuses the backing storage or not. I have not checked
it out myself. You should not code after that kind of
implementation issues.
Arne