This is the mail archive of the java@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Using Java objects from C++


Dave Menendez wrote:

I'm not familiar with the release cycle of GCC. Would we have to wait
for the next formal GCC release for this added functionality, or since
we have the source code, could a patch be posted whenever this is
ready? Just curious - I'm not trying to make demands of anyone's time.



Most changes go into CVS HEAD in the first instance, which will eventually become gcc 3.5. Since this should be a low-risk addition, we can also put it on the stable 3.4 branch for inclusion in 3.4.1. You could apply the patch yourself or just check out the latest 3.4 branch tree from cvs.


(In the future we hope to be able to provide interim updates to libgcj, independent of compiler releases - but this isn't really possible right now, for various reasons.)

Is explicit registration of static roots something that is
already available or something you would be planning to add in? I may
just have to dig around the header files some more if it's already
something I should be doing with the 3.4.0 GCC release.



It is something thats been on the wish-list for quite a while, but we haven't implemented it yet. We should be a step closer, however, once the "global ref" functionality is implemented.


P.S. One more thing, I was a bit mystified when I read in the mailing
list that even though I use "new" to allocate a Java object from C++,
I'm not supposed to call "delete" to get rid of it, but that it somehow
automagically gets collected by the GC. If someone could provide a
brief description of how the GC decides what is eligible for collection
or point me to a document to help me understand the logic, that would
also be much appreciated.


"new" is overloaded by java::lang::Object. So when you allocate a Java object, "new" actually calls the GC allocator, not the standard C++ one.



Maybe I need to read up on allocators in general - I understand that the
GC allocator gets used instead, but I wasn't sure how the GC detects
that one particular object I instantiated from C++ is no longer in use
if I didn't add it to some other Java object. Is it automatically
"dereferenced" somehow when the block containing the variable holding it
ends?



The key thing is that, with GCJ, there is a single stack for C++ and Java code. So, any local variables will be seen by the collector as it scans the stacks. If it sees a pointer to a Java object, that object will be marked regardless of whether the stack frame was allocated by Java or C++.


Regards

Bryce


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]