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.
Entendi. Então possível é, só exige uma eforço e uma complexidade muito maior para conseguir algo que a HotSpot JVM/JIT te dá de mão beijada.
Prealocar tudo no pool (note no código que os Entries
ficam numa linked-list que é um pool) antes de começar a executar é inconveniente. Até porque muitas vezes vc não vai saber a quantidade média/máxima com antecedência.
Agora fiquei curioso/interessado em MELHORAR esse código. Em consertá-lo para ele ser tão performático quanto a versão em Java. Isso é possível ou é melhor escrever isso em assembly? :P Vc mencionou alocação em blocos e até mesmo a implementação de alocadores personalizados. Isso é possível de se fazer para tornar esse código mais rápido?
Engraçado que as pessoas abrem a boca para falar que C++ é a coisa mais performática do mundo, blah, blah, blah. Se vc é DEUS talvez ele na sua mão seja bem performático mesmo. Se para implementar uma simples hash table você precisa pensar em 10 complexidades extras que com o Java vc não precisa nem saber que existem, realmente eu me pergunto como grandes empresas mantem projetos de C++ grandes, que envolvem vários programadores, com qualidade. Talvez o KERNEL do Linux tenha dado certo, poque por muito tempo o único que meteu a mão ali foi o Linus.
Abstração é muito importante. E Java te dá isso sobre C++ de uma maneira muito eficiente e performática. O JIT resolve muita coisa. Se vc quiser baixar o nível para "controlar melhor a performance" então vc deve ser um DEUS e nesse caso melhor partir direto para o assembly. A impressão que fica é que se você for apenas um bom/ótimo programador, o resultado final não vai ficar bom se comparado como poderia ter ficado com uma linguagem mais de alto nível (e igualmente performática) como o Java. Não vai ficar bom tanto do ponto de vista da performance como do ponto de vista da organização (clareza do código, ausência de bugs, ausência de vulnerabilidades, etc). Não vamos nem entrar na questão de que C++ é o paraíso das vulnerabilidades e até o governo americano está querendo se livrar dele nos seus sistemas.
Repare que no GitHub a gente também testou GraalVM compilando o Java para nativo ahead-of-time. Mas não fica mais rápido que a HotSpot JIT.