Desempenho Java x C

Fiquei com vontade e tmb fiz o teste!

Codigo JAVA

public class Teste{ private static final int SIZE = 1000000; public static void main(String args[]){ int array[] = new int[SIZE]; for (int i = 0; i < SIZE; i++){ array[i] = i % 100; } quicksort(0, SIZE - 1, array); } public static void quicksort(int p, int q, int array[]){ if (p < q){ int j = p - 1; int aux = array[q]; for (int i = p; i <= q; i++){ if (array[i] <= aux){ int taux = array[i]; array[i] = array[++j]; array[j] = taux; } } quicksort(p, j - 1, array); quicksort(j + 1, q, array); } } }
Codigo C

#define SIZE 1000000 void quicksort(int p, int q, int array[]); int main(){ int array[SIZE], i; for (i = 0; i < SIZE; i++){ array[i] = i % 100; } quicksort(0, SIZE - 1, array); } void quicksort(int p, int q, int array[]){ int j, aux, i, taux; if (p < q){ j = p - 1; aux = array[q]; for (i = p; i <= q; i++){ if (array[i] <= aux){ taux = array[i]; array[i] = array[++j]; array[j] = taux; } } quicksort(p, j - 1, array); quicksort(j + 1, q, array); } }

Info do sistema:

[quote][22:08][sparch@blue:teste]$ uname -a
SunOS blue 5.10 s10_72 i86pc i386 i86pc

CPU: Athlon XP 2800+
RAM: 768Mb[/quote]

[quote][22:12][sparch@blue:teste]$ java -version
java version “1.5.0_01”
Java™ 2 Runtime Environment, Standard Edition (build 1.5.0_01-b05)
Java HotSpot™ Client VM (build 1.5.0_01-b05, mixed mode, sharing)[/quote]

[quote][22:14][sparch@blue:teste]$ gcc -v
Reading specs from /usr/local/lib/gcc-lib/i386-pc-solaris2.10/3.3.2/specs
Configured with: …/configure --with-as=/usr/ccs/bin/as --with-ld=/usr/ccs/bin/ld --disable-nls
Thread model: posix
gcc version 3.3.2[/quote]

Resultados
Java: sem -server obs: os paremetros sao somente para utilizacao da memoria porque estava dando StackOverflow…

[code][22:15][sparch@blue:teste]$ time java -Xms16m -Xmx384m -Xss2m Teste

real 0m48.410s
user 0m45.526s
sys 0m0.088s
[/code]
Java: com -server

[code][22:16][sparch@blue:teste]$ time java -Xms16m -Xmx384m -Xss2m -server Teste

real 0m26.478s
user 0m24.054s
sys 0m0.092s[/code]
C: sem flags de otimizacao

[code][22:18][sparch@blue:teste]$ time ./teste

real 1m32.869s
user 1m28.087s
sys 0m0.038s[/code]
C: com flags de otimizacao (-O3)

[code][22:22][sparch@blue:teste]$ time ./teste

real 0m10.819s
user 0m10.223s
sys 0m0.016s[/code]

E agora Joseh?

[quote=“sparch”]Ae jah perdeu a graça essa discussão aqui…
Levar as parada pro lado pessoal não da certo…
Tava legal ler o topic até o Tanob entrar no meio… ae ferrou tudo…

Mas firmeza…[/quote]

Eh, ferrou pq ateh eu postar ngn apresentava prova/explicacao alguma a favor do C, apenas um bando falando, falando e falando coisas :slight_smile:

Com relacao ao seu teste, eu jah havia me referido a ele, analise o codigo em Java e em C, pensa em como ambos funcionam (dica: recursao) e acho que chegas numa conclusao. Se precisar de ajuda eh soh falar. :grin:

[quote=“rsmendes”]
Pq tu não manda os resultados obtidos pelo time ou usr/bin/time? Como tu testou os resultados?

Sou programador java, gosto de java, mas daí a java ser uma paixão que defendo mesmo que não haja provas vai uma longa distância.
O único jeito de java ser mais rápido que C ou C++ é por algum recurso de chache ou outro tipo de otimização da JVM. Isto implica de certa forma em uma alteração no algoritmo.

