相关疑难解决方法(0)

为什么修复了Java堆的最大大小?

不是 可以增加Java的堆的最大尺寸的虚拟机启动后.这有什么技术原因?垃圾收集算法是否依赖于具有固定数量的内存来处理?或者出于安全原因,是否通过消耗所有可用内存来阻止Java应用程序在DOS上运行系统上的其他应用程序?

java heap garbage-collection jvm

32
推荐指数
2
解决办法
6374
查看次数

28
推荐指数
3
解决办法
4万
查看次数

Java:为什么它使用固定数量的内存?或者它如何管理记忆?

似乎JVM使用了一些固定数量的内存.至少我经常看到参数-Xmx(对于最大尺寸)和-Xms(对于初始尺寸)表明这一点.

我觉得Java应用程序不能很好地处理内存.我注意到的一些事情:

  • 甚至一些非常小的示例演示应用程序也会加载大量内存.也许这是因为加载了Java库.但为什么需要为每个Java实例加载库?(这似乎是因为多个小应用程序线性占用更多内存.请参阅此处了解我描述此问题的一些细节.)或者为什么这样做?

  • 像Eclipse这样的大型Java应用程序经常会因一些OutOfMemory异常而崩溃.这总是很奇怪,因为我的系统上仍然有足够的内存.通常,它们会在运行时消耗越来越多的内存.我不确定他们是否有一些内存泄漏,或者这是因为内存池中的碎片 - 我觉得后者就是这种情况.

  • 例如,Java库似乎需要比类似强大的库(如Qt)更多的内存.为什么是这样?(比较,启动一些Qt应用程序并查看它们的内存使用情况并启动一些Java应用程序.)

为什么它不仅仅使用基础系统技术mallocfree?或者如果他们不喜欢libc实现,他们可以使用jemalloc(就像在FreeBSD和Firefox中一样),这似乎相当不错.我很确定这会比JVM内存池表现更好.而且不仅表现更好,还需要更少的内存,尤其是 适用于小型应用.


另外:有人已经尝试过吗?我会对基于LLVM的Java JIT编译器感兴趣,它只使用malloc/ free进行内存处理.

或者这也可能与JVM实现和实现不同?我主要使用Sun JVM.

(另请注意:我不是直接在这里谈论GC.GC只负责计算可删除的对象并初始化内存释放但实际的释放是一个不同的子系统.Afaik,它是一些自己的内存池实施,而不仅仅是打电话free.)


编辑:一个非常相关的问题:为什么(Sun)JVM具有固定的内存使用上限?或者换句话说:为什么JVM处理内存分配的方式与本机应用程序不同?

java memory jvm memory-management

12
推荐指数
2
解决办法
5217
查看次数

什么是OutOfMemoryError以及如何调试和修复它

我的Java程序扔了一个OutOfMemoryError.如何调试并修复此问题?


Java的许多新手都在努力应对OutOfMemoryError.这是尝试创建一个规范问题,该问题将回答有关问题的最常见问题OutOfMemoryError.我正在创建这个新问题,而不是调整之前关于a的众多问题之一,OutOfMemoryError因为这些问题及其答案与一个人的特定问题紧密相关.

java exception out-of-memory

5
推荐指数
2
解决办法
2321
查看次数

Python 与 Java 的 -xms 和 -xmx

相关问题:启动JVM时的Xms和Xmx参数是什么?

为什么 Java 程序允许您指定 -xms 和 -xmx?作为一名开发人员,为什么我需要知道/关心我的程序将预先使用多少 cpu/mem?

或者不同角度的同一问题,为什么Python不指定这些类型的选项?(用Python工作了5年,从来没有这样做过)

这与 Python 是解释性语言、Java 是某种字节码、JVM 到机器语言有关吗?
或者也许与垃圾收集的方式不同有关,Java 需要更加警惕内存消耗?

python java

2
推荐指数
1
解决办法
9225
查看次数