Seu colega não tem idéia do que está falando.
Sua operação mais cara seria ouvi-los . Eles desperdiçaram seu tempo desviando-o de informações desatualizadas há mais de uma década (na data original em que essa resposta foi postada) , além de você ter que gastar algum tempo postando aqui e pesquisando na Internet para a verdade.
Espero que eles estejam apenas regurgitando algo que ouviram ou leram de mais de uma década atrás e não sabem nada melhor. Eu aceitaria qualquer outra coisa que eles dissessem como suspeita, essa deve ser uma falácia bem conhecida de qualquer um que se mantenha atualizado de qualquer maneira.
Tudo é um Objeto (exceto primitives
)
Tudo que não sejam primitivos ( int, long, double
etc) são objetos em Java. Não há como evitar a criação de objetos em Java.
A criação de objetos em Java devido a suas estratégias de alocação de memória é mais rápida que o C ++ na maioria dos casos e, para todos os fins práticos, em comparação com tudo o mais na JVM, pode ser considerada "livre" .
No início dos anos 90, as implementações da JVM na década de 90 tinham um pouco de desempenho na alocação real de objetos. Este não é o caso desde pelo menos 2005.
Se você ajustar -Xms
para suportar toda a memória necessária para que seu aplicativo seja executado corretamente, o GC talvez nunca precise executar e varrer a maior parte do lixo nas implementações modernas do GC, os programas de curta duração talvez nunca tenham o GC.
Ele não tenta maximizar o espaço livre, que é um arenque vermelho de qualquer maneira, maximiza o desempenho do tempo de execução. Se isso significa que o JVM Heap é quase 100% alocado o tempo todo, que assim seja. A memória heap livre da JVM não fornece nada apenas para você ficar sentado ali mesmo.
Há um equívoco de que o GC libere memória de volta para o resto do sistema de uma maneira útil, isso é completamente falso!
O heap da JVM não aumenta e diminui, para que o restante do sistema seja afetado positivamente pela memória livre no heap da JVM . -Xms
aloca TUDO o que é especificado na inicialização e sua heurística é nunca realmente liberar parte dessa memória de volta ao sistema operacional para ser compartilhada com outros processos do sistema operacional até que a instância da JVM saia completamente. -Xms=1GB -Xmx=1GB
aloca 1 GB de RAM, independentemente de quantos objetos são realmente criados a qualquer momento. Existem algumas configurações que permitem que as porcentagens da memória heap sejam liberadas, mas para todos os propósitos práticos a JVM nunca é capaz de liberar o suficiente dessa memória para que isso aconteça.portanto, nenhum outro processo pode recuperar essa memória; portanto, o resto do sistema também não se beneficia da liberação da JVM Heap. Uma solicitação de proposta foi "aceita" em 29 de novembro de 2006, mas nada foi feito a respeito. Esse é um comportamento que não é considerado uma preocupação por ninguém de autoridade.
Há um equívoco de que a criação de muitos objetos pequenos e de curta duração faz com que a JVM faça uma pausa por longos períodos de tempo, agora isso também é falso
Os algoritmos atuais do GC são realmente otimizados para criar muitos objetos pequenos de vida curta, que é basicamente a heurística de 99% para objetos Java em todos os programas. Tentativas no pool de objetos realmente fazem com que a JVM tenha um desempenho pior na maioria dos casos.
Os únicos objetos que precisam de pool hoje são objetos que se referem a recursos finitos externos à JVM; Soquetes, arquivos, conexões com o banco de dados, etc., e podem ser reutilizados. Objetos regulares não podem ser agrupados no mesmo sentido que em idiomas que permitem acesso direto aos locais da memória. O cache de objetos é um conceito diferente e pode ou não ser o que algumas pessoas chamam de pooling ingenuamente , os dois conceitos não são a mesma coisa e não devem ser confundidos.
Os algoritmos modernos do GC não têm esse problema porque não se desalocam dentro de um cronograma, se desalocam quando a memória livre é necessária em uma determinada geração. Se o heap for grande o suficiente, não haverá desalocações por tempo suficiente para causar pausas.
Linguagens dinâmicas orientadas a objetos estão superando C mesmo hoje em dia nos testes sensíveis à computação.