Com relação a java ser orientado a objeto… com certeza não é totalmente. Se o tanob tem que rever conceitor outros tem que aprender estes conceitos, pois os livros de orientação a objeto não fazem referencias a Java, mas sim a Smalltalk como exemplo de linguagem totalmente orienteda a objetos. Java não implementa herança múltipla de classes, nem tampouco sobrecarga de operadores. Se C++ que implementa tudo isto não é considerado totalmente orientado a objetos porque sempre comessa por uma função (main) então java com tipo primitivo tb não pode ser considerado totalmente orientado a objetos.

Falando de problemas de compilação pq não manda a sua linha de comando? É assim, trocando conhecimentos que melhoramos, não com gritos (A não ser que tenha estragado seu CAPSLOCK, ai desculpe).

Programação concorrente realmente java é muito bom, principalmente para o corporativo, mas nos supercomputadores não se usa Java, usa?

T+

Rafael[/quote]

ola realmente me expressei mal com o tanob, peços desculpas …
mas é eu mesmo q tenho q aprender OO como vc ensinuou!
bom Java é completamente orientado a objeto Sim! nao estou dizendo q outra linguagem nao seja, se no livros q vc leu nao esta java, me desculpe mas vc não pode ter lido todos, ou leu? sobre os testes a galera ja postou ai vc não viu?? nao posso fazer nada c não acredita. bom não sou fanatico em java, mas nesse teste específico foi mais rapido, da uma olhada no q eu disse no começo desta pagina sobre as camadas de linguagem de baixo nivel em diante o C esta em vantagem pois esta em nivel mais baixo onde java teria q passar por esses niveis primeiro. como se alguem apostase uma corrida e dissese pr o outro corredor vai na frente depois eu vou. mas java evolui muito desde suas primeiras versoes, e c nem tanto quase nada, ele é rapido, um dia essa rapides vai ter q melhorar. bom sobre o q java nao tem como herança multipla é por isso q ele usa interfaces para q possa suprir muitas das vantagens de HM sem os seus devidos problemas q se associan-se . ta ficando muito grande este texto só pr terminar é estranho um java baby entra aqui so por causa dessa discursao, ou será q é amigo do tanob ou criou outro usuario hehe, bom chega desse assunto.

É uma opinião minha… mas eu acho que o texto q tem embaixo do avatar do cara não quer dizer se ele sabe ou nao… é mais para descontrair =)

Firmeza :grin:

É uma opinião minha… mas eu acho que o texto q tem embaixo do avatar do cara não quer dizer se ele sabe ou nao… é mais para descontrair =)

Firmeza :grin:[/quote]

haha, nao sou eu duas vezes nao, nao teria porque, e eu tb nem escolhi essa frase, e nem sei onde muda, nao fucei na configuracao :slight_smile:

Eu jah havia te feito uma pergunta sobre isso antes e nao respondeste, como faco pra saber se um java.lang.Long eh maior/igual/menor que outro?
Posso fazer alguma operacao entre estes objetos?

Se refletires um pouco nas respostas das perguntas que fiz, vais ver que Java nao eh 100% OO, veja por curiosidade Python, nao posso falar mto desta linguagem pq sou fan dela :smiley:

E so pra finalizar, quero deixar claro que nao entrei aqui soh pra defender a linguagem C, jah era cadastrado aqui e trabalho com Java atualmente.

Falow!

Olá Pessoal, iai tanob e rafael… hehe.

Errado. O fato de conseguir manipular dados de um tipo int alocando-o em um objeto Integer não faz disso uma linguagem 100% OO. Ela apenas permite a programação orientada, o que é bem diferente. A linguagem 100% OO não pode fazer distinção entre um tipo primitivo e um objeto. Entenda isso como: “o ‘int’ deveria ser um objeto”, criar uma classe para manipulação é apenas uma “gambiarra”.

Isso desvaloriza o java? Não, assim como ele C++ também não é 100% OO. O fato de permitirem trabalhar com tipos primitivos as torna linguagens OO hibridas, enquanto a OO pura fica com smalltalk e cia.

