Which classes need to be supplied by any JVM?
Stephen Colebourne
scolebourne at joda.org
Fri Aug 21 08:14:59 UTC 2009
I was actually interested in the thrust of the original question, let me
rephrase it.
If you wanted to code from scratch a JVM, but not include the rest of
the Java SE platform (such as the .class files), what would you need to
include? Is Object.class mandatory for a pure JVM? Anything else?
The answers given imply that the JVM is not an isolated well defined
component. Yet that argues against being able to write a new programming
language for the JVM that has no integration whatsoever with the Java
language and just emits 'pure bytecode' for a 'pure JVM'.
I, like Carsten, find it odd if this isn't well-defined.
Stephen
David Holmes - Sun Microsystems wrote:
> As Martin stated what you are looking for is not part of the JVMS nor
> the JLS, but the platform specification, which is essentially the entire
> set of Java API's as found for example here:
>
> http://java.sun.com/javase/6/docs/index.html
>
> But the implementation of those classes will then have dependencies on
> other implementation specific classes, so I'm not sure that you will be
> able to establish a transitive closure of required classes that is
> independent of the JVM in question.
>
> If you were thinking about this from a basic language perspective - eg
> we must have Object, and we must have Class, and array implies
> Serializable etc, then there is a core set of classes that form the
> transitive closure of the JVM bootstrap process. If you are interested
> in that then -XX:+TraceClassLoading (might need a debug VM) will give
> you the set used by a particular VM. But again this list is dependent on
> how those classes are implemented themselves, so the list is JVM dependent.
>
> HTH
>
> David Holmes
>
> Martin Buchholz said the following on 08/21/09 03:32:
>> The set of all public APIs that must be part of the java se platform
>> are tested by the platform tck, in particular by the "signature test",
>> and you can get the sources for that test (for research only)
>> and from that it should be possible (with work) to get a list of
>> all required classes. But that's a very large list, so is probably not
>> what you want. In practice, the subset of rt.jar of public classes
>> matching java.* or javax.* is a pretty good approximation.
>>
>> Martin
>>
>> On Thu, Aug 20, 2009 at 08:26, Carsten Otto
>> <otto at informatik.rwth-aachen.de
>> <mailto:otto at informatik.rwth-aachen.de>> wrote:
>>
>> Hello,
>>
>> I am working on automated termination analysis of Java Bytecode
>> and I am
>> missing an important bit of information in the Java Virtual Machine
>> Specification (JVMS). I'd be happy to get some help from you!
>>
>> Every JVM needs to provide certain classes including code for their
>> native
>> methods, e.g. java.lang.Object (obvious) and java.io.Serializable
>> (because
>> every array implements it). The list of such classes can easily be
>> extended, but I have huge problems finding a lower bound to keep
>> this list
>> as small[1] as allowed according to the JVMS.
>>
>> Is there some part of the specification that states which classes
>> need to
>> be provided? I can only see references to the API (e.g. "reflective
>> APIs"),
>> but no clear definition of the classes that need to exist. In the
>> current
>> draft for JVMS 3rd edition, the necessity to include
>> java.io.Serializable
>> is not even part of the JVMS, this is only visible by looking at the
>> definition of arrays in the Java Language Specification (JLS).
>>
>> Some hints in this direction are also appreciated. So far I can only
>> guess,
>> that sun.awt.* is not part of the language defined in the JVMS -
>> but who
>> knows?
>>
>> [1]: Sadly, just using whatever Sun or OpenJDK provide in rt.jar
>> does not
>> work.
>>
>> Thanks a lot,
>> --
>> Carsten Otto otto at informatik.rwth-aachen.de
>> <mailto:otto at informatik.rwth-aachen.de>
>> LuFG Informatik 2 http://verify.rwth-aachen.de/otto/
>> RWTH Aachen phone: +49 241 80-21211
>>
>> -----BEGIN PGP SIGNATURE-----
>> Version: GnuPG v1.4.9 (GNU/Linux)
>>
>> iEYEARECAAYFAkqNaygACgkQjUF4jpCSQBTSEwCaA+MU0U73Cx1QS3Mgvr/6ZRET
>> 4vcAnicKi99CFGZe1kE+jcUXD3bz9m4J
>> =Brg8
>> -----END PGP SIGNATURE-----
>>
>>
>
More information about the core-libs-dev
mailing list