当抛出与堆空间不足相关的异常时,我增加了java Xmx内存限制。但是,我目前正在经历一个很长的执行时间,可能与内存相关,但我还没有看到抛出的异常。
我想知道是什么导致了长的执行时间。JVM是否将堆交换到磁盘?
我正在使用HotSpot 1.6.0更新34。
更大堆的一个可能后果是GC时间增加——JVM必须分析更大的空间,因此需要更长的时间——特别是在停止世界GC的情况下。
你能把你的问题具体点吗?
您使用的堆大小是多少?你看到的持续时间是多少?应用程序中对象的使用模式是什么?例如,一些长寿命的物体,或许多短命的物体。
JVM不会交换到磁盘,不会。操作系统可能会这样做。您可以通过检查进程上的操作系统统计信息来检测到这一点。
随着JVM内存耗尽,垃圾收集被触发的频率越来越高。每次运行释放更少的内存,进一步提高GC的速率。最终,在GC中花费了大量时间,这可能是您看到的速度减慢。
JVM不会等到释放了0个字节后抛出OutOfMemoryError。当GC占用的时间与释放的字节数相比太长时,它实际上会放弃。
我有这些jvm参数集
我来自C/C++背景,在这里一个进程内存分为: null 我想把我的注意力集中在这一点上,当我阅读JVM中的堆和堆栈时,我们是在谈论堆栈和堆的概念吗?并且整个JVM的实际内存驻留在堆上(这里指的是堆的C++概念)?
虚拟机: 4CPU 10GB RAM 10GB交换 Java1.7-Xms=-Xmx=6144m Tomcat 7 我们观察到JVM有一种非常奇怪的行为。JVm驻留内存开始收缩,交换使用率飙升至50%以上。 请参阅下面来自监控工具的统计数据。 http://i44.tinypic.com/206n6sp.jpg http://i44.tinypic.com/m99hl0.jpg 任何能理解这一点的
问题内容: 每当加载一个类时,什么存储在堆中以及什么存储在堆栈中? 线程也驻留在哪里? 问题答案: 引用类型在堆中。 任何原始类型的数据和对堆上值(方法的参数/局部变量)的引用都在堆栈上。 每个线程都有自己的堆栈。 应用程序中的所有线程共享同一堆。
问题内容: 在阅读有关该主题的已问问题和大量谷歌搜索之后,我仍然无法清楚了解 -Xms 选项 我的问题是:和之间有什么区别? 现在,我有以下答案: 唯一的区别是在应用程序运行期间将运行的垃圾回收数量和内存分配数量。我对吗 ? 这是我获得此答案的原因: 将选项设置为不会导致我的应用程序在启动后真正占用物理内存。我想这与现代OS虚拟内存管理和惰性页面分配有关。(我注意到,在Linux上由top或Win