quinta-feira, 8 de dezembro de 2011

JavaOne 2011 - Latin America

Apresentamos neste JavaOne uma palestra chamada: "Entendendo ClassLoaders: Dificuldades e Soluções" onde falamos como funcionam os class loaders e, principalmente, como funcionam os class loaders em servidores de aplicações e aplicativos web.

Sala cheia e gente de pé

Os slides da palestra podem ser vistas aqui.

sexta-feira, 7 de outubro de 2011

JavaOne 2011 Day 5

Hoje foi o ultimo dia do JavaOne 2011. O dia abriu com um keynote da IBM antes da Community Keynote. O representante da Oracle (Jason McGee) falou bastante sobre o cloud e como a IBM (e o comite do JEE) pretende facilitar a vida dos desenvolvedores Java. McGee tambem citou um GC diferente chamado Balance Collector que me pareceu interessante e estara disponivel no JDK7 do J9 (a JDK da IBM) para ser usado em sistemas com heaps muito grandes. McGee tambem reenforcou o comprometimento da IBM com Java ha muito tempo (e mais recentemente, quando eles entraram no OpenJDK). O KeyNote da IBM se seguiu com 1 minuto de silencio pela morte de Steve Jobs e em seguida, Donald Smith convidou membros da comunidade para subirem no palco e participar de um painel. O painel contom com, entre outras pessoas, Bruno Souza (do SouJava) Martijn Verburg (do London User Group e da session Diabolical Developer) e focou, principalmente, na comunidade e as dificuldades de se manter um JUG com varias pessoas participando (e sempre que vejo paineis como esse, sinto-me um pouco culpado pela minha baixa participacao). Por ultimo, 3 dos 4 membros do JavaPosse subiram ao palco e conduziram varias pesquisas com a plateia e as technical session comecara.

Do You Really get ClassLoaders? - Jevgeni Kabanov da Zero Turn Around
Honestamente achei que a palestra seria bem mais profunda do que foi. Jevgeni explicou o basico sobre classloaders e como eles funcionam em um ambiente JEE (mostrando varios exemplos bem didaticos) e explicando porque classloaders nao sao facilmente coletados. E como nao poderia deixar de ser, fez propaganda sobre o novo produto da Zero Turn Around - Live Rebel.

The Art Of Java Benchmark - Aleksey Shipilev e Dave Keenan da Oracle
Palestra muito interessante, mostrando as principais tecnicas para se fazer micro-benchmarks bem como os principais obstaculos (visiveis ou nao). Aleksey tambem falou em como deve se saber exatamente o que se deseja descobrir com um experimento antes de faze-lo para evitar o erro tipo III - errar a direcao da causa e efeito - encarando os benchmarks como experimentos cientificos - inclusive dando bastante enfase em interpretar corretamente os resultados.
Tambem deve se tomar cuidado para que a infraestrutura do benchmark nao interfira no benchmark propriamente dito. Talvez uma das melhores palestras sobre benchmarking que eu jah vi.

LMAX Disruptor: High-Performance Concurrent Programming Framework -Martin Thompson e Trisha Gee da LMAX
Ja tinha ouvido falar do LMAX Disruptor antes, mas esta foi a primeira vez que eu ouvi a explicacao completa de como ele foi concebido. A palestra foi um pouco estranha pelo formato (os palestrantes alternavam perguntas entre eles e mantinham um dialogo), mas o conteudo foi otimo. Martin explicou o que significa mechanical sympathy: uma maneira de programar, levando em consideracao como o hardware funciona (caches, pipelines, memoria, etc), mudando bastante o conceito de como pensar no design de um software. Por sorte, muito do que ajuda o hardware a fazer um bom trabalho pode ser considerado tambem boas praticas de desenvolvimento: classes e metodos pequenos e especializados e codigo simples. Martin tambem desafiou a nocao de que precisamos desenvolver softwares que sao executados em paralelo para obtermos performance - por exemplo, com os processadores atuais, podemos executar 3 bilhoes de instrucoes por segundo. Por ultimo, eles mostraram como funciona o disruptor:
-alguns processos (com uma thread cada) trabalham em cima de alguns ring buffers sem locks e sem sincronizar explicitamente os dados entre eles
-como os dados se encontram num ring buffer em arrays (que nao sao explicitamente descartados), quase todo os dados ficam nos caches da CPU e podem ser rapidamente acessados quando necessarios, diminuindo os cache misses
-quando um consumidor nao consegue consumir dados rapido o suficiente, o produtor comeca a ser pressionado, diminuindo a sua velocidade
Embora essa arquitetura tenha funcionado muito bem para eles (bem como para outros casos de uso que eles investigaram), eh uma estrategia bem agressiva e para usos bem especificos - basicamente para casos em que eh necessario um sistema de filas com latencia muito baixa e vazao muito alta.

