すべてのJVMで動作する最小Javaクラスファイルは何ですか?
-
21-12-2019 - |
質問
JDK 1 - 8、OpenJDK、IBM JDK、さらにはMicrosoft JDKの範囲のJVMのための一種の最小限の "Smoke Test"、可能であれば、Microsoft JDKの範囲です。これをテストすることができるはずの最小限のJavaクラスファイルを作成する方法はありますか?
更新
実行可能であるべきです:
java -cp classname
とJVMが正しく実行されていることを確認する出力を出力しました。
また、JVMが常に機能していると考えている人は、1つのマシンに最大20のJVMを持つシステムを使用することを知っておくべきです。また、すべてのJVMがすべての.Classファイルを実行できるわけではないことにも注意してください。
解決
krakatauは、最小限のクラスファイルの例aSeemblerファイルです。
.class public minimal
.super java/lang/Object
.
これはあなたにJVMにロードされる最も単純な可能なクラスファイルを与えるでしょう。通常他のツールから取得するすべてのオプションのメタデータはありません(たとえば、Jasminは常に常にSOURCEFILE属性を追加します)。クラス名を短くすることで数バイトを剃ることができるため、これは可能な限り最短ファイルではありませんが、基本的に最も単純な可能なクラスです。
このクラスがロードされている間は、どんなコードも含まれていませんので、意味的に EXECESSE を実行できません。エントリポイントとして実行できるものが必要な場合は、メイン機能を追加する必要があります。これは、 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
.
これはあなたにrunnableのクラスを与え、すぐに返すでしょう。それで、それは主な関数を持つ最も単純な可能なクラスです。
他のヒント
Java互換性Kit (JCK)はこの正確な目的のために開発されています。最小限のジャーは、カバーするコーナーケースが多いので、JVM実装の正確さをチェックするのに十分ではありません。
最小限のプログラムが実行されているかどうかを確認したい場合は、空のmain
メソッドをバージョン1のJavaクラスファイル形式にコンパイルします.Javaの後方互換性のため、これはJVMとJVMによって理解できます。ステータスコード0
を終了する必要があります。
主な方法を持つ任意のクラスは任意のJVMで実行できます。これは、テストするための最小限の場合です。
class Hello {
public static void main (String args[])
{
System.out.println("hello");
}
}
.