java - 为什么Java有这么大的足迹?

标签 java memory footprint

Java——或者至少是 Sun 的 Hotspot JVM——长期以来一直以占用大量内存而闻名。赋予它这种声誉的 JVM 到底是什么?我对详细的分割感兴趣:运行时有多少内存(JIT?GC/内存管理?类加载器?)任何与“辅助”API(如 JNI/JVMTI)相关的东西?标准库? (哪些部分得到多少?)还有其他主要组成部分吗?

我意识到,如果没有具体的应用程序和虚拟机配置,这可能无法直接回答,所以至少在某种程度上缩小范围:我主要对默认/典型虚拟机配置感兴趣,并且在基线控制台“ Hello World ”应用程序以及任何现实世界的桌面或服务器应用程序。 (我怀疑 JVM 占用空间的很大一部分在很大程度上独立于应用程序本身,理想情况下,我想放大这部分。)

我还有其他几个密切相关的问题:

  • 其他类似的技术,例如 .NET/mono,没有表现出几乎相同的足迹。为什么会这样?

  • 我在 intarwebs 上的某处读到,很大一部分的足迹仅仅是由于标准库的大小。如果是这样,那为什么要预先加载这么多标准库?

  • 是否有任何努力(JSR,等等)来控制内存占用?我遇到的最接近 reduce the on-disk footprint of the JVM 的项目.

  • 我确信在过去十年左右的时间里,每个新版本的 Java 的足迹都发生了变化。是否有任何具体的数字/图表准确记录了 JVM 的足迹发生了多少变化?

最佳答案

一些举措:

关于java - 为什么Java有这么大的足迹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1107991/

相关文章:

java - 可访问、跨平台、相关的 UI 框架?

java - CDI 通用 DAO 注入(inject)

java - 如果在另一个字符串中找到字符串的字母,则将其替换为空白

c++ - 我的 C++ 软件是太多 exe 的集合,我该如何管理它

c - 难以理解MACRO的偏移量

linux - 如何降低在 Linux 上运行的 Go 进程的占用空间?

java - 数据绑定(bind)事件监听器

c++ - 可能丢失在 pthread_create 的丢失记录中

haskell - 使用 Haskell 包 'plugins' 时如何减少二进制占用?