Boa dica! Uma maneira de provar/desprovar isso seria pre-allocar um monte de Entry
objects e rodar o benchmark dos puts
com os objetos já pre-allocados pelo C++. Concorda?
Agora isso explicaria a vantagem do put
, mas não explica a vantagem do get
e do remove
. Concorda?
E o mais importante: não tem jeito de resolver essa ineficiência de C++ na alocação de memória no heap? A HotSpot JVM vai sempre levar vantagem nisso? E aquela história que o C++ te dá controle total de tudo, etc e tals?
Estou perguntando na boa. Quero entender as vantagens e desvantagens de cada linguagem (C++ e Java) e cada approach (AOT e JIT).
Boa dica! Uma maneira de provar/desprovar isso seria pre-allocar um monte de Entry objects e rodar o benchmark dos puts com os objetos já pre-allocados pelo C++. Concorda?
Teste e compartilhe os resultados. Acredito que pre-alocar todos os objetos em memória estática resultaria em uma melhora de desempenho de várias ordens de grandeza.
Agora isso explicaria a vantagem do put, mas não explica a vantagem do get e do remove. Concorda?
A explicação para a vantagem do JIT em todas as operações reside na redução da fragmentação de memória, que leva ao uso eficiente do cache.
E aquela história que o C++ te dá controle total de tudo, etc e tals?
Exatamente. A otimização da alocação de memória é uma responsabilidade do programador. Isso envolve técnicas como alocação em blocos, uso de pools de memória e até mesmo a implementação de alocadores personalizados. O compilador, neste caso, não vai oferecer otimizações significativas.