Aproximando internals de Java / JVM [closed]

15

Eu programei em Java por cerca de 8 anos e conheço a linguagem muito bem como desenvolvedor, mas meu objetivo é aprofundar meus conhecimentos sobre os internos. Eu fiz cursos de graduação em PL design, mas eles eram muito amplas visões acadêmicas (em Scheme, IIRC).

Alguém pode sugerir uma rota para começar a investigar os detalhes? Especificamente, há tópicos específicos (por exemplo, coleta de lixo) que podem ser mais acessíveis ou um bom ponto de partida? Existe um livro decente de alto nível sobre os componentes internos da JVM e o design da linguagem de programação Java? Minha abordagem atual será começar com a especificação da JVM e pesquisa conforme necessário.

    
por spinning_plate 01.06.2012 / 02:11
fonte

4 respostas

13

Eu fiz um pouco disso quando comecei com o Java, anos atrás. Minha abordagem foi ler a especificação de VM e procurar na saída do javap -c, que exibe o bytecode desmontado de uma classe. Eu também tentei criar classes java com bytecode particular, usando um assembler bytecode java. Existe um assembler chamado jasmin , se você quiser tentar isso.

Você também pode querer olhar para o documento de tradução da Lambda Expression que Brian Goetz da Oracle postou, que aborda a estratégia que será usada para traduzir os lambdas (closures, essencialmente) que estão sendo adicionados no Java 8.

Você também pode obter o código-fonte da VM do Hotspot do OpenJDK e a versão de acesso antecipado do javac compilador com suporte a lambda (hg repository) para JDK 8, se você realmente quiser mergulhar no fundo da piscina.

Examinar a coleta de lixo provavelmente é uma boa ideia. Uma rápida pesquisa apareceu neste Dr. Artigo de Dobbs no GC de primeiro lixo do Java. Não sei se é uma boa introdução. Eu suponho que você já sabe sobre coletores de lixo de marca e varredura e geração; se não, você vai querer ler os primeiros.

    
por 01.06.2012 / 02:46
fonte
3

Algumas ideias adicionais:

  • Participe do projeto OpenJDK . Nada é melhor do que entender os componentes internos de alguns softwares, hackeando-os!
  • Veja como outras linguagens da JVM (por exemplo, Clojure ou Scala) geram código para a JVM
  • Faça um miniprojeto que lhe interesse e exija o uso de internos da JVM. Talvez usando algo como ASM para manipular o bytecode.
por 01.06.2012 / 09:33
fonte
2

Se você ainda não conhece o formato de bytecode do Java, considere escrever um compilador minúsculo que crie um código de byte Java válido (ou o Jasmin assembler) e execute-o corretamente.

Ver "Hello World" ou "4" (dado 2 + 2) gerado pelo seu código é muito satisfatório.

    
por 01.06.2012 / 13:22
fonte
1

Além do que todos os outros disseram, confira a página Ajuste de desempenho Java . Ele contém muitos artigos sobre coleta de lixo e ajuste de desempenho em geral. Ele também contém uma lista de livros de ajuste de desempenho que pode ser interessante para você também.

    
por 01.06.2012 / 12:45
fonte

Tags