Java é compilado?

10 respostas
A

Olá

O java é compilado? Código fechado

Depois que eu instalar no cliente qualquer pessoa tem acesso meu código?

Exemplo:

VB - ele compila em arquivo executável e depois disso nem eu mesmo tenho acesso ao código dele (estando instalado no cliente)
só na minha máquina com o código fonte.

Acho que o Delphi é assim também.

10 Respostas

B

Java é compilado (byte codes) e interpretado pela Máquina Virtual Java.

Quando ao fato de alguem possuir acesso ao código, os jar’s que são gerados, a grosso modo nada mais são que um ZIP, e você pode descompatar o jar utilizando quanquer software ZIP, basta renomear o arquivo para zip ou indicar o software que irá abrilo. Assim a pessoa irá ter acesso aos .class e poderá fazer uso de uma ferramenta que faça engenharia reversa e a partir dai ter acesso ao código. Porém vale lembrar que também existem softwares que fazem engenharia reversa de .exe.

A

Porque estava conversando com outro programador e ele me disse que o Java para é bom mesmo pra internet mais pra Desktop não é tão por esse motivo… e outro que ele falou.

O que me diz… por favor seje realista… porque eu desenvolvo em vb.net e estou aprendendo java pra não ficar limitado a uma plataforma

valeu

J

Na realidade isso não tem impacto com Java ser bom ou não para aplicações desktop.

A realidade do Java é a seguinte:

Ele é compilado, porém, não é compilado para código nativo, como acontece com C, C++, Pascal (Delphi), etc… o resultado da compilação é um código intermediario, chamado de bytecode, assim como acontece com .NET, que é compilado para o MSIL (Microsoft Intermediate Language). O bytecode posteriormente é interpretado pela JVM (o MSIL é interpretado pelo JIT do .NET framework). Esses codigos intermediarios (bytecode e MSIL) são códigos binarios, porém muito simples de se realizar uma engenharia reversa, para Java há varias ferramentas que conseguem otimos resultados. Porém, assim como existem ferramentas para descompilar o codigo Java, existem ferramentas, chamadas ofuscadores, capazes de proteger o codigo contra essa engenharia reversa. Tambem é possivel engenharia reversa em .exe, mas é muito mais complexa e os resultados nem sempre são bons.

Então, se isso é um ponto chave no seu projeto, você deveria avaliar um ofuscador, procure alguns e faça o teste. Mas não deixe de avaliar Java em seus projetos por causa disso, pois não é um problema como seu amigo disse, provavelmente ele não conhece bem a plataforma.

Tambem é possivel compilar o Java para codigo nativo atraves de alguns compiladores especiais, mas não é recomendavel pois você perder a portabilidade e as vantagens da JVM.

A

Então vc aconselha o desenvolvimento de aplicações desktop em java?

E quanto ao desempenho da aplicação? vc sabe alguma a respeito comparando as outras linguagens?

Porque tenho um cliente que já roda um sistema em vb.net… mais ele vai construir a nova loja e esta pensando em colocar linux pelo custo. Ai vou ter que migrar o sistema para java porque vb.net não vai rodar.

A minha maior preocupação é que se ele quiser mesmo colocar linux vou ter pouco mais de 1 ano pra aprender e desenvolver o sistema em java.

B

Uma opinião pessoal baseada em testes que já realizei utilizando o Windows. Eu desenvolvi à algum tempo atraz uma aplicação simples para gerar relatórios (Desktop utilizando Java), em máquinas mais antigas que possuiam pouca memória (cerca de 256 mb) o software ficou muito lento, porém em máquinas mais novas com mais de 512 teve um bom desempenho.

Tem menos desempenho que uma aplicação compilada para código nativo, porém uma mesma aplicação pode rodar em LINUX ou WINDOWS sem fazer nehuma alteração na mesma.

Acredito que você deve availar a estrutura disponível no seu cliente e fazer alguns testes, e se for o caso conselhá-lo a adquirir máquinas com maior processamente e memoria…

A

Sistema em Desktop em Java é mais lento?

H

Não acho que seja mais lento não, até a versão 4 do java le apresentava um desempenho não muito bom, mas a partir da versão 5 a máquina virtual ficou muito robusta e pessoalmente eu não acho que ele seja mais lento.
O fato de ser multiplataforma e de rodar sob a virtual machine, teoricamente é um processo mais lento. Mas com as máquinas de hoje é imperceptível.

F

Isso tem relação de como se programa em swing (falando de swing certo? pois tem o swt tb).
Entenda como funciona o swing, a tal da ‘event dispatcher thread’.
Use SwingWorker, SwintUtilities.invokeLater, para melhor a resposta da interface com o usuário,
não deixar a tela com aquele efeito de congelado, etc. Enfim, existe uma séria de boas
práticas no desenvolvimento swing! :wink:

E não, programando bem a aplicação não fica lenta.

H

Entrando um pouco neste assunto, e se a aplicação tiver necessidade de acesso a portas como: USB, SERIAL e ETHERNET vocês usariam JAVA ou outra linguagem?

P

hdlondrina,

se o problema for performace vc pode compilar o sistema para codigo nativo para a aplicação ficar mais rapida. Pesquise sobre JNI. Apartir do java 1.5 ele trabalha com hotspot, que compila partes criticas do aplicativo para codigo nativo para aumentar a performance, tudo em tempo de execução usando o compilador JIT do prório JAVA.

falows…

Criado 14 de maio de 2008
Ultima resposta 24 de out. de 2008
Respostas 10
Participantes 7