• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Dabubble

A velocidade de Java - Mitos e verdades - .NET beware

14 mensagens neste tópico

Pois e pessoal, apesar de ja ser antigo o facto de que Java tem melhorado bastante a nivel de peformance (quando digo Java digo o proprio motor de compilacao, execucao e gestao de memoria (garbage collection) e nao frameworks comerciais feitas em Java, mas so agora encontrei um artigo suficientemente explicito.

Vejam a tabela de comparaçao entre Java e outras linguagens que inclui as 3 linguagens do .NET (J#,C# e VB) neste site:

http://osnews.com/story.php?news_id=5602&page=3

E a sun preve bastantes melhorias para a versao 1.5....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A SUN tem investido bastante na optimização da JVM, código intermédio e interfaces com os sistemas operativos, exactamente para combater estas criticas de velocidades.

Bom Artigo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas eu estou a desenvolver um raytracer estilo doom em java, usando apenas as classes mais basicas, nao o interface 3d, com a intencao de o portar para outras linguagens e tou espantado com a velocidade do java!

penso logo que possivel fazer o port para C++ (como o codigo está feito será bastante facil) para uma comparacao final

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Força ai!!

Vais postando novidades e se kiseres disponibiliza o código. Já agora estou curioso como estas a fazer código java que seja portável para c++. Tens de abdicar de uma das coisas mais porreiras de C++ a hereditariedade multipla.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ah pois eh... mas para obter uma grande performance e um footprint reduzido ah q cortar em tudo o q se pode cortar, ate no java...

eh provavel que a linguagem final n seja o c++ mas apenas c (eh bastante mais confortavel para mim, visto que ainda sou das alturas em q nos ficavamos pelo DOS)

ainda vou investigar a possibilidade de colocar o codigo fonte algures online, mas soh quando tiver o jogo mais concluido, por enquanto tv poste um screenshots :)

joao

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas tardes,

Quero atirar aqui umas achas para a fogueira para se discutir realmente a diferença de velocidade entre Java e outras linguagens que são compiladas nativamente, como por exemplo ****(C#, VB, etc).NET.  :biggrin:

Primeiro existe uma grande diferença entre Java e as outras linguagens que ninguém referiu, que é o facto de Java correr sobre uma JVM (Java Virtual Machine), e portanto o código não estar já compilado para instruções específicas da máquina onde está a correr.  :eek:  Quê ?!?!?!? Bom, passo a explicar. Compilar um programa java dá origem a um ficheiro de java bytecodes que depois são interpretados pelo JVM e só aí é que são executadas as instruções sobre a máquina. Em máquinas Intel/AMD, o conhecido Assembler é a linguágem que está mais perto dos componentes da máquina. Os bytecodes de que falo, ainda são interpretados e só depois é que são executadas as instruções Assembler sobre a máquina. Portanto a velocidade do Java também tem a haver com a JVM onde está a correr e sim, existem outros JVM sem ser os da Sun.

Um pequeno à parte : Existe um rumor de um dia haver um processador que execute directamente java bytecodes, mas ainda continua a ser um rumor.

Agora se compilarmos um programa .NET, temos um ficheiro executável que já é um ficheiro de instruções da máquina onde irá correr. Ou seja, estas instruções não são interpretadas por nenhum outro programa, mas sim executadas logo sobre a máquina.

Como podem ver, existe aqui um pequeno bocado de software entre o nosso programa java e a máquina em si. Logo ai, perdemos performance na velocidade. É claro que com novas VM's a serem lançadas essa perda de performance vai diminuindo, mas dificilmente poderá chegar a uma velocidade comparável com código compilado nativamente para uma máquina. É neste último ponto que o java ganha vantagem.

Visto que o java dá origem a uma serie de bytecodes java, que são iguais em QUALQUER sistema que suporte java, esse mesmo programa pode, com 95% certeza, correr logo em qualquer ambiente (UNIX, Windows, Linux, MaxOS, etc) sem ter de ser recompilado. Os outros 5% podem ter de ser afinados para poder correr melhor nos outros sistemas. No entanto, para um programa C/C++, o programa terá de ser compilado em cada um dos ambientes, e provavelmente até alterado de modo a funcionar nos diferentes ambientes.

.NET também tem ainda outra desvantagem em relação ao Java. Pode-se fazer aplicações inteiras de graça, e pôr a correr em sistemas grátis (usando Eclipse, JBoss, Apache Tomcat, etc) em qualquer ambiente, e para aplicações .NET, precisas do .NET Studio, que até agora, ainda é pago e só funciona em Windows.

Voltando à questão principal, a evolução dos interpretadores de Java tem trazido os java bytecodes cada vez mais perto da máquina onde estão a correr, e isto trará nova vida à velocidade das aplicações Java. Só o tempo o dirá, e quem sabe não passaram a existir processadores mistos que interpretem código Java e também instruções nativas da máquina.

-Destineo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

  O C# gera um exe mas em managed code, que não é assembly, e tens de ter a .NET framework para que este corra. O procedimento é em tudo análogo ao Java, só tens a .NET framework em vez da JVM "por baixo". Ou seja, a comparação entre estas duas linguagens é perfeitamente justa ao nível da performance uma vez que nenhuma delas gera código máquina, mas códigos intermédios que são depois interpretados.

  Além disso a plataforma .NET é livre... tens diversos programas (vide SharpDevelop) que são IDEs que te permitem programar em C#, inclusive tem um modo gráfico para editar as forms e que são livres. No extremo, tendo a framework .NET instalada podes mesmo compilar pela linha de comandos usando o comando csc.

  Para linux existe uma framework que é a mono que corre esses exe em managed code mas em linux... e que também tem uma IDE gráfica própria e podes mesmo programar e compilar em linux... e correr em linux ou em windows...

  Quanto à performance.. os números falam por si.

  Não sou grande apreciador da tecnologia microsoft, mas trabalho com o Visual Studio (este sim pago) e em C++ e C# e esta ferramenta (assim como a linguagem C#) é tão boa que nem parece feita pela Microsoft.

  P.S. - O C# também pode gerar código máquina, normalmente referido como unsafe code (pq será???) e utilizar ponteiros e tudo o que usas em C++. Assim tem o melhor dos dois lados

  Reis

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas Reis,

Como já estou no mundo Java há algum tempo, tenho mais conhecimentos nesse sentido. Obrigado pelo esclarecimento sobre .NET, pois tanto eu como outros a ler ficaram a saber mais algo.

Vendo as coisas assim, realmente fico bastante mais feliz por saber que o java está a conseguir ganhar pontos desta forma.

- Destineo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

So para que fique bem claro todo o codigo produzido em managed C++, ou em C#,J# VB (todos .NET) corre sobre uma VM (a .NET framework). Ou seja o codigo e interpretado mas nao compilado (pelo menos nao como vai correr na maquina). Isto tudo tal e qual como Java.

So para concluir nao confundir managed code com codigo que corre sobre uma VM podes ter managed code sem VM. (existem libs para isso) A VM faz muito mais do que garbage collection (a definicao de managed code e que e codigo que corre com um garbage collector que trata de gerir a memoria). Uma VM tem muito mais features (ClassLoading, Security etc...)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

"Managed code is code executed by a .NET virtual machine", isto é, não podes ter managed code sem uma VM (doutra forma não seria managed)

Podes ver nestes links a definição de managed code...

Criadores do manged code: http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/directx9_m_dec_2004/directx/whatismanagedcode.asp

Uma referência que temos como mais ou menos certa:

http://en.wikipedia.org/wiki/Managed_code

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso e a definicao da microsoft,ate e curioso que nem se refiram a outras plataformas, uma vez que a primeira vm que surgiu (pelo menos mass-market) foi a de java. Mesmo assim a definicao de managed code vem do facto de esse codigo correr com acesso ou sobre um gestor de memoria (o manager) que trata da utilizar da forma mais eficiente isto e o codigo e gerido se tu tiveres um programa que tenha uma lib de garbage collection e a uses sobre todo o programa ele e managed, a definicao de vm vem de runtime environment (http://computing-dictionary.thefreedictionary.com/managed+code) e isto foi a evolucao do conceito agora tu podes ter um programa que inclui ele proprio o seu runtime environment usando para isso libs que providenciam essas facilidades.

Normalmente os runtime environments fazem mais do que so gerir a garbage collection eles asseguram que um programa que esteja a correr dentro deles nao possa aceder a endereços de memoria fora deles providenciando assim algum tipo de segurança tambem.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já agora, o Java permite, há bastante tempo já, compilação nativa, que é algo usado pela máquina virtual servidor. Para os que não sabem, existem dois tipo de jvm, uma cliente e uma servidor, a cliente a mais utilizada, é a que vem com o jre ou jdk normal, a servidor é usada por aplicações "enterprise" e a diferença entre o desempenho das duas maquinas é enorme.

Em relação ao .net, nas palavras de um dos representantes em Portugal da microsoft, "... sim o .net, por todas as suas caracteristicas, é mais lento que o Java da Sun...". Uma das caracteristicas que torna o .net mais lento é a de segurança, o código que corre em .net passa obrigatóriamente por mecanismos que, teóricamente, impendem danos na máquina onde está a ser executado, isto é, em teoria é mais dificil fazer virus em .net. Seja como for, os programadores continuam com a ideia de que java e .net são mais lentos que C/C++, e normalmente um simples programa em c/c++ é mais rápido mas isso é culpa do programador e não da linguagem/plataforma. Mesmo depois de tantos destes debates vejo programandores a fazerem autênticas asneiras em Java, usarem mal a programação OO.

Enfim, é mais um dos vários debates que nunca terão fim, já agora se querem uma linguagem rápida usem fortran, é muito mais rápida que qualquer C/C++!

Peace.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora