谁能向我解释为什么JVM(我没有检查太多,但是我从未见过这样的情况)为什么需要以固定的堆大小运行?我知道在一个简单的连续堆上实现起来比较容易,但是Sun JVM已有十多年的历史了,因此我希望他们有时间改进它。
需要在启动时定义程序的最大内存大小似乎是在1960年代完成的,然后与OS虚拟内存管理的交互很差(GC检索交换出的数据,无法确定Java进程需要多少内存)真正从OS端使用,浪费了大量VM空间(我知道,您不在乎您喜欢的48位计算机...)。我还猜想,在JVM(EE应用程序服务器,OSGi)内部构建小型操作系统的各种可悲尝试至少部分归咎于这种情况,因为在系统上运行多个Java进程总是会浪费资源,因为您必须给他们每个人可能需要使用的内存。
出乎意料的是,Google并没有像我所期望的那样引起愤怒,但是它们可能只是埋葬在数以百万计的人中,他们发现了固定的堆大小并只是接受了一个事实。