在阅读有关该主题的已问问题和大量谷歌搜索之后,我仍然无法清楚了解 -Xms 选项
我的问题是:java -Xms=512m -Xmx=512m
和之间有什么区别java -Xms=64m -Xmx=512m
?
现在,我有以下答案:
唯一的区别是在应用程序运行期间将运行的垃圾回收数量和内存分配数量。我对吗 ?
这是我获得此答案的原因:
将-Xms
选项设置为512m
不会导致我的应用程序512M
在启动后真正占用物理内存。我想这与现代OS虚拟内存管理和惰性页面分配有关。(我注意到,在Linux上由top或Windows上的任务管理器报告的初始使用的内存设置-Xms
为to
512M
或to 64M
不会改变)
有人可以帮助我了解此Xms
选项的影响,还是可以指向帮助我了解此选项的链接?
提前致谢
马努
总结在链接之后找到的信息:JVM分配了-
Xms指定的数量,但是OS通常直到需要它们时才分配实际页面。因此,JVM按照Xms的指定分配虚拟内存,但仅根据需要分配物理内存。
您可以通过使用Sysinternals的Process Explorer而不是Windows上的任务管理器来查看此信息。
因此,使用-Xms64M和-
Xms512M之间确实存在差异。但是我认为最重要的区别是您已经指出的区别:如果您确实需要512MB但仅以64MB开头,则垃圾收集器将更频繁地运行。
我有以下代码: 您可以看到每个操作分配5M。当我设置时,它无一例外地成功运行,而当时,它会引发异常。有人能解释一下为什么吗?我在Windows 7、64bit、Eclipse 4.3下。以下代码是相同的结果:
我来自C/C++背景,在这里一个进程内存分为: null 我想把我的注意力集中在这一点上,当我阅读JVM中的堆和堆栈时,我们是在谈论堆栈和堆的概念吗?并且整个JVM的实际内存驻留在堆上(这里指的是堆的C++概念)?
问题内容: 每当加载一个类时,什么存储在堆中以及什么存储在堆栈中? 线程也驻留在哪里? 问题答案: 引用类型在堆中。 任何原始类型的数据和对堆上值(方法的参数/局部变量)的引用都在堆栈上。 每个线程都有自己的堆栈。 应用程序中的所有线程共享同一堆。
当抛出与堆空间不足相关的异常时,我增加了java Xmx内存限制。但是,我目前正在经历一个很长的执行时间,可能与内存相关,但我还没有看到抛出的异常。 我想知道是什么导致了长的执行时间。JVM是否将堆交换到磁盘? 我正在使用HotSpot 1.6.0更新34。
我们Java开发人员有时会使用来确保我们为每个特定于线程的堆栈提供了1MB的空间。现在,我经常感到困惑,JVM从哪里借用了1MB,从堆或系统内存中借用,或者Java为线程分配任何特定的内存。你能帮我理解一下吗? 此外,我们是否有一个可视化(插件)运行时工具,可以以可理解的方式显示堆和堆栈的内容? 提前感谢。
我是分析Java记忆问题的新手。所以请原谅我这个问题看起来很天真 我在运行应用程序时设置了以下JVM参数: 我正在使用visualVM监控使用情况:以下是我看到的 问题是,即使应用程序没有接收任何要处理的数据,使用的内存也不会下降。当应用程序启动时,使用的空间开始变小(大约1GB),但随着应用程序的运行而增加。然后用过的记忆永远不会消失。我的问题是,为什么即使应用程序中没有发生重大处理,使用的堆内