Na minha opinião isso se torna uma vantagem já que se um sistema fosse realmente feito utilizando todas as normas de orientação a objetos seria muito mais complexo projeta-lo do que desenvolve-lo. Isso levando em conta que o programador tenha total domínio sobre OO Puro, senão pode adicionar mais dias, talvez meses para aprender o paradigma de forma correta e como aplica-lo na linguagem escolhida. Não preciso citar nada sobre desempenho né?

Errado também. Por acaso você desenvolve sistemas em Java SEM UTILIZAR OBJETOS? Me desculpe, mas uma comparação primitive-to-primitive pra mim é inútil.

O resultado desse benchmark é óbvio, vai depender mais da implementação da maquina virtual e/ou flags do compilador do que realmente a tão comparada “velocidade” entre as linguagens.

Se quiser fazer uma comparação correta, construa um codigo OO no Java e compare com o do C (note que voce mesmo esta falando de C e não de C++, portanto o uso de primitivos se mantém).

Aqui é que irão aparecer as diferenças.

Muitos vão dizer: “qualé cara, ai é injusto comparar desse jeito”, então devo lembrar que C é quase uma linguagem universal para comparação. Toda e qualquer linguagem será sempre comparada a ela.

E se fosse Java vs C++? Bem… dependeria muito da aplicação, não teriamos um real vencedor. Discutir isso é como debater sobre futebol, religião, mulher, ati vs nvidia, intel vs amd e por ai vai, resumindo é questão de gosto.

Querendo ou não Java é infinitamente mais organizado que um C++ e isso tras consequencias vantajosas no aspecto tecnico - facilita manutenção, fica um codigo mais legivel etc- por outro lado, com certeza tera uma perda consideravel de performance quando comparado a uma linguagem que pode “descer” o nível muito além de uma VM.

Um exemplo claro são as interfaces, para montar telinhas mais complexas o programa de vocês no java carrega uma verdadeira pilha de objetos, containers e tal. Não tem como não ficar “levemente” mais lento. Antes do Swing dar uma melhorada, pessoal tentava otimizar AWT na unha mesmo.

Tinha mais uns lance pra falar, mas agora bateu sono, cansei de digitar. heioawehiowahioe. flw ae.

É uma opinião minha… mas eu acho que o texto q tem embaixo do avatar do cara não quer dizer se ele sabe ou nao… é mais para descontrair =)

Firmeza :grin:[/quote]

o sparch blz, quando disse essa frasse não estou dizendo q a frase embaixo é relacionado ao conhecimento do cara, eu sei q isso não tem nada a ver! eu só quis dizer q é estranho um pessoa q acabou de entrar no portal venha direto pr esse topico, pq “geralmente” elas gostumam tirar duvidas em outros topicos. eu só achei estranho! falou

Oi gente, desculpa o que eu vou dizer, mas é o seguinte: acho que este tópico já deu o que tinha que dar.
Digo isso porque acompanhei esta discussão, embora não tenha postado nenhum tópico nela.
O que entendi a princípio foi que quando o Felipe abriu este tópico, ele quis mostrar que o Java tá evoluindo cada vez mais, o que é muito bom.
A idéia, acredito eu, era usar o C como um referencial para mostrar como o velho tabu que Java é uma linguagem lenta já está ficando pra trás. E não fazer comparações de qual é melhor, ou mais veloz.
Deveríamos ficar felizes por isso e não começar mais uma vez essa velha baboseira de que Java é melhor que C, e vice-versa. Até porque isso nunca levou (e nem levará) ninguém a lugar algum.
Não programo em C, nem tenho nada contra a linguagem, até acho que se não tivesse me afeiçoado ao Java, com certeza, C seria a minha opção.
São linguagens diferentes, paradigmas diferentes, métodos diferentes e formas diferentes de se programar.
Francamente, é besteira continuar falando nisso. As palavras acabam sendo mal interpretadas, e isso pode gerar conflito nas relações entre nós, membros do portal.

Gostei de saber que o Java tá melhorando e é isso que esse tópico deveria visar…

Abraços a todos…
… e, por favor, não interpretem mal minhas palavras.
:wink:

