例如,我将-Xmx设置为40G。我希望我的java处理器不会使用超过40G。
我的程序与cms gc配合得很好。
但当我使用相同的内存(甚至多15%的内存)切换到G1 gc时。
它总是被杀人凶手杀死。
我发现了这样一篇文章:为什么我的Java进程比Xmx消耗更多的内存?
它表示:
G1 is especially known for its
excessive appetite for additional memory, so be aware of this.
所以我想知道,如何限制g1 gc使用的内存,以及为什么g1使用这么多额外的内存
你不能限制G1需要使用什么。如果可以的话——你可能会破坏一切,或者死于内存堆不足错误,因为G1没有资源来正常工作。解释这个算法为什么需要使用额外的内存并不简单。它至少需要内存来存储卡表
和记忆集
,原因如下。它需要内存来存储SATB
队列,这些是一些数据结构,当GC循环处于活动状态时,“拦截”堆写入和读取。我敢打赌还有更多。通常,如果您想要并发性(以便应用程序在GC循环处于活动状态时运行),则需要提供更多内存。
您提到的文章(为什么我的Java进程比Xmx消耗更多内存?)清楚地概述了它。
Java进程需要内存来完成以下几件事:
另一个问题是,某些JVM内存不被算作permgen内存,无法控制。
因此,如果您想将Java应用程序限制在40 GB,您必须考虑所有类型的内存。从较小的值开始,比如:
-Xmx30g -XX:MaxPermSize=1g -Xss1m
然后观察进程的内存使用情况,如果进程安全地远离目标40GB,则增加Xmx
。
我正在使用框架用iPhone摄像头捕捉视频,我的代码: 在之前,一切都很顺利,内存被限制在3M,但在之后,内存使用量每秒增加0.06M,几分钟后,应用程序会因为内存警告而崩溃。似乎占用了太多内存,并且可能存在内存泄漏问题。 那么如何减少内存使用量呢? iOS版本:7.1.1
嗨,我对java编程还比较陌生。我编写的下面的程序似乎占用了很多内存(大约240 MB,正常吗?-我不这么认为!)请建议一些方法来优化这个程序,以便减少内存存储。 程序-- 代码-
如何用QT3D画线?如何删除画好的线条?我发现下面的代码会占用太多的内存,如果你画很多线,尽管它可以工作。此方法只为绘制一条线分配了太多的存储空间,并且不会释放这些存储空间。如果你使用删除指针,那么它崩溃了。如何解决这个问题?
MySQLdump和上传过程花费了太长的时间(~8小时)来完成整个过程。 我正在将活动数据库转储到mysqldump.tar文件和几乎3GB。当我加载到新的数据库,它需要6-8小时来完成这个过程(上传到新的数据库)。 我要完成这个过程,推荐的解决方案是什么?
我正在我的SQL中使用一个查询。首先我用 我该怎么做才能让它快过2秒