Pergunta

Quero uma espécie de "teste de fumaça" mínimo para uma série de JVMs, variando de JDK 1 a 8, OpenJDK, IBM JDK e até Microsoft JDKs, se possível.Existe uma maneira de criar um arquivo de classe Java mínimo que possa testar isso?

Atualizar

Deve ser possível executar:

java -cp nome da classe

E tenha uma saída que confirme que a JVM está funcionando corretamente.

Além disso, para aqueles que pensam que as JVMs estão sempre funcionando, devem saber que eu uso sistemas que possuem até 20 JVMs em uma máquina, e algumas das JVMs podem estar corrompidas.Observe também que nem todas as JVMs podem executar todos os arquivos .class

Foi útil?

Solução

Krakatau tem um exemplo de arquivo aseembler para o arquivo de classe mínimo.

.class public minimal
.super java/lang/Object

Isso fornecerá o arquivo de classe mais simples possível que será carregado na JVM.Ele não possui todos os metadados opcionais que você normalmente obtém de outras ferramentas (o Jasmin, por exemplo, sempre adiciona um atributo SourceFile).Este não é o arquivo mais curto possível, pois você pode reduzir alguns bytes encurtando o nome da classe, mas é basicamente a classe mais simples possível.

Observe que embora esta classe seja carregada, ela não contém nenhum código, portanto você não pode executar isto.Se quiser algo que possa ser executado como ponto de entrada, você precisará adicionar uma função principal.Isto pode ser feito adaptando o Olá Mundo exemplo para remover o código de impressão.

.class public Code
.super java/lang/Object

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

    return
.end method

Isso lhe dará uma classe que pode ser executada e que retorna imediatamente.Portanto, é a classe mais simples possível com uma função principal.

Outras dicas

O Kit de compatibilidade Java (JCK) foi desenvolvido exatamente para esse propósito.Um jar mínimo não seria suficiente para verificar a exatidão de uma implementação de JVM, pois há muitos casos extremos a serem cobertos e qualquer combinação de instruções de código de bytes precisa ser suportada.

Se você simplesmente quiser verificar se um programa mínimo é executado, compile uma classe simples com um espaço vazio main método para um formato de arquivo de classe Java na versão 1.Devido à compatibilidade com versões anteriores do Java, isso deve ser compreensível para qualquer JVM e a JVM deve sair com o código de status 0.

Qualquer classe que tenha um método principal pode ser executada em qualquer jvm. Este pode ser o caso mínimo a ser testado, por exemplo:

class Hello {
    public static void main (String args[])
    {
        System.out.println("hello");
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top