Applets not being garbage collected

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Robert Larsen

    #1

    Applets not being garbage collected

    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.OutOf MemoryError: Java
    heap space
    java.lang.OutOf MemoryError: 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.prin tln("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 does not 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.prin tln("Applet finalized");
    }
    ....and this in the game engine:
    protected void finalize() throws Throwable{
    super.finalize( );
    System.out.prin tln ("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.Appl etViewer (obj.
    id.: 0x8b382e40) which is owned by
    sun.plugin.view er.MNetscapePlu ginObject (obj. id.: 0x8b382a70) which is
    owned by sun.plugin.Appl etViewer (obj. id.: 0x8b382e40).

    The other (obj. id.: 0x88f33000) is owned by java.lang.ref.F inalizer
    (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 didn't help.


    Do you guys know why this is ?
    Can anything be done about it ?

    Best regards,
    Robert
  • Andrew Thompson

    #2
    Re: Applets not being garbage collected

    Robert Larsen wrote:
    ..
    (applet browser memory problem)
    >Do you guys know why this is ?
    No (and I personally, am beyond caring about
    applet/browser/VM interaction problems).
    >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>

    --
    Andrew Thompson


    Message posted via JavaKB.com
    Alexistogel merupakan situs slot online server asia yang menawarkan kemudahan dalam bermain slot tanpa harus mengeluarkan modal besar.


    Comment

    • Robert Larsen

      #3
      Re: Applets not being garbage collected

      Andrew Thompson wrote:
      Robert Larsen wrote:
      .
      (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 are nothing 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 would...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 would really like to avoid that extra work so if anybody else has a
      solution I would dance a happy dance and buy you a beer :-)

      Comment

      Working...