A ultima palestra que eu assisti no dia foi meio estranha (pouca relacao com java e nao tao tecnica), falando sobre o CouchBase - uma juncao do CouchDB com MemCache e seu uso em jogos sociais (da Zynga e da Hiroku). Por ultimo, o palestrante mostrou o case da Tribal Crossing, uma empresa que desenvolve softwares para plataformas sociais e migrou do MySQL para CouchBase.

Conclusao
Achei um otimo evento em geral. Conversei com pessoas interessantes e algumas pessoas notaveis (Charles Nutter, Charlie Hunt, etc), aprendi muita coisa e conheci muitas ferramentas e tecnicas que provavelmente serao muito uteis. Espero honestamente que possamos participar como palestrantes da proxima vez.

quarta-feira, 5 de outubro de 2011

JavaOne 2011 Day 4

Penultimo dia do evento, hoje nao houve keynote de abertura e as technical sessions terminaram um pouco mais cedo. Antes de escrever sobre elas, vou escrever sobre duas sessoes que eu nao escrevi ontem.

Meet the JavaPosse - The JavaPosse team
O JavaPosse eh um podcast sobre desenvolvimento, principalmente centrado em java (nao soh a linguagem como todo o ecossistema que o cerca). Eh produzido por um grupo de desenvolvedores que tem ou em algum momento da carreira, tiveram grande contato com java e trabalharam em grandes empresas como Sun, Google, Applet, Netflix, etc. Eu aconselho fortemente a todos os desenvolvedores java que oucam o podcast (se eu nao me engao, eh publicado uma vez a cada 2 semanas).

The Heads and Tails of Project Coin - Joseph Darcy da Oracle
Esta palestra foi bem simples e basicamente explicou as funcionalidades implementadas no project Coin, detalhes de implementacao e tambem o que esta por vir na continuacao do project Coin no JK8 e JDK9 - dessa vez, porem, eles nao estao aceitando sugestoes e vao implementar as as sugestoes feitas anteriormente.

Com isso, seguem as technical sessions de hoje:

Blood from Stone: Low-Level HotSpot Flags for Optimization Nuts - Charles Oliver Nutter da Engine Yard
Esta palestra tambem poderia ser chamada: bytecode for dummies. Charles N. basicamente mostrou como funciona o JIT (tanto o client compiler quanto o server e o tiered), mostrando flags que podem ser ligadas em JVM's de producao e de debug para verificar o codigo de maquina gerado pelo HotSpot e diagnosticar porque um codigo nao esta sendo executado na velocidade que deveria. Por ultimo, Charlie mostrou um problema que ele estava enfrentando no codigo do JRuby que gerava problemas de performance, mesmo conhecendo pouco sobre o assembly gerado. Nao sei se estas tecnicas se aplicam a softwares "end-user" (mesmo o Charles nao confirmou com certeza), mas deve ser aplicar pelo menos nas bibliotecas basicas.

