Re: BC ABI (was "Re: [fedora-java] Re: Java OpenGL on FC4")

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



John M. Gabriele wrote:

1. What is the "new binary compatibility ABI" and why would it matter to
  me (J. Random Java Hacker)? Does it refer to linking with code that
  was natively compiled with an older (or newer?) version of GCJ?

2. Exactly why would I want to "treat GCJ as a kind of caching JIT"?
  Doesn't the libgcj runtime already do something like that?

3. The 3rd sentence says, "The original application remains unchanged".
  What is being discussed? What's the original application?

4. The 4th sentence says, "However, defineClass() is modified to find
  the executable form of the class in a shared library." Where's this
  defineClass() method defined? Why would it be in my code? Did I write
  it?

5. It goes on to talk about a ".db" file. Is a database involved here?

John,

Some Java applications make assumptions about their runtime environment that made it very difficult to run them natively compiled without significant source code modifications. Specifically, these applications contain their own code to read bytecode streams and load them as classes using the ClassLoader.defineClass() method. The Eclipse IDE is a well-known example in which virtually the entire application is loaded in this manner.

The "kind of caching JIT" (aka: gcj-dbtool) model described here is GCJ's solution to this problem. When defineClass() is called, the bytecode passed is matched, using the map contained in the ".db" file, against shared libraries containing the classes compiled in advance to native code.

More typical applications that do not utilize custom classloaders do not need to worry about this at all. The BC-ABI (that is, the -findirect-dispatch option to gcj) can be used independently of gcj-dbtool to generate a binary that should continue to work despite changes to libgcj and other dependent class libraries. On the other hand, if you compile an application using the old style "C++ ABI", it will break as soon as any changes to the public APIs of dependent class libraries are made. In the past, as you can imagine, this was a significant limitation and an impediment to more widespread adoption of GCJ.

I agree with you that GCJs documentation could use a significant spruce-up, specifically in the area of entry-level, explanatory, and HOWTO type stuff. Let me assure you that any contributions to this effort will be gratefully received by the GCJ maintainers and quickly reviewed/applied.

Regards

Bryce


[Index of Archives]     [Red Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]

  Powered by Linux