Quais sao as vantagens de se usar a Linguagem de Programacao Java e quais sao as suas desvantagens tambem. Vamos comecar citando os contras, logo depois citaremos os pros! Desvantagens: A pre-compilacao exige tempo, o que faz com que programas Java demorem um tempo significativamente maior para comecarem a funcionar. Isso nao e um grande problema para programas que rodam em servidores. No entanto isso pode ser bastante indesejavel para computadores pessoais. O padrao Java tem uma especificacao rigida de como devem funcionar os tipos numericos. Essa especificacao nao condiz com a implementacao de pontos flutuantes na maioria dos processadores o que faz com que o Java seja significativamente mais lento para aplicacoes que utilizem bastante processamento numerico quando comparado a outras linguagens. Os bytecodes produzidos pelos compiladores Java podem ser usados num processo de engenharia reversa para a recuperacao do programa-fonte original. Esta e uma caracteristica que atinge em menor grau todas as linguagens compiladas. Lembrando que as desvantagens de Java em relacao a performance nao significam que suas aplicacoes sejam lentas ao ponto de nao serem viaveis para utilizacao em desktops. Java hoje ja possui um desempenho proximo do C++. A grande diferenca na performance das aplicacoes escritas em Java em relacao as outras linguagens pre-compiladas se da no Start da aplicacao, quando ocorre a geracao dos bytecodes. Entretanto Java nao suporta heranca multipla de implementacao e nem aritmetica de ponteiros, que sao aceitos em C++, isso tem um pequeno e importante impacto na produtividade do programador. Vantagens: A tecnologia Java e Free, o custo quase totalmente zero, como ja foi explicado anteriormente, os editores e ambientes de producao tambem sao gratuitos (NetBeans, Eclipse, Jcreator, entre outros.) e ainda tem a gratuidade dos Servidores de Aplicacao (TomCat, Jboss, Jetty e outros.). A Linguagem e Orientada a Objetos (OO), segue o paradigma OO, o que a torna uma ferramenta extremamente poderosa. E e tambem Multi-Threaded, o que significa dizer que ela suporta processamento paralelo multiplo. Possui portabilidade, onde o mesmo codigo Java roda em diversas plataformas sem a necessidade de alteracao de codigo e as aplicacoes podem ser facilmente migradas entre servidores. Tornado desnecessario ficar preso a somente um fabricante. Java e padronizada e mantida pela JCP (Java Community Process). A JCP e mantida por diversas empresas: Sun, Oracle, IBM, Novell, Xerox. Pelo fato de Java ser OO, e possivel fazer reuso de codigo ja produzido. E o suporte dado a Tecnologia Java e satisfatorio, pois a comunidade Java, hoje, e a mais extensa. Existem inumeros JUGs (Java User Groups), que promovem eventos, disponibilizam material, artigos, revistas especializadas e forum de discussooes. E ainda e possivel gracas a otimizacoes como a compilacao especulativa, que aproveita o tempo ocioso do processador para pre-compilar bytecode para codigo nativo. Outros mecanismos ainda mais elaborados como o HotSpot da Sun, que guarda informacoes disponiveis somente em tempo de execucao para otimizar o funcionamento da JVM, isso possibilita que a JVM va aprendendo e melhorando seu desempenho. Isto e uma realidade tao presente que hoje e facil encontrar programas corporativos e de missao critica usando tecnologia