Rethinking How We Think About Parallel Programming - Nelson Chamberlain
Infelizmente a palestra para a qual eu estava originalmente agendado tinha se esgotado (e quem reservou, deve chegar com 15 minutos de antecedencia para garantir a reserva), entao assisti esta palestra. Nelson Chamberlain eh um professor de faculdade que esta tentando criar um metafora melhor para programacao paralela dado o fato de que nossos cerebros funcionam (normalmente) de maneira serial e fazemos varias tarefas simultanes da mesma maneira que um computador monoprocessado: atraves de time slices. Logo depois de explicar como o cerebro funciona, Prof. Nelson comecou a mostrar uma metafora com o ciclo de vida dos animais (nascer, "viver", reproduzir e morrer), para depois expandir a metafora para um quase paradigma novo de programacao, implementado no Avian Project. Honestamente achei o paradigma novo muito parecido com o que Erlang promove na sua arquitetura de Actors e passagem de mensagens. O projeto, porem, esta ainda em um estagio muito imaturo e esta a procura de contribuidores.

No proximo horario, nao havia nenhuma palestra particularmente interessante, entao achei a seguinte:

Get Physical! An Arduino Introduction for Java Developers - David Delabassee da Oracle
Arduino eh um micro controlador programavel opensource e de baixo custo que esta se tornando muito popular para quem quer fazer prototipos, dada a sua facilidade de programacao bem como a extensibilidade. Para programar para o Arduino, deve se usar uma linguagem de baixo nivel, mas o kit de desenvolvimento possui o conjunto completo de ferramentas para quem quiser desenvolver. Achei a palestra muito interessantes, embora tenha pouca conexao com java (o palestrante mencionou usar java para processar dados antes de enviar para o Arduino, que possui um processador bem fraquinho).

The Diabolical Developer - Martin Verburg da London Java User Group
Nao sei direito o que escrever sobre esta palestra - assim como nao sabia o que esperar dela pelo titulo. Achei bem divertida, mas pouco informativa - o palestrante usa uma linguagem bem sarcastica para mostrar alguns pontos que, no fim das contas, nao passam de bom senso. Alguns pontos notaveis:
-pessoas sobre processos
-nao cair no hype da atualidade (hoje eh cloud)
-simplificar ao inves de complicar
Confesso que, embora tenha achado a palestra interessante, provavelmente nao assistirei a mais nenhuma dessas.

Attack on Scaling: Methods and Tools for Eradicating Performance Bottlenecks - Charlie Hunt da Oracle e Aleksey Ignatenko da Intel
Ultima palestra do dia, esta palestra mostrou as principais causas de problemas de escalabilidade (locks e alocacao de memoria, basicamente) e como elas se manifestam (false sharing, true sharing, cache eviction). Os palestrantes mostraram tambem algumas ferramentas para detectar tais problemas: vTune da Intel e Oracle Solaris Performance Analyzer. Tais ferramentas sao capazes de mostrar eventos especificos da CPU (como CPI, cache misses, etc) e liga-los ao codigo java que os gerou, possibilitando diagnosticar os problemas diretamente na CPU.

Aproveitei o dia curto para falar com mais exibidores - particularmente falar com o pessoal do JRockit para ver um demo da ferramenta de diagnostico de performance deles chamado Mission Control. Fiquei bem impressionado com o que vi e com certeza darei uma olhada nele quando puder.

PS: Ontem esqueci de postar, mas o JavaOne Latin America esta confirmado para os dias 6 a 8 de Dezembro em Sao Paulo.

JavaOne 2011 Day 3

O dia comecou como os outros: com um keynote de abertura ministrado novamente por Adam Messinger que infelizmente nao consegui assistir. Mas conversei com muita gente e o keynote foi bem simples e com poucas surpresas - muitas pessoas comentaram que parecia uma conversa feita para os acionistas da Oracle ao inves de desenvolvedores. Algumas coisas, porem, foram anunciadas:
-teremos uma versao nova do java a cada 2 anos (ao inves dos 18 meses planejados ateh hoje) - a Oracle percebeu que nao era possivel entregar todas as funcionalidades planejadas em intervalos de 18 meses. Desse modo, teremos o JDK8 (com lambda, virtual extension methods e outras coisas) em meados de 2013 e JDK9 (jigsaw, coroutines, generics reificados, entre outras coisas) em meados de 2015.
-Twitter entrou no JDK e no JCP, muito provavelmente para melhorar o suporte da JVM em outras linguagens

