Ir ao conteúdo
  • Cadastre-se

Qual a Maior Diferença?


slype

Posts recomendados

Segue abaixo algumas diferenças:

- C++ não é totalmente multiplataforma, você precisa recompilar o código se quiser utiliza-ló em outra plataforma, em Java isso não é necessário.

- Java têm várias bibliotecas que facilitam a vida do programador (na grande maioria das vezes existe uma similar em C++, mas nem todas vem com o compilador).

- Um programa Java roda em uma máquina virtual, portando você precisa instalar essa máquina virtual no seu computador para poder executar o programa; já em C++ você só precisa do executável (e os arquivos auxiliares, como dll's).

- Você não consegue manipular ponteiros em Java.

- O manipulamento de memória é implícito (isto é, a maquina virtual que aloca e desaloca memória, facilitando a vida do programador, mas deixando o programa meio que imprevisível, pois a máquina virtual pode começar a desalocar memória no meio da execução do seu programa, deixando ele lento), em C++ o manipulamento de memória é explícito (o programador que deve alocar e desalocar a memória, dificultando a vida do programador, mas deixando o programa previsível e ao mesmo tempo mais propício à falhas, pois por um erro de programação você pode alocar memória e nunca desalocá-la).

- Java está presente em muitas plataformas, inclusive em celulares, pocket pc's, etc...

- Java é mais aceito no mercado, pois além de ser multiplataforma, é de fácil aprendizagem e facilita muito a vida do programador, aumentando a produtividade.

Espero ter ajudado ;)

Link para o comentário
Compartilhar em outros sites

Gostaria de acrescentar que:

- Java é uma linguagem muita LENTA!!!!! Principalmente quando usado bibliotécas gráficas;

- Em C++ é possível desenvolver serviços Windows de alta disponibilidade com excelente performance, ocupando pouca memória e processamento. Já em Java o software fica muito propício a falhas, lentidão e travamento já que esse depende da máquina virtual.

"Java é mais aceito no mercado, pois além de ser multiplataforma, é de fácil aprendizagem e facilita muito a vida do programador, aumentando a produtividade."

É verdade, porém, segundo as estatísticas 60% dos projetos de desenvolvimento de software não atende o solicitado pelo usuário, sendo que vários deles ficam mais caros que o combinado e o software fica com uma enorme LENTIDÃO. Lembrando que vários programas desses são feitos em Java.

Link para o comentário
Compartilhar em outros sites

Java é uma linguagem muita LENTA!!!!! Principalmente quando usado bibliotécas gráficas;

Linguagens de programacao não sao "rapidas" ou "lentas". Isso não existe!

Existe a execução lenta de um programa em um ambiente.

60% dos projetos de desenvolvimento de software não atende o solicitado pelo usuário, sendo que vários deles ficam mais caros que o combinado e o software fica com uma enorme LENTIDÃO. Lembrando que vários programas desses são feitos em Java.

Isso não é um problema do Java.

Se o gerente e a equipe do projeto não fazem um bom trabalho...a culpa não é da linguagem de programação.

Em C++ é possível desenvolver serviços Windows de alta disponibilidade com excelente performance, ocupando pouca memória e processamento. Já em Java o software fica muito propício a falhas, lentidão e travamento já que esse depende da máquina virtual.

É necessário ter conhecimento sobre a linguagem para não sair falando bobagem.

Link para o comentário
Compartilhar em outros sites

Diogo,

Entendo a sua colocação, porém, já vi muitos programas feitos em Java que compromentem muito na performance. Quando digo,

Java é uma linguagem muita LENTA!!!!! Principalmente quando usado bibliotécas gráficas
, conheços programadores em Java que confessam que os software desenvolvidos em Java, ficam com performance inferior que os feitos em C++. Realize um busca no Google por exemplo, que você encontrará diversos foruns discutindo esse assunto.
É necessário ter conhecimento sobre a linguagem para não sair falando bobagem.

Faça uma pesquisa sobre projetos desenvolvidos em Java, que não deram certo por causa da lentidão que o software ficou.

:looka:

Link para o comentário
Compartilhar em outros sites

Faça uma pesquisa sobre projetos desenvolvidos em Java, que não deram certo por causa da lentidão que o software ficou.

Não preciso, trabalho com Java e conheço diversas pessoas que também trabalham e sei que isso não é verdade.

não esta convencido? tenta esse link. É o maior fórum java do Brasil com gente bastante experiente.

