Может кто-нибудь объяснить мне, почему JVM (я не проверял слишком много, но я никогда не видел такой, которая не делала так) должны работать с фиксированным размером кучи? Я знаю, что проще реализовать в простой непрерывной куче, но JVM Sun уже более десяти лет, поэтому я ожидаю, что у них было время, чтобы улучшить это.
Необходимость определить максимальный объем памяти вашей программы во время запуска кажется делом 1960-х годов, а затем возникают плохие взаимодействия с управлением виртуальной памятью ОС (сбор данных извлекается из памяти, невозможность определить, сколько памяти занимает процесс Java). действительно используя со стороны ОС, огромное количество пространства ВМ тратится впустую (я знаю, вам все равно на ваших модных 48-битных машинах ...)). Я также предполагаю, что различные печальные попытки создания небольших операционных систем внутри JVM (серверы приложений EE, OSGi), по крайней мере, частично виноваты в этом обстоятельстве, потому что запуск нескольких процессов Java в системе неизменно приводит к потере ресурсов, потому что вы должны дать каждому из них память, которую он может использовать в пике.
Удивительно, но Google не вызвал бурь возмущения по поводу этого, что я ожидаю, но они могли быть просто похоронены под миллионами людей, узнавших о фиксированном размере кучи и просто приняв это за факт.