Com isso, vamos direto as Technical Sessions:

Everything I Ever Learned About JVM Performance Tuning at Twitter - Attila Szegedi do Twitter
A palestra falou basicamente das diferentes opcoes de 'tunning' da JVM para minimizar, principalmente, a latencia e tempo de resposta das aplicacoes. Attila mostrou os diferentes tipos de GC, como as classes e objetos "ocupam" espaco na memoria e o que pode ser feito para minimizar o uso de memoria (inclusive em casos extremos). O palestrante tambem frisou que eh muito importante fazer profiling mesmo de bibliotecas largamente utilizadas - por exemplo, o twitter enfrentou alguns problemas com Thrift e a biblioteca padrao de scala. Por ultimo, foram sugeridas algumas configuracoes que podem ser feitas em relacao ao GC.

Real Java Enterprise Testing - Aslak Knutsen e Dan Allen da Red Hat
Esta apresentacao foi um showcase para o projeto Arquillian (e demais projetos). Este framework parece muito promissor para testar o comportamento de uma aplicacao em diversos ambientes diferentes (WAS, JBossAS, Tomcat) de forma automatizada. O framework se integra com o JUnit, eh capaz de pegar arquivos gerados pelo maven e fazer o deploy de mais de um sistema e em mais de um servidor de aplicacoes.

Blazing JVM Performance: Trends Fueled by the Latest Hardware and JVM Optimizations - Shirish Aundhe da Intel e Dave Keenan da Oracle
Esta palestra expandiu um pouco o keynote da Intel de ontem, falando um pouco sobre a parceria entre a Intel e a Oracle, falando um pouco sobre como as novas instrucoes dos processadores influenciam o desenvolvimento da JVM e como a JVM se beneficia (ou nao) das novas instrucoes, como vetorizacao de loops internos e otimizacoes de operacoes de ponto flutuante. Eles tambem mostraram como pequenas otimizacoes na bibliotecas podem influenciar o uso do cache do processador. Por ultimo, o engenheiro da Oracle mostrou algumas flags "escondidas" da JVM que ligam otimizacoes ainda nao totalmente testadas - como por exemplo, -XX:+AgressiveOpts (ativa otimizacoes mais agressivas), -XX:+UseCompressedStrings (comprime Strings para array de bytes quando possivel), etc.

Squashing the Vulnerabilities: Engineering Security into Your Applications -
James Gould e Lin Jia da Verisign
Os palestrantes mostraram algumas das principais vulnerabilidades que sao introduzidas em um sistema de maneira nao intencional, bem como maneiras de configurar o Security Manager para isolar funcionalidades que precisam de permissoes especiais.

How Do You Update Your Java EE App in Production? - Jevgeni Kabanov CTO da Zero TurnAround
Era para ser um BOF, mas acabou mais sendo uma sessao de pesquisa sobre atualizacao de aplicacoes, com um pouco de propaganda do LiveRebel no final. O produto me pareceu bem interessante e tem potencial para acabar (ou pelo menos diminuir drasticamente) as dificuldades de se atualizar um sistema em producao.

Oracle Java SE: VM and Performance Technologies - Com o time de Performance do Hotspot e JRockit
Este foi bem um Q&A com o time responsavel pela performance do HotSpot e do JRockit. Foi uma sessao muito legal, explicando varias nuances do GC (que merecem um artigo proprio em algum momento) e como o JRockit Mission Control pode ajudar a detectar problemas de performance mesmo em sistemas em producao.

