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. Fiz cursos de graduação em design de PL, mas eram visões acadêmicas muito amplas (no Scheme, IIRC).
Alguém pode sugerir uma rota para começar a investigar os detalhes? Especificamente, existem 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 as partes internas da JVM e o design da linguagem de programação Java? Minha abordagem atual será começar com as especificações e pesquisas da JVM, conforme necessário.
SUPER
sinalizador nos arquivos de classe realmente faz? A maioria dos que está descrito na JVM especificação em si, mas requer algum trabalho para tirá-lo de lá e em seu cérebro ;-)Respostas:
Eu fiz um pouco disso quando comecei com Java, anos atrás. Minha abordagem foi ler as especificações da VM e examinar a saída do javap -c, que exibe o código de código desmontado de uma classe. Também tentei criar classes java com bytecode específico, usando um montador java bytecode. Existe um assembler chamado jasmin , se você quiser tentar isso.
Você também pode consultar o documento da Lambda Expression Translation publicado por Brian Goetz, da Oracle, que aborda a estratégia que será usada para converter os lambdas (fechamentos, essencialmente) que estão sendo adicionados no Java 8.
Você também pode obter o código-fonte da VM Hotspot no OpenJDK e a versão de acesso antecipado do compilador javac com suporte lambda (repositório hg) para o JDK 8, se você realmente quiser mergulhar no fundo do pool.
Examinar a coleta de lixo é provavelmente uma boa ideia. Uma pesquisa rápida revelou este artigo do Dr. Dobbs no primeiro GC de lixo de Java. Não sei se é uma boa introdução. Suponho que você já conheça coletores de lixo de marca e varredura e geracionais; caso contrário, você vai querer ler sobre eles primeiro.
fonte
Algumas idéias adicionais:
fonte
Se você ainda não está familiarizado com o formato Java bytecode, considere escrever um compilador minúsculo que crie um código de byte Java válido (ou o Jasmin assembler) e faça com que ele seja executado corretamente.
Ver "Hello World" ou "4" (dados 2 + 2) gerados pelo seu código é muito gratificante.
fonte
Além do que todos disseram, consulte a página Java Performance Tuning . 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 também podem ser interessantes para você.
fonte