O C++ é ótimo, porém não é ideal para tudo da mesma forma que o Java também não é. Como você está defendendo C++ vamos imaginar o seguinte contexto:

um gerente de um projeto escolhe o C++ para desenvolver um projeto;

vamos supor que o projeto não deu certo devido a uma particularidade qualquer da linguagem;

de quem é a culpa? do C++? acho que não.

Vou citar um usuário de outro fórum

Então da próxima que você (e não estou me referindo a ninguém em particular) ouvir ou falar que "Java é mais rápido que VB" ou "C++ é mais rápido que LISP", esta na hora de repassar essa licaozinha ao próximo, ou refletir mais sobre ela.

Existem n artigos falando sobre isso...tem um bem interessante do Martin Fowler.

Link para o comentário
Compartilhar em outros sites

Dei uma olhana no link que você passou, o site é excelente tem muitas informações.

Eu concordo plenamente que Java é muito bom no que se refere em Multiplataforma, e facilidade na programação maior que em C++.

Porém:

- Java foi escrito em qual linguagem?!?

- Os "maiores" sistemas operacionais foram escritos em qual liguagem?

- O sistema operacional, e as aplicações que suportam o maior volume de conexões simultâneas, em geral, foram escritos em qual linguagem?

- As API´s do Windows que o Java utiliza, por exemplo: CreateProcess e WaitForSingleObject foram feitas em C.

Em relação a lentidão dos software feitos em Java, em relação aos feitos em C++, so o fato do Java utilizar o garbage collection(Sua função é a de varrer a memória de tempos em tempos, liberando automaticamente os blocos que não estão sendo utilizados), deixa o aplicativo mais lento, por manter uma thread paralela que fica sendo executada todo o tempo de execução do programa.

Em C++, com a implementação do Código gerenciado (.NET), é possível realizar esta mesma tarefa de garbage collection, com mais facilidade, onde o programador pode até escolher a variável que terá um garbage collector.

Agora, imagine um software(banco de dados, conversores gráficos etc..), rodando num servidor Windows em Cluster Microsoft, tendo o software suporte para muitas conexões simultâneas.

Esse software feito em JAVA.... Acredita que este software feito em JAVA irá ter uma melhor performance do que feito em C++??

:goff:

Link para o comentário
Compartilhar em outros sites

Você realmente não entendeu o meu ponto. Em nenhum momento eu falei que o Java era o melhor para tudo. O meu ponto é: A melhor linguagem é aquela que vai atender a necessidade do usuário.

O que nos leva a concluir que não existe linguagem que vai atender a todas as necessidades dos usuários ao mesmo tempo.

C++ é ótimo, disso ninguém duvida, mas não faz tudo.

Você pode usar a mesma frase acima para qualquer linguagem de programação existente.

Java é ótimo, disso ninguém duvida, mas não faz tudo.

Fortran é ótimo, disso ninguém duvida, mas não faz tudo.

.

.

.

Postado Originalmente por raf-sp+15 de dezembro de 2005, 20:39-->
- Java foi escrito em qual linguagem?!?

A VM é escrita em C.

Mas se este é o problema a VM do JNode é escrita em JAVA + ASM.

raf-sp@15 de dezembro de 2005, 20:39

- Os "maiores" sistemas operacionais foram escritos em qual liguagem?

Isso não é argumento...mas vou rebater citando outra pessoa com bem mais experiência que nós dois juntos ^^'

"Nada impede um sistema operacional de ser escrito em Java - e, pra provar, já existem alguns.

E so porque os sistemas operacionais de hoje ou de daqui 5 anos sao ou vão ser escritos em C ou C++ não se deve concluir que todo sistema operacional ate a eternidade vai ser escrito nessas linguagens. Use outro argumento, porque esse é o mais furado que você podia ter arrumado"

Exemplo de SO feito em Java (Coloquei o link só para divulgar a informação)

Postado Originalmente por raf-sp+15 de dezembro de 2005, 20:39-->
- As API´s do Windows que o Java utiliza, por exemplo: CreateProcess e WaitForSingleObject foram feitas em C.

whats ur point????

Postado Originalmente por raf-sp@15 de dezembro de 2005, 20:39

Em relação a lentidão dos software feitos em Java, em relação aos feitos em C++, so o fato do Java utilizar o garbage collection(Sua função é a de varrer a memória de tempos em tempos, liberando automaticamente os blocos que não estão sendo utilizados), deixa o aplicativo mais lento, por manter uma thread paralela que fica sendo executada todo o tempo de execução do programa.