PS: eu nao sei o que esta acontecendo com a formatacao do blog, mas os artigos ficam sempre diferentes de como eu estou editando...
PS2: finalmente descobri o que o JHome tem a ver com a GlobalCode - mas vou apenas linkar para este artigo no blog deles.

terça-feira, 4 de outubro de 2011

JavaOne 2011 Day 2


Hoje foi o dia que realmente comecou o JavaOne 2011 - que comecou com um keynote em um auditorio lotado e com mais 2 auditorios de backup - onde os keynotes estavam sendo transmitidos simultaneamente para quem nao conseguiu espaco no auditorio principal. Um pouco antes de comecar, os teloes do auditorio mostravam os vencedores do Duke's Choice Awards desse ano (um premio dado a diversos projetos inovadores escolhidos pela comunidade), entre eles o projeto jHome que de alguma forma esta ligado a Globalcode (mas nao consegui nenhuma informacao extra).

O keynote eh iniciado por Adan Messinger (embora o anunciador tenha chamado Richard Bair, o que ficou bem estranho) falando um pouco sobre a plataforma e sobre java no cloud (mais sobre isso no final), para logo depois chamar um diretor da Intel para falar sobre o relacionamento entre a Sun/Oracle e a Intel - uma cooperacao que vem melhorando tanto o hardware quanto a JVM. Tambem foi anunciado o JavaOne blog. Por ultimo, foi anunciado um produto da Oracle que eu nao esperava: o Oracle NoSQL Database - um banco de dados NoSQL.
Logo depois, subiu ao palco Marc Reinhold - basicamente o chefe do JavaSE - falando sobre as features do java 7 e as features propostas do java 8 e java 9 e para anunciar que daria mais detalhes sobre essas versoes no keynote de estrategia de amnha. Sobe no palco, finalmente, Richard Bair para anunciar a disponibilidade da versao 2.0 do JavaFX (apenas para windows por enquanto) e a disponiblidade de uma versao beta do netbeans com suporte ao mesmo. Logo depois, foi a vez de Linda DeMichiel falar sobre JavaEE e as facilidades do JavaEE7 para o cloud, bem como pequenas melhorias na spec. Por ultimo, sobe ao palco Hinkmond Wong para falar sobre JavaME e metade do auditorio deixa a sala (para ser justo, o keynote jah estava 10 minutos alem do tempo previsto), mostrando que JavaME eh, provavelmente, irrelevante atualmente.

Com isso, iniciaram-se as technical sessions:

Arquillian the Extensible Enterprise Platform - Aslak Knutsen e Dan Allen da RedHat
Os palestrantes mostraram o Arquillian, uma plataforma de testes extensivel vencedora de um Duke's Choice Award que permite executar testes nos servidores de aplicacao (iniciando e fazendo deploy, se necessario). Achei a ideia muito interessante e algo que definitivamente olharei com mais cuidado - tambem irei assistir a demonstracao completa amanha). Integra as ferramentas normais de teste (JUnit e TestNG) e ainda pode ser integrado ao maven.

Coroutines for the JVM - Lukas Stadler da Johannes Kepler University, Linz, Austria
Coroutines (tambem conhecido como fibers em ruby ou generators em python) eh uma forma limitada de continuations. Resolvi ver como essa feature foi implementada em Java (que nao possui maneiras nao nativas de manipular o stack) e como essa features poderia ser aproveitada. O palestrante mostrou que conseguiu implementar uma versao praticamente sem limitacoes (inclusive com transporte de coroutines entre threads) e como, em geral, coroutines sao mais eficientes que threads. A feature, porem, esta em estado bem experimental e nem tem uma JSR ainda e deve entrar na JVM com sorte apenas na versao 9.

