为什么Java有这么大的足迹?
Java - 或者至少是Sun的Hotspot JVM - 长期以来一直以拥有非常大的内存占用而闻名。究竟是什么让JVM享有这种声誉?我对详细的细分感兴趣:有多少内存进入运行时(JIT?GC/内存管理?类加载器?)与JNI / JVMTI等“辅助”API相关的任何内容?标准库?(哪些部分得到多少?还有其他主要组件吗?
我意识到,如果没有具体的应用程序和VM配置,这个问题可能并不简单,所以只是为了缩小范围:我主要对默认/典型的VM配置感兴趣,对基准控制台“Hello world”应用程序以及任何现实世界的桌面或服务器应用程序感兴趣(我怀疑JVM的很大一部分占用空间在很大程度上独立于应用程序本身, 理想情况下,我想放大这一部分。
我还有其他几个密切相关的问题:
其他类似的技术,如.NET/mono,并没有表现出几乎相同的足迹。为什么会这样?
我在 intarwebs 的某个地方读到过,很大一部分占用空间仅仅是由于标准库的大小。如果是这样的话,那么为什么会预先加载这么多标准库呢?
是否有任何努力(JSR,等等)来驯服内存占用?我遇到的最接近的事情是一个减少JVM磁盘占用空间的项目。
我敢肯定,在过去的十年左右的时间里,随着每个新版本的Java,它的足迹都有所不同。是否有任何特定的数字/图表精确记录了JVM的足迹变化了多少?