什么是适用于每个JVM的最小Java类文件?

Zub*_*air 3 java jvm .class-file

我希望对一系列JVM进行一种最小的"冒烟测试",如果可能的话,它包括JDK 1 - 8,OpenJDK,IBM JDK甚至Microsoft JDK.有没有办法制作一个应该能够测试它的最小Java类文件?

更新

应该可以运行:

java -cp ClassName

并且有输出确认JVM正在正常运行.

此外,对于那些认为JVM始终在运行的人应该知道我在一台机器上使用多达20个JVM的系统,并且某些JVM可能已损坏.另请注意,并非所有JVM都可以运行所有.class文件

Raf*_*ter 5

Java的兼容性套件(JCK)为这个确切目的而开发的.最小的jar不足以检查JVM实现的正确性,因为需要覆盖许多极端情况并且需要支持字节代码指令的任何组合.

如果您只是想检查最小程序是否运行,请使用空main方法将简单类编译为版本1中的Java类文件格式.由于Java的向后兼容性,任何JVM都应该可以理解这一点,并且JVM应该以状态退出代码0.

  • 访问该兼容性工具包的要求非常艰巨.它看起来不像普通开发人员可用的东西. (3认同)

Ant*_*ony 5

Krakatau有一个用于最小类文件的示例aseembler文件.

.class public minimal
.super java/lang/Object
Run Code Online (Sandbox Code Playgroud)

这将为您提供将在JVM中加载的最简单的类文件.它没有您通常从其他工具获得的所有可选元数据(例如Jasmin总是添加SourceFile属性).这不是最短的文件,因为你可以通过缩短类名来减少几个字节,但它基本上是最简单的类.

请注意,虽然此类将加载,但它不包含任何代码,因此您无法有意义地执行它.如果你想要一些可以作为入口点运行的东西,你需要添加一个main函数.这可以通过调整Hello World示例来删除打印代码来完成.

.class public Code
.super java/lang/Object

.method public static main : ([Ljava/lang/String;)V
    .limit stack 10
    .limit locals 10

    return
.end method
Run Code Online (Sandbox Code Playgroud)

这将为您提供一个可运行的类,并立即返回.所以它是具有主要功能的最简单的类.