Em C++, com a implementação do Código gerenciado (.NET), é possível realizar esta mesma tarefa de garbage collection, com mais facilidade, onde o programador pode até escolher a variável que terá um garbage collector.

Este é um argumento que realmente interessa a discussão.

O garbage colletor foi criado com intuito de evitar o pesadelo da remoção manual, porém esta solução criou um novo problema de desaceleração inesperada e não determinística de programas.

Postado Originalmente por raf-sp@15 de dezembro de 2005, 20:39

- O sistema operacional, e as aplicações que suportam o maior volume de conexões simultâneas, em geral, foram escritos em qual linguagem?

raf-sp@15 de dezembro de 2005, 20:39

Agora, imagine um software(banco de dados, conversores gráficos etc..), rodando num servidor Windows em Cluster Microsoft, tendo o software suporte para muitas conexões simultâneas.

Esse software feito em JAVA.... Acredita que este software feito em JAVA irá ter uma melhor performance do que feito em C++??

Pode ser o site do banco do Brasil?...java

Pode ser o site da cnn?...java... ~2000 querys por segundo..com um tempo de resposta de 200ms o que é bastante razoável.

"No Brasil, por exemplo, a maioria dos Bancos utiliza a tecnologia Java para construir seus home banks, que são acessados por milhares de usuários diariamente. Grandes sites como o eBay utilizam Java para garantir alta performance. E a cada ano Java tem se tornado mais rápido, na medida que se evolui o compilador dinâmico."

Esse seu ultimo post saiu totalmente do foco principal da discussão tornando o tópico uma discussão sobre qual linguagem é a melhor...e todos sabem ou deveriam saber que não existe a melhor linguagem. Outra coisa que não se pode afirmar é que C ou C++ sempre serão mais rápidos que Java e também não podemos afirmar o contrário. Podemos afirmar que em algumas aplicações C é mais rápido que Java e que em outras Java é mais rápido que C.

Este é o meu ponto.

Finalizo meu post com um link para um belo artigo escrito pelo Martin Fowler.

*sono

Link para o comentário
Compartilhar em outros sites

Bom, atualmente, as aplicações as quais o tempo de execução é crítico, não se deve utilizar Java como linguagem primordial, principalmente por causa do garbage colletor, que deixa a aplicação lenta em circunstâncias não totalmente previsíveis.

C++ é ótimo, disso ninguém duvida, mas não faz tudo.

Você pode usar a mesma frase acima para qualquer linguagem de programação existente.

Não concordo com isso, pois desconheço algo que Assembly não possa fazer (levando em consideração as limitações do hardware).

Claro que acho totalmente inviável fazer um sistema totalmente em Assembly, mas existe a possibilidade...

O meu ponto é: A melhor linguagem é aquela que vai atender a necessidade do usuário.

O que nos leva a concluir que não existe linguagem que vai atender a todas as necessidades dos usuários ao mesmo tempo.

Concordo plenamente. Velocidade de execução não determina e nunca vai determinar se uma linguagem é melhor que a outra. O que podemos determinar é a linguagem que melhor se adequa as necessidades do usuário, a qual boa parte das vezes, é a razão entre o tempo de desenvolvimento e a performance da aplicação (neste quesito Java se sai muito bem).

Link para o comentário
Compartilhar em outros sites

Postado Originalmente por RoBiN@16 de dezembro de 2005, 09:47

Bom, atualmente, as aplicações as quais o tempo de execução é crítico, não se deve utilizar Java como linguagem primordial, principalmente por causa do garbage colletor, que deixa a aplicação lenta em circunstâncias não totalmente previsíveis.

Acredito que este problema pode ser bastante reduzido ou talvez até eliminado.

De acordo com um artigo que eu li, "é possível remover explicitamente a referência a um objeto para sinalizar ao Garbage Collector que o objeto não é mais necessário e pode ser removido; ou sugerir ao sistema que execute o garbage collector através da invocação ao método gc() da classe java.lang.System, no caso da plataforma Java".

Vamos levantar outro ponto importante.

O que acontece se a linguagem não tiver garbage collector?

