|
One additional question how does RPG get a hold of the returned objects and
use them to perform other tasks like print or insert into a PF etc.
Thanks
----- Original Message -----
From: <bmorris@ca.ibm.com>
To: <rpg400-l@midrange.com>
Sent: Friday, February 08, 2002 1:09 PM
Subject: Re: Calling java methods
> >Date: Fri, 08 Feb 2002 05:11:02 -0700
> >From: "David Morris" <David.Morris@plumcreek.com>
> > ...
> > /free
> > 1 wrkString = newString('invoice');
> > invElement = newElement(wrkString);
> > invDocument = newDocument(invElement);
> > 2 wrkString = newString('/home/dmorris/simpleinvoice.xml');
> > invFileWriter = newFileWriter(wrkString);
> > XMLOutputter$output(invXMLOutputter: invDocument:
> > invFileWriter);
> > /end-free
>
> David, this code has a problem that I imagine will turn out to
> be a common problem. It's similar to a memory leak (object leak)?
>
> At the line I marked 1, you create a new string object. Then you
> get another new string object at line 2, losing the reference to
> the first string object. This would be fine in Java, since Java
> understands lost object references. But Java has no idea that
> your RPG code lost the object reference, so it can never free that
> object. You should be calling freeLocalRef(wrkString) before
> you get the second string. There's an example of doing this in
> the Programmer's Guide.
>
> All those references should probably be freed before the procedure
> returns.
>
> (If this is a native method, called from Java, it's not so important.
> In fact, with native methods, the opposite problem exists. Java
> assumes that all objects created during native methods can be freed
> as soon as the native method returns. This means that any object
> references you have in static storage have bogus values when you
> call the native method again, unless you get a global reference.
> (See the programmer's guide again.) The worst thing that can
> happen is that you have an old reference to an object that has
> been freed, and the reference number has been reused, and it now
> refers to a completely different object. Not so bad, unless it's
> an object of the same class. (It's not so bad if it's a different
> class because you'll get an exception when you try to use it - if
> it's the same class, you probably won't get an exception.)
>
> Barbara Morris
>
> _______________________________________________
> This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing list
> To post a message email: RPG400-L@midrange.com
> To subscribe, unsubscribe, or change list options,
> visit: http://lists.midrange.com/cgi-bin/listinfo/rpg400-l
> or email: RPG400-L-request@midrange.com
> Before posting, please take a moment to review the archives
> at http://archive.midrange.com/rpg400-l.
>
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.