Какой минимальный файл класса Java работает на каждой JVM?

StackOverflow https://stackoverflow.com//questions/25031528

  •  21-12-2019
  •  | 
  •  

Вопрос

Мне нужен своего рода минимальный «дымовой тест» для серии JVM, начиная от JDK 1–8, OpenJDK, IBM JDK и даже Microsoft JDK, если это возможно.Есть ли способ создать минимальный файл класса Java, который сможет это проверить?

Обновлять

Должна быть возможность запуска:

java -cp имя класса

И иметь выходные данные, подтверждающие, что JVM работает правильно.

Кроме того, тем, кто думает, что JVM работают всегда, следует знать, что я использую системы, в которых на одной машине имеется до 20 JVM, и некоторые из JVM могут быть повреждены.Также обратите внимание, что не все JVM могут запускать все файлы .class.

Это было полезно?

Решение

Кракатау имеет пример файла aseembler для минимального файла класса.

.class public minimal
.super java/lang/Object

Это даст вам максимально простой файл класса, который будет загружаться в JVM.В нем нет всех необязательных метаданных, которые вы обычно получаете из других инструментов (Jasmin, например, всегда добавляет атрибут SourceFile).Это не самый короткий из возможных файлов, поскольку вы можете сократить несколько байт, сократив имя класса, но по сути это самый простой возможный класс.

Обратите внимание, что, хотя этот класс будет загружен, он не содержит никакого кода, поэтому вы не сможете осмысленно выполнить IT.Если вам нужно что-то, что вы могли бы запустить в качестве точки входа, вам нужно будет добавить основную функцию.Это может быть сделано путем адаптации Привет, Мир пример удаления кода печати.

.class public Code
.super java/lang/Object

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

    return
.end method

Это даст вам класс, который можно запустить и который немедленно возвращается.Таким образом, это самый простой из возможных классов с функцией main.

Другие советы

А Комплект совместимости Java (JCK) разработан именно для этой цели.Минимального jar-файла будет недостаточно для проверки правильности реализации JVM, поскольку необходимо охватить множество крайних случаев и необходимо поддерживать любую комбинацию инструкций байт-кода.

Если вы просто хотите проверить, работает ли минимальная программа, скомпилируйте простой класс с пустым main в формат файла класса Java в версии 1.Благодаря обратной совместимости Java это должно быть понятно любой JVM, и JVM должна завершить работу с кодом состояния. 0.

Любой класс, который имеет основной метод, может выполнить в любом JVM, это может быть минимальным корпусом для тестирования, например.:

class Hello {
    public static void main (String args[])
    {
        System.out.println("hello");
    }
}
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top