No caso da linguagem C é "não ser possível a reutilização da memória da pilha sem antes ter sido explicitamente libertada pelo programador através da função free(). O resultado disto é que se o programador se esquecer acidentalmente de libertar a memória, mas continuar a alocá-la, cada vez mais memória será consumida desnecessariamente ao longo do tempo. Esta situação é chamada de fuga de memória. Também é possível que aconteça o problema inverso, ou seja, libertar memória cedo demais e continuar a usá-la. Como o sistema de alocação de memória pode reutilizar a memória em qualquer momento por motivos não-relaciondos, isto resulta em comportamento imprevisível. Estas situações em particular são corrigidas em linguagens de programação que suportem colecção automática de lixo."

Postado Originalmente por RoBiN@16 de dezembro de 2005, 09:47

Não concordo com isso, pois desconheço algo que Assembly não possa fazer (levando em consideração as limitações do hardware).

Claro que acho totalmente inviável fazer um sistema totalmente em Assembly, mas existe a possibilidade...

Achei que estava implícito que estávamos falando de linguagens de programação "médio"-alto nível.

De qualquer forma, não acho relevante e nem produtivo colocar linguagens de baixo nível na discussão.

Link para o comentário
Compartilhar em outros sites

Acredito que este problema pode ser bastante reduzido ou talvez até eliminado.

De acordo com um artigo que eu li, "é possível remover explicitamente a referência a um objeto para sinalizar ao Garbage Collector que o objeto não é mais necessário e pode ser removido; ou sugerir ao sistema que execute o garbage collector através da invocação ao método gc() da classe java.lang.System, no caso da plataforma Java".

Mesmo que seja previsível, o Garbage Collector é um processo muito complexo, e que toma um tempo precioso para as aplicações as quais o tempo de execução é crítico.

No caso da linguagem C é "não ser possível a reutilização da memória da pilha sem antes ter sido explicitamente libertada pelo programador através da função free(). O resultado disto é que se o programador se esquecer acidentalmente de libertar a memória, mas continuar a alocá-la, cada vez mais memória será consumida desnecessariamente ao longo do tempo. Esta situação é chamada de fuga de memória. Também é possível que aconteça o problema inverso, ou seja, libertar memória cedo demais e continuar a usá-la. Como o sistema de alocação de memória pode reutilizar a memória em qualquer momento por motivos não-relaciondos, isto resulta em comportamento imprevisível. Estas situações em particular são corrigidas em linguagens de programação que suportem colecção automática de lixo."

Não sei de onde você tirou isso, mas primeiramente você pode reutilizar a memória heap como bem entender, inclusive sem liberá-lá primeiro. E por último, incompetência do programador não está ligado de forma alguma com a liguagem...

Achei que estava implícito que estávamos falando de linguagens de programação "médio"-alto nível.

De qualquer forma, não acho relevante e nem produtivo colocar linguagens de baixo nível na discussão.

Assembly ainda é muito utilizado, e não deixar de ser uma linguagem de programação.

Mas não vou mais usá-lá na discussão.

Link para o comentário
Compartilhar em outros sites

Postado Originalmente por RoBiN+16 de dezembro de 2005, 15:39-->
Mesmo que seja previsível, o Garbage Collector é um processo muito complexo, e que toma um tempo precioso para as aplicações as quais o tempo de execução é crítico.

o que seria uma aplicação crítica para você? Posso tentar mostrar alguns exemplos onde o Java é usado, tudo depende apenas do contexto.

*só para alimentar a discussão, que por sinal esta bem interessante.

Postado Originalmente por RoBiN@16 de dezembro de 2005, 15:39

Não sei de onde você tirou isso, mas primeiramente você pode reutilizar a memória heap como bem entender, inclusive sem liberá-lá primeiro.

tirei da wikipedia link .

*tem mais em outro lugar...mas ainda não achei no histórico...quando eu achar eu posto.

RoBiN@16 de dezembro de 2005, 15:39

E por último, incompetência do programador não está ligado de forma alguma com a liguagem...

O erro humano sempre vai existir, então porque não minimizar a possibilidade de erros usando o garbage collector?

Além disso também devemos pensar em perder tempo com "bobagem";

Ao meu ver, um programador deve se preocupar com a regra do negocio, afinal, se não produzir vai para fora, pois o gerente não vai querer saber se você está dando um jeito na "fuga de memória".

Link para o comentário
Compartilhar em outros sites

Postado Originalmente por Diogo Cabral@16 de dezembro de 2005, 20:54

o que seria uma aplicação crítica para você? Posso tentar mostrar alguns exemplos onde o Java é usado, tudo depende apenas do contexto.