[quote=“thai”]Oi gente, desculpa o que eu vou dizer, mas é o seguinte: acho que este tópico já deu o que tinha que dar.
Digo isso porque acompanhei esta discussão, embora não tenha postado nenhum tópico nela.
O que entendi a princípio foi que quando o Felipe abriu este tópico, ele quis mostrar que o Java tá evoluindo cada vez mais, o que é muito bom.
A idéia, acredito eu, era usar o C como um referencial para mostrar como o velho tabu que Java é uma linguagem lenta já está ficando pra trás. E não fazer comparações de qual é melhor, ou mais veloz.
Deveríamos ficar felizes por isso e não começar mais uma vez essa velha baboseira de que Java é melhor que C, e vice-versa. Até porque isso nunca levou (e nem levará) ninguém a lugar algum.
Não programo em C, nem tenho nada contra a linguagem, até acho que se não tivesse me afeiçoado ao Java, com certeza, C seria a minha opção.
São linguagens diferentes, paradigmas diferentes, métodos diferentes e formas diferentes de se programar.

Francamente, é besteira continuar falando nisso. As palavras acabam sendo mal interpretadas, e isso pode gerar conflito nas relações entre nós, membros do portal.

Gostei de saber que o Java tá melhorando e é isso que esse tópico deveria visar…

Abraços a todos…
… e, por favor, não interpretem mal minhas palavras.
:wink:[/quote]

mandou muito bem thai estou totalmente de acordo com vc, acho tbm q isso ja esta indo para um lado não muito legal.
fico por aqui tambem.

cÊ é foda hein?
uau…

q q tem o cara ter poucos posts no portal java e por isso estar na classificação de java baby?

o cara pode saber mais que vc e vc não sabe!

numero de posts não quer dizer nada, se fosse assim eu tava manjando mais que o vinci, por exemplo

aff… cada um…

[quote=“microfilo”]

cÊ é foda hein?
uau…

q q tem o cara ter poucos posts no portal java e por isso estar na classificação de java baby?

o cara pode saber mais que vc e vc não sabe!

numero de posts não quer dizer nada, se fosse assim eu tava manjando mais que o vinci, por exemplo

aff… cada um…[/quote]

caramba vc fica com preguiça de ler os topicos todos eu ja expliquei isso num topico depois, para de interpretar as coisas errado rapais!!!
eu nao quis dize nada disso eu ja falei. nao quero mais falar nesse topico c quizer falar alguma coisa refente a esse topico manda uma mensagem pr mim falou. chega!!

[quote=“Ejunior”]
ola realmente me expressei mal com o tanob, peços desculpas …
mas é eu mesmo q tenho q aprender OO como vc ensinuou!
bom Java é completamente orientado a objeto Sim! nao estou dizendo q outra linguagem nao seja, se no livros q vc leu nao esta java, me desculpe mas vc não pode ter lido todos, ou leu? sobre os testes a galera ja postou ai vc não viu?? nao posso fazer nada c não acredita. bom não sou fanatico em java, mas nesse teste específico foi mais rapido, da uma olhada no q eu disse no começo desta pagina sobre as camadas de linguagem de baixo nivel em diante o C esta em vantagem pois esta em nivel mais baixo onde java teria q passar por esses niveis primeiro. como se alguem apostase uma corrida e dissese pr o outro corredor vai na frente depois eu vou. mas java evolui muito desde suas primeiras versoes, e c nem tanto quase nada, ele é rapido, um dia essa rapides vai ter q melhorar. bom sobre o q java nao tem como herança multipla é por isso q ele usa interfaces para q possa suprir muitas das vantagens de HM sem os seus devidos problemas q se associan-se . ta ficando muito grande este texto só pr terminar é estranho um java baby entra aqui so por causa dessa discursao, ou será q é amigo do tanob ou criou outro usuario hehe, bom chega desse assunto.[/quote]

Java Baby é legal! Espero nunca deixar de ser Java Baby, nem C Baby, C++ Baby, Assembly Baby, Perl Baby, Prolog Baby, Lisp Baby, etc Baby. Julguem o que eu sei ou o que eu deixo de saber pelo que falo, e pela coerência do que falo, mesmo que não concordem. Realmente não li todos os livros de OO, mas li alguns do Booch, do Rumbaugh, Jacobson e Kristen Nygaard(considerado o pai da orientação a objeto). Mas com certeza o Gustavo se expressou muitíssimo melhor que eu.

