Applets not being garbage collected
3 Message(s) by 2 Author(s) originally posted in java programming
| From: Robert Larsen |
Date: Thursday, April 19, 2007
|
Hi
I am developing JAVA
applet games and have come across a problem that
seems to exist in the VM from Sun. I have tested in
Mozilla and Firefox
on
Windows and
Linux and IE (several versions) on Windows.
When I
run a game applet and then reload the page, two instances of the
game are running in the same VM. I have verified this with JMP
(
http://www.khelekore.org/jmp/), and as the more recent games use lots
of
memory (up to 42 megs), they run out of memory and throws a:
Exception in
thread "Image Fetcher 0" JAVA.lang.OutOfMemoryError: JAVA
heap space
JAVA.lang.OutOfMemoryError: JAVA heap space
If not on the first reload then on the second or third. This also
happens if I close
down the window and
open the game again. The only
thing that works is closing down all windows.
I have the following in the applets destroy() method:
public void destroy() {
System.out.println("Applet destroyed");
applet = null;
appletAdapter = null;
if (
engine != null) {
engine.destroy();
engine = null;
}
System.gc();
}
'applet' is a
reference to the applet itself.
'appletAdapter' is a proxy for calling methods on the applet (games can
also run as an
application so this
object implements methods for getting
"host", "applet parameters" and calling JAVAScript without the need for
an actual applet).
The engine object is the actual game and the applet doesn't have any
other references to anything, so this should clean up everything.
I also have this in the applet:
public void finalize() {
super.finalize();
System.out.println("Applet finalized");
}
...and this in the game engine:
protected void finalize() throws Throwable{
super.finalize();
System.out.println ("Engine finalized");
}When I
refresh the page I get "Applet destroyed" in my
console but
neither "Applet finalized" nor "Engine finalized" + I can see in JMP
that there are two instances of both the GameEngine (the 'engine'
reference) object and the applet.
One (obj. id.: 0x8b384ae0) is owned by sun.plugin.AppletViewer (obj.
id.: 0x8b382e40) which is owned by
sun.plugin.viewer.MNetscapePluginObject (obj. id.: 0x8b382a70) which is
owned by sun.plugin.AppletViewer (obj. id.: 0x8b382e40).
The other (obj. id.: 0x88f33000) is owned by JAVA.lang.ref.Finalizer
(obj. id.: 0x88f33118).
And it seems that it is never actually finalized. I
hit the System.gc
button in JMP and it frees lots of stuff, but not the applet and not the
game engine. I have had it running for hours and the finalizer never
seem to free the old reference.
I have tried inserting a delay for one minute before instanciating the
game engine so the garbage collecter has lots of time to free something
but that did not help.Do you guys know why this is ?
Can anything be done about it ?
Best regards,
Robert
| From: Andrew Thompson |
Date: Thursday, April 19, 2007
|
| From: Robert Larsen |
Date: Thursday, April 19, 2007
|
wrote in message:
wrote in message:
.
(applet browser memory problem)
Do you guys know why this is ?
No (and I personally, am beyond caring about
applet/browser/VM interaction problems).
Oh how I wish I lived in your world :-)
Browsers aren'thing but trouble.
Can anything be done about it ?
Launch the applet using web start. Here is an
example of an applet launched using web start.
<http://www.physci.org/jws/#jtest>
This has crossed my mind. Problem is that actually two applets run on
the same page (a game and a
chat applet) and running two separate
windows'd...well...suck.
This may be the
path I take if no other
solution is found, but then I
will build a new application with both the game and the chat in one. But
I'd really like to avoid that extra work so if anybody else has a
solution I'd dance a happy dance and buy you a beer :-)
Next Message: why does Sun JVM have a hard max mem limit of 93meg on 2gig pc with no setting done
Blogs related to Applets not being garbage collected
Java Question and Answer for Interview | revision 4
Java Vector class is internally synchronized and ArrayList is
not. 52. What are wrapped classes? Wrapped classes are classes that allow primitive types to be accessed as objects. 53. Does
garbage collection guarantee that a program will
...
Reference Objects and Garbage Collection
In this case, the soft reference is null, but
garbage collection does
not happen until the object is no longer strongly reachable. Here is the complete DisplayImage.
java source code. NOTE: The im object is set to null because there is
...
Core Java Interview Questions
Explain
Garbage collection mechanism in
Java; Why
Java is
not 100% pure object oriented language? What are interfaces? or How to support multiple inhertance in
Java? How to use C++ code in
Java Program? Differnece between “
Applet” and
...
Our goal for that business plan was simple. Remove variables ...
A place
not too far away, Lake Placid, had been made famous by a bunch of college kids beating a bunch of future NHL Russian hockey players. My school, Clarkson University, was almost as famous for attracting a
collection of those
...
Java Faqs
When you construct an instance of File, if the corresponding file does
not exist on the local file system, one will be created. When an instance of File is
garbage collected, the corresponding file on the local file system is deleted.
...
java World | revision 7
memory. It is possible for programs to use up memory resources faster than they are
garbage collected. It is also possible for programs to create objects that are
not subject to
garbage collection ...