Project Lambda: To Multicore and Beyond - Alex Buckley e Daniel Smith da Oracle
Uma feature que deve vir na JDK8, lambdas sao uma forma mais simples do que closures - ou melhor, algo muito parecido. Para quem segue a lista de desenvolvimento de lambda, ha poucas novidades - mas uma delas meio bombastica: JDK8 trara (muito provavelmente) o que eles chamaram de virtual extension methods - essencialmente trazendo as traits de scala para java - como uma feature da JVM (e nao apenas do compiler, como eh o caso de scala). Nao sei quanto as pessoas se importam com isso, mas basicamente teremos uma forma limitada de heranca publica em java. Com essa feature, teremos adicao de varios metodos nas interfaces basicas de collections, permitindo manipulacao e iteracao das collections de forma paralela (usando o framework Fork-Join jah presente no JDK7).

Why Doesn't Java Have Instant Turnaround? - Jevgeni Kabanov da Zero TurnAround
Quase uma propaganda do produto principal da empresa (o JRebel), mas uma boa palestra de qualquer maneira (alias que ainda nao peguei nenhuma palestra de baixa qualidade). JRebel promete que quase nunca sera necessario fazer o ciclo de build / redeploy cada vez que voce mudar algo na aplicacao. Na MAPS, temos usado com sucesso o Jetty rodando de dentro do Eclipse no projeto, com praticamente o mesmo efeito. No fim, o palestrante mencionou um novo produto da empresa, dessa vez para diminuir o tempo de deployment de aplicacoes em producao - o que me deixou bem interessado.

JVM Bytecode for Dummies - Charles Oliver Nutter da EngineYard
Uma palestra bem tecnica de como gerar bytecode e como ele eh interpretado na JVM. Charles inclusive escreveu uma DSL (em ruby) para geracao de bytecode e mostrou uma biblioteca java parecida. Fora isso, os exemplos foram dados usando ASM.

Exibition Hall
Muitos dos expositores eram de empresas como a EngineYard: prestam servicos provendo plataforma de deployment e/ou facilitando deployment em ambientes de cloud. Claramente, o mundo java corporativo esta se movendo na direcao da nuvem - onde apropriado, claro.

Amanha teremos mais um dia recheado de boas palestras.

domingo, 2 de outubro de 2011

JavaOne 2011 Day 1

Este eh o primeiro de uma serie de reports sobre o que aconteceu no JavaOne 2011 (da minha perspectiva claro)


Hoje o dia foi dedicado a inscricao e recolhimento de material. Para o JavaOne, soh teve atividades para quem assinou o Java University - uma serie de cursos sobre Java. Eu achei muito basicos os cursos entao acabei nao assinando.
Mas como congressista do JavaOne tem acesso ao Oracle Open World, resolvi assistir algumas palestras (mas consegui entrar em apenas 3) e tentar conversar com alguns JUG leaders.

Key to Successful Implementations: Communication and Mandatory Education

Palestra ministrada por um consultor de Rotterdan envolvido em implantacao de varios sistemas de ERP na cidade, Gerard Stan prega que qualquer organizacao deve manter um programa obrigatorio de educacao dos seus funcionarios (com o slogan No Education, No Access) e mostrou uma ferramenta para ajudar no gerenciamento de cursos e treinamento (mas acho que soh esta disponivel para quem eh cliente do Oracle E-Business Solution). Achei a ideia da palestra bem interessante, mas nada que ja nao estamos fazemos na MAPS.

Highly Available Oracle Database: The Unknown Details

Ministrada por uma Database Architect da universidade de Utah, esta palestra mostrou varias praticas e ferramentas para se manter Alta Disponibilidade em um servidor de Banco de Dados. Esta palestra foi bem estranha - parecia muito com uma propaganda das funcionalidades de HA existentes no Oracle 11g/i. Mas algumas parecem interessantes (como o flashback, restore points manual ou automaticamente gerados) e algumas tecnicas tambem (como por exemplo, apenas ligar o SafeGuard e o FlashBack no servidor de backup para nao comprometer o servidor de producao).

Managing Your Oracle Applications in Today's Economy: Ask the Experts