Me envolvi na discução porque achei que tinha muita paixão envolvida. Guardemos as paixões para as moças e os times de futebol. Linguagem é linguagem, tem que ter dado devidamente cronometrado como o sparch mandou. Ai tem fundamento. Baseado em dados posso dizer para o meu chefe que vamos botar o sistema no cliente X baseado em Java pq é mais rápido.

Acredito que java é mais rápido principalmente para aplicações corporativas. Por exemplo, todo mundo sabe que servlet é mais rápido que script cgi, seja ele escrito em perl, python ou c. Pq? pq o tomcat fornece mecanismos de cache e outras mutretas. Java tende a crescer mais que C ou C++ pelo simples fato de o mercado estar se dividindo em Java e .NET. Ai não tem como competir, vão se gerar mecanismos de otimização que realmente vão suplantar C e C++. Mas por enquanto ainda sinto a máquina dar uma agachadinha para aplicações desenvolvidas em Java, não teste, mas aplicações reais. Trabalho com ferramentas como Visual Paradigm, OptimalJ e Eclipse e realmente dá uma agachada em relação a concorrentes como o Rational Rose e o Anjuta.

Espero ter contribuído.

T+

Rafael

Somente comentando uma coisa que li acima…

Java não é 100% orientado a objetos não!
Muita gente pensa que é… mas não é… e pq?!
Pq, ele tem tipos primitivos, assim como o C++, apesar de ter essas classes Wrapper Integer, Float, Boolean, etc etc… Smaltalk é puramente OO!!!

Abraços!

nunca senti falta de java não ser “puramente” OO

Acho que ninguém sente. Linguagens puristas são ruins de trabalhar. Contudo a definição do conceito é importante para que saibamos do que estamos falando.

Olá Pessoal,

Fiquei contente qdo soube q as aplicações em Java melhoraram seu rendimento, isso me fez acreditar muito mais na linguagem. Não espero q Java seja mais rapido q o C, só espero q as aplicações graficas rodem em desktop sem precisar d um PC top d linha pra isso.
Outra coisa, C é uma linguagem q por permitir trabalhar com ponteiros e registros, facilita o desenvolvimento d aplicaçòes d baixo nivel, como por exemplo a criação d drivers ou compiladores, ou ainda Maquinas Virtuais.
Acredito, q essas linguagens vao continuar por muito tempo, pq nao sao concorrentes. São linguagens criadas com propósitos específicos e servem muito bem à esse propósito.

Cara, esses testes só levam em consideração o incremento de variáveis primárias e atribuição de memória!

A fama de lentidão do java é por causa da alocação de memória, imagino que se tu desse uns new x malloc teria um resultado bem diferente, mas aí o c estaria em vantagem tb, não dah pra comparar um objeto java com uma estrutura c. Não tem como comparar java e c puramente, pq pra isso ou tu vai estar subutilizando o java, ou favorecendo o C. Tente JAVA x C++, é mais justo :slight_smile:

[]´s

Daniel Gazineu

O problema de velocidade em Java é carregar classes pra memória, principalmente quando se tem telas (interface). Telas em Java são lentas.

Havendo muita memória, sem problemas.

Onde seja que haja lentidão em Java, não é por culpa da linguagem em si, mas é culpa da JVM que precisam interpretar o bytecode e convertê-los em instruções executáveis apropriadas para a plataforma na qual está rodando o programa.

Sem mais,
Rodrigo

um swing bem programado é bem rápido :cool:

Uma coisa que vale lembrar é que para construir uma VM é necessário passar por mais de 23 mil testes de compatibilidade.

Porêm TODOS os testes são de compatibilidade. Não existe nenhum de desempenho…

Hoje a VM da sun esta bastante rapida, inclusive com Swing. Mas isso não garante que se pegarmos uma outra VM os resultados de desempenho serão bons também…

[]´s Victor…