Pregunta

Quiero una especie de "prueba de humo" mínima para una serie de JVMS, que van desde JDK 1 - 8, OpenJDK, IBM JDK, e incluso Microsoft Jdks, si es posible.¿Hay alguna manera de hacer un archivo de clase Java mínimo que debería poder probar esto?

Actualización

Debería ser posible ejecutar:

JAVA -CP ClassName

y tenga resultados que confirmen que el JVM se está ejecutando correctamente.

Además, para aquellos que piensan que JVMS siempre funcionan, debe saber que uso sistemas que tienen hasta 20 JVM en una máquina, y algunos de los JVM pueden estar corrompidos.También tenga en cuenta que no todos los JVM pueden ejecutar todos los archivos .class

¿Fue útil?

Solución

Krakatau tiene Un ejemplo de archivo Aseembler para el Minimal ClassFile.

.class public minimal
.super java/lang/Object

Esto le dará el archivo de clase más sencillo posible que se cargará en el JVM. No tiene todos los metadatos opcionales que generalmente obtendrás de otras herramientas (Jasmin, por ejemplo, siempre agrega un atributo de FuenteFile). Este no es el archivo más corto posible, ya que puede afeitarse algunos bytes acortando el nombre de la clase, pero es básicamente la clase más simple posible.

Tenga en cuenta que si bien esta clase se cargará, no contiene ningún código para que no pueda ejecutarlo de manera significativa . Si desea algo que pueda ejecutarse como punto de entrada, deberá agregar una función principal. Esto se puede hacer adaptando el Hola mundo ejemplo para eliminar el código de impresión.

.class public Code
.super java/lang/Object

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

    return
.end method

Esto le dará una clase que es ejecutable, y que regrese de inmediato. Así que es la clase más simple posible con una función principal.

Otros consejos

la kit de compatibilidad Java (JCK) se desarrolla para este propósito exacto.Una tarra mínima no sería suficiente para verificar la exactitud de una implementación de JVM, ya que hay muchos casos de esquina para cubrir y cualquier combinación de instrucciones de código de byte deben ser compatibles.

Si simplemente quiso verificar si se ejecuta un programa mínimo, compila una clase simple con un método vacío main con un formato de archivo de clase Java en la versión 1. debido a la compatibilidad de Java hacia atrás, esto debería ser comprensible por cualquier JVM y el JVMdebe salir con el código de estado 0.

Cualquier clase que tenga un método principal puede ejecutar en cualquier JVM, este puede ser el caso mínimo para probar, por ejemplo,

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top