Mais um painel de discussao do que uma palestra propriamente dita, esta palestra (liderada por um funcionario da IBM) falou muito sobre gerenciamento de dados e governanca de informacoes dos aplicativos da Oracle - mas acho que o conceito se aplica a qualquer software de grande porte que gera muitos dados. (por exemplo, o Pegasus). Os demais participantes do painel eram parceiros Oracle ou IBM que adotaram ou participaram da adocao das praticas de gerenciamento de informacoes discutidas. Sao elas:
-clonar ou nao banco de dados de producao para desenvolvimento / testes de atualizacao: a discussao girou em torno da criacao de um banco 'dummy' com dados parecidos com a producao mas de menor tamanho ou ainda mascaramento dos dados sensiveis. Um dos palestrantes comentou que a TravelPort conseguiu economizar quase 40% dos custos de storage do banco de dados (que usava a infra-estrutura da Oracle on-demand) usando bancos de dados dummy para desenvolvimento e testes ao inves de clones da producao.
-arquivamento de dados "mortos": softwares e processos para arquivamento de dados para mitigar os prejuizos causados pelo crescimento excessivo de dados. Os palestrantes sugeriram a criacao de um grupo para gerenciamento de tais dados arquivados e mostrou algumas ferramentas da IBM para ajudar. Este painel foi mais voltado para os clientes das aplicacoes de grande porte e menos para desenvolvedores (tanto eh que fui perguntado o que eu fazia ali).

Agora esta tendo o keynote do Larry Ellion mas precisei voltar ao hotel e me preparar para amanha, quando as palestras tecnicas do JavaOne comecam.

sábado, 18 de junho de 2011

Algumas ferramentas da JDK

Algumas pessoas veem me perguntar às vezes quais ferramentas usar para diagnosticar uma aplicação que não está se comportando como deveria. Na maioria das vezes é possível diagnosticar uma aplicação em execução apenas com as ferramentas que vem junto com a JDK mas que muitas pessoas desconhecem mas que (na minha opinião) todos deveríamos conhecer. A maioria das ferramentas abaixo está presente tanto na JDK5 quanto na JDK6 e a maioria delas precisa ser executada com o mesmo usuário que executa o processo. Por último, os comandos abaixo são da versão solaris da JDK e podem ter alguma diferença se executadas em outros sistemas operacionais.

JPS
Parecida com o ps dos UNIX'es, mas lista apenas os processos java em execução, mostrando o pid (o process id) e o nome da classe main que iniciou o processo. Com a opção '-v', mostra toda a linha de comando usada para iniciar o processo e com a opção '-l' mostra o nome completo da classe main.

JSTACK
Uma vez identificado o pid da aplicação, precisamo ver o que acontece com ela. O comando jstack mostra na tela um stacktrace de todas as threads da aplicação e verifica se há algum deadlock entre as threads. Além disso, é possível identificar se alguma thread está parada em algum ponto ou esperando por I/O.

JINFO
jinfo mostra todas as sytem properties e todas as flags da jvm.

JMAP
jmap mostra todas as bibliotecas ligadas à sua aplicação, bem como o offset de memória em que estão mapeadas. Esta informação não é tão útil a menos que estejamos tentando identificar a causa de um crash da jvm. Normalmente usaremos jmap -heap para ver o estado da memória separado por região incluindo o permgen. Caso um problema de memória seja identificado, é possível gerar um histograma com os contadores de todos as instâncias dos objetos vivos com a flag -histo ou ainda gerar o heap dump com a flag -dump:.

JCONSOLE
Se tudo mais falhar, é possível tentar usar uma ferramenta gráfica chamada jconsole que se conecta à um processo java e consegue ver todas as informações anteriores e ainda inspecionar objetos expostos via JMX.

Como pudemos ver, é possível obter várias informações sobre uma aplicação em execução (e possivelmente diagnosticar problemas) apenas usando as ferramentas que vem junto com a JDK.