Um exemplo no qual o tempo de execução é crítico são os sistemas responsáveis pelas espaçonaves e satélites mandados para o espaço, os quais um segundo de demora na resposta pode custar a vida de diversas pessoas, e/ou a destruição de um equipamento de milhões de dólares.

Sei que existem diversos sistemas feitos em Java com tempos de resposta ótimos, mas você dificilmente achará sistemas assim para dispositivos com hardware limitado (como no exemplo acima), já que uma aplicação Java necessita da máquina virtual para ser executada, "desperdiçando" memória e tempo para o carregamento e execução dela.

Como disse desde o começo, isto só é um problema para as aplicações as quais o tempo de execução é crítico, portanto para a grande maioria dos sistemas isto não é um problema, pois podem se "dar ao luxo" de perder milésimos de segundos na execução, mas economizar um tempo muito maior no desenvolvimento.

Postado Originalmente por Diogo Cabral+16 de dezembro de 2005, 20:54-->
tirei  da wikipedia link

Provavelmente você já programou em C, portanto deve saber que ele lhe dá total liberdade para manipular a memória do jeito que você quiser. Concordo que seria prudente liberar a memória antes de reutilizá-la, mas isto não é obrigatório.

Diogo Cabral@16 de dezembro de 2005, 20:54

O erro humano sempre vai existir, então porque não minimizar a possibilidade de erros usando o garbage collector?

Além disso também devemos pensar em perder tempo com "bobagem";

Ao meu ver, um programador deve se preocupar com a regra do negocio, afinal, se não produzir vai para fora, pois o gerente não vai querer saber se você está dando um jeito na "fuga de memória".

Concordo com você, e acho que Java implementou uma ótima maneira de se manipular a memória utilizando o garbage collector, o tempo perdido na execução é mínimo comparado ao tempo ganho no desenvolvimento. Mas há casos em que o tempo perdido é considerável, os quais é preferenciável utilizar manipulamento explícito de memória.

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

meu professor di php que trabalha pra uma empresa de desenvolvimento di software nosis estava papeandu e eu estava nessa duvida tambem de aprender java ou C bom C tem suas qualidades so que java a a MANIA agora se você sabe JAVA ele me disse que você se da bem no comercio porque esta sendo muuuito usada é serio e depois vendo c porque c porque é uma popular ? bom é so ke se for pelas caracteristicas dela você querer programar prefira assembler que é bem melhor xD e mais leve e lembre quanto mais complikada a linguagem mais vai ser fácil do interpretador internder fazendo com que seja algo mais level moro xD

java com certeza xD

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...
Postado Originalmente por RoBiN@18 de dezembro de 2005, 02:32

Um exemplo no qual o tempo de execução é crítico são os sistemas responsáveis pelas espaçonaves e satélites mandados para o espaço, os quais um segundo de demora na resposta pode custar a vida de diversas pessoas, e/ou a destruição de um equipamento de milhões de dólares.

Sei que existem diversos sistemas feitos em Java com tempos de resposta ótimos, mas você dificilmente achará sistemas assim para dispositivos com hardware limitado (como no exemplo acima), já que uma aplicação Java necessita da máquina virtual para ser executada, "desperdiçando" memória e tempo para o carregamento e execução dela.

Como disse desde o começo, isto só é um problema para as aplicações as quais o tempo de execução é crítico, portanto para a grande maioria dos sistemas isto não é um problema, pois podem se "dar ao luxo" de perder milésimos de segundos na execução, mas economizar um tempo muito maior no desenvolvimento.

Desculpe a demora para responder estava meio sem tempo ^^'

Aceito o seu ponto, porém eu duvido muito que essa parte tããão crítica seja feita em C , C++ ou Java; provavelmente essa parte delicada é feita em asm.

Não procurei nenhum exemplo...lembro do robô que foi a marte..serve? :D

Participei de uma discussão sobe c++ e java, e um individuo postou algo bem interessante

"Java da pouca corda pro programador que não sabe o que ta fazendo se enforcar. C deixa a corda ali a mostra, pronta pra ser usada a qualquer momento, e C++ é uma corda, praticamente infinita.

As 3 tem suas vantagens, desvantagens, usos e desusos. E tambem tem seus gurus, idiotas e seguidores, como qualquer outra linguagem de programacao."

Dessa forma finaliza a discussão, acredito eu ^^'

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!