Para a maioria dos projetos Java, que é manutenção de projetos antigos ou no máximo CRUD onde o gargalo passa a ser o banco de dados, Java tem uma performance aceitável.
Mas uma linguagem que compila diretamente para código nativo sempre será mais performático do que uma que compila para bytecode.
[quote=tionil]
Mas uma linguagem que compila diretamente para código nativo sempre será mais performático do que uma que compila para bytecode.[/quote]
[quote=tionil]
Mas uma linguagem que compila diretamente para código nativo sempre será mais performático do que uma que compila para bytecode.[/quote]
todo mundo que nao conhece o poder do java diz isso.
[quote=André Fonseca][quote=tionil]
Mas uma linguagem que compila diretamente para código nativo sempre será mais performático do que uma que compila para bytecode.[/quote]
Isso não é bem verdade mais
É mais ou menos. Teoricamente um programa java tem que ser um pouco mais lento que um nativo por alguns motivos.
1)Toda classe java precisa ser carregada pelo classloader. Só o arquivo jr.jar possui 40 mb.
Isso influencia na inicialização do programa.
Qualquer objeto java tem um overhead se não me engano de 8b e 12b por array em relação a um c++ por exemplo que possui 4(porque ele só aloca apontadores).
Isso faz o programa java consumir no mínimo 3x mais memória.
…
[quote=wiki]Memory usage
Java memory usage is much heavier than C++'s memory usage because:
There is an 8-byte overhead for each object[56] and 12-byte for each array[57] in Java (32-bit; twice as much in 64-bit java). If the size of an object is not a multiple of 8 bytes, it is rounded up to next multiple of 8. This means an object containing a single byte field occupies 16 bytes and requires a 4-byte reference. Please note that C++ also allocates a pointer (usually 4 or 8 bytes) for every object that declares virtual functions.[58]
Parts of the Java Library must be loaded prior to the program execution (at least the classes that are used “under the hood” by the program).[59]. This leads to a significant memory overhead for small applications[citation needed].
Both the Java binary and native recompilations will typically be in memory.
The virtual machine itself consumes a significant amount of memory.
In Java, a composite object (class A which uses instances of B and C) is created using references to allocated instances of B and C. In C++ the memory and performance cost of these types of references can be avoided when the instance of B and/or C exists within A.
Lack of address arithmetic makes creating memory-efficient containers, such as tightly spaced structures and XOR linked lists, impossible.
In most cases a C++ application will consume less memory than the equivalent Java application due to the large overhead of Java’s virtual machine, class loading and automatic memory resizing. For applications in which memory is a critical factor for choosing between languages and runtime environments, a cost/benefit analysis is required. This type of analysis is beyond the scope of this document.[/quote]
Esse artigo aqui é bem legal e fala sobre isso. As vantagens e desvantagens.
É claro que você pode escrever um software mais rápido que um nativo se o segundo for mal feito.
O modelo de memória da java é bem mais eficiente, porque ela mantém o código desfragmentado.
Mas em geral o nativo é um pouco mais rápido, porque é natural mesmo(menos etapas na execução, menos recursos pra carregar, etc…)
[quote=tionil][quote=kdoigor]
todo mundo que nao conhece o poder do java diz isso.[/quote]
Como eu falei, trabalhar com sistemas simples de CRUD é o forte do Java, neste caso recomendi Java sem problemas.
Para aplicativos mais exigentes é melhor usar uma linguagem que compila direto para nativo porque é mais rápido.[/quote]
Achometro nao diz nada. Faz um sistema de billing com 1 bilhao de trasações/dia gerenciando memoria, escalavel, sem memory leak, e com segurança usando sua linguagem.
[quote=kdoigor][quote=tionil][quote=kdoigor]
todo mundo que nao conhece o poder do java diz isso.[/quote]
Como eu falei, trabalhar com sistemas simples de CRUD é o forte do Java, neste caso recomendi Java sem problemas.
Para aplicativos mais exigentes é melhor usar uma linguagem que compila direto para nativo porque é mais rápido.[/quote]
Achometro nao diz nada. Faz um sistema de billing com 1 bilhao de trasações/dia gerenciando memoria, escalavel, sem memory leak, e com segurança usando sua linguagem.[/quote]
vocês estão discutindo besteira.
Não é porque um sistema é escrito em java ou c++ que terá leaks ou não.
É perfeitamente possível criar um bom modelo de memória com smartpointers em c++.
A escolha é feita de acordo com o hardware em que o programa vai rodar.
[quote=juliocbq]
vocês estão discutindo besteira.[/quote]
Toda essa discussão é besteira.
Performance?
Camaradas, o autor do tópico perguntou por que desenvolver usando linux é mais indicado e não se o resultado do produto desenvolvido para A, B, C ou o ca$%$% a 4 é mais performático, belo e delicado.
Parece que vocês não sabem que sempre vai existir um troll querendo meter o bedelho para tirar os puristas do sério e começar uma guerra.
Só quem perde é a credibilidade do guj e os que procuram tópicos interessantes.
O que me deixa abismado é ver, todos os dias, essas bizarrices aqui. Sinceramente, não fosse por uma ou duas perguntas feitas de forma que me deixe interessado em responder, já teria largado o barco. Mas eu creio que aqueles que tem dúvidas e são interessados não merecem pagar pelas babaquices de uma meia dúzia.
Faz muito tempo que não vejo um tópico ser discutido de forma adulta, inteligente. Só aparece essas coisas onde se usam argumentos pífios e imbecis.
Não duvido nada alguém vir dizer que no TIOBE tem um gráfico que fala que linux vai desaparecer em pouco tempo. O que isso terá a ver com o tópico, não sei.
[quote=drsmachado][quote=juliocbq]
vocês estão discutindo besteira.[/quote]
Toda essa discussão é besteira.
Performance?
Camaradas, o autor do tópico perguntou por que desenvolver usando linux é mais indicado e não se o resultado do produto desenvolvido para A, B, C ou o ca$%$% a 4 é mais performático, belo e delicado.
Parece que vocês não sabem que sempre vai existir um troll querendo meter o bedelho para tirar os puristas do sério e começar uma guerra.
Só quem perde é a credibilidade do guj e os que procuram tópicos interessantes.
O que me deixa abismado é ver, todos os dias, essas bizarrices aqui. Sinceramente, não fosse por uma ou duas perguntas feitas de forma que me deixe interessado em responder, já teria largado o barco. Mas eu creio que aqueles que tem dúvidas e são interessados não merecem pagar pelas babaquices de uma meia dúzia.
Faz muito tempo que não vejo um tópico ser discutido de forma adulta, inteligente. Só aparece essas coisas onde se usam argumentos pífios e imbecis.
Não duvido nada alguém vir dizer que no TIOBE tem um gráfico que fala que linux vai desaparecer em pouco tempo. O que isso terá a ver com o tópico, não sei.[/quote]
Cara estressado demais não pra um tópico no offtopic?
java + linux é mais rápido que java + windows, não me perguntem o motivo.
Particularmente, uso Linux porque gosto mais e prefiro uma máquina mais rápida, simples assim. Mas dependendo do gosto e necessidade da pessoa, não é a melhor a opção e isso não é defeito.
Faz uns dois anos que uso o Linux pra valer, depois de testar algumas distros, acabei ficando muito contente com o Ubuntu, agora o 12.04 tá muito show. No trabalho utilizo o Windows pra desenvolver por questões da empresa, mas no meu note o Ubuntu é o meu sistema padrão, acho muito mais produtivo e acho tbm mais rápido. É claro que cada um tem seus prós e contras. Para iniciar no mundo linux, confesso que é um pouco sofrido, mas ainda bem que tem uma comunidade gigante pra te dar suporte, com o tempo você vai se acostumando.
Minha dica, é que quem nunca mexeu no Linux e trabalha com Java, Ruby, PHP, Python, pode ganhar produtividade aprendendo o Linux.