问题标签 [heap-size]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - GC 堆大小和程序内存开销
我试图弄清楚我的应用程序发生了什么。
问题:
GC 调用并没有尽可能地减少未使用的堆大小,但它应该是因为我使用的是串行 GC(或 UseParNewGC)和积极的堆比率。
程序使用中的内存总是比当前使用和未使用的堆大很多,我认为即使包含其他 JVM 内存 + 堆也太大了
使用的命令行:
尝试使用 UseParNewGC,结果相同
系统:Win7 SP1 4GB RAM + 4GB 交换文件 2.99GHZ Java 1.7 + JDK 1.7
请看图片让事情更清楚:http: //i.stack.imgur.com/i3sxw.jpg
java - 增加 Java 小程序的堆大小
我将我的一个程序从一个独立的 Java 应用程序移植到一个 Java 小程序。该应用程序处理大型图像文件,因此我需要更多堆空间,因此将它们加载到内存中。然后将图像用作我使用 JOGL 的 openGL 窗口中的纹理数据
该应用程序在 Eclipse 中运行良好(作为小程序以及独立),如果我将独立应用程序导出为可执行 jar。我在各种系统上进行了测试(带有 4 gig ram 的 Windows XP 32、带有 12 gig ram 的 Windows XP 64 和带有 4 和 8 gig ram 的 Windows 7 64 位)。
当我导出程序的小程序版本时出现问题。在我签署了 jar 并尝试在浏览器(经过测试的 Firefox 和 IE)中运行它之后,应用程序总是在上述 64 位机器上崩溃并出现 OutOfMemory 异常。
但是在 Windows XP 32 位机器上,经过一番摆弄后它可以工作,但我不知道为什么,因为我所做的只是尝试不同的解决方案,并且其中一个工作以某种方式工作,即使这种方式也会导致之前的尝试崩溃。
我尝试了四种增加堆空间的方法
在我尝试的html文件中:
这没有用。
然后我尝试通过带有 -Xmx1600M 参数的 Java 菜单(开始 -> 控制面板 -> Java 选项卡 -> Java 运行时环境设置)直接增加堆。这顶帽子也没什么影响。
之后,我使用了 Jogamp 的人提供的 jnlp 文件。我在那里添加了
在资源标签内。这最初也没有效果。
最后我添加了
在资源标签内,不知何故,经过几次尝试,我绕过了四种不同的解决方案并清除了它工作的小程序缓存(但仅在 32 位 WinXP 机器上)。
但是我没有成功尝试在 64 位机器上运行小程序,而且我完全不知道现在该做什么,因为经过一些研究,这四种方法似乎是唯一的一种。
提前感谢您的帮助。
我将添加两个 jnlp 文件和启动 applet 的 html 文件。
html:
AppletTest.jnlp:
JOGL.jnlp:
[编辑:]似乎我找到了导致问题的原因(但仍然没有解决方案)。如果我使用任何给定浏览器的 32 位版本启动小程序,浏览器将启动 32 位 jre,它无法处理 jnlp 文件中的 jvm 设置。
这真的很奇怪,因为在 32 位机器上调用 32 位 jvm 工作得很好。
如果我使用 64 位浏览器(如 IE 64 位版本或 Nightly Firefox 64 版本)启动小程序,则会调用“正确”的 jvm 并且它运行正常。
所以我想真正的问题是如何从 32 位浏览器启动 64 位 jvm(这甚至可能吗?)。
但是我写了一个小测试程序来重现错误。该程序将一个大图像存储在一个数组中。使用 32 位浏览器,您应该能够加载 2-3 张图像,直到出现 OutOfMemoryException。如果您想测试程序,您必须创建一个 jar 并在之后对其进行签名并将其命名为 SConfigTest.jar。
android - 仅在三星 Galaxy S3 上出现“OutOfMemory”异常
三星 Galaxy S3 在我的应用程序上几乎立即使用 32mb 堆大小,而在几乎任何其他 android 设备上它从 +- 5mb 开始(在 logcat 中看到这一点,如果需要,可以从两个不同的设备发送屏幕截图)。认为这是我的应用程序仅在 Galaxy s3 上因“OutOfMemory”异常而崩溃的原因,在 Galaxy Y Duos 和 Pocket 上完美运行。
任何有关为什么会发生这种情况的帮助/建议将不胜感激,谢谢。
tomcat - 在 catalina.bat 文件中增加堆大小的最佳方法
我在windows xp上有tomcat 6服务器,我通过控制台启动tomcat,即使用startup.bat。
AFAIKcatalina.bat
文件适用于 Windows,因此我正在更改 bat 文件以进行内存管理。我没有 tomcat 配置窗口。
现在我想增加它的堆大小所以我的问题是我应该扩展JAVA_OPTS
catalina.bat 文件中的现有文件,即
或者我应该在 catalina.bat 文件中创建新的环境变量,即
这是正确的方法吗?
请指导。
我可以在 Probe 中看到当前堆大小,但看不到现有的 perm 大小,那么 perm 大小的默认值是多少?
编辑:
以下参数有帮助吗?
android - Android VM 不允许我们分配 xx 字节
我正在开发一款安卓游戏。当我尝试使用 3 张图片作为背景时,问题就开始了。图片大小为 1280x720 像素,大小为 100kb。图像真的不是那么大,所以我有点困惑为什么它们会导致内存问题。
注意:屏幕分辨率为 800x400,因此我无法按照 android 开发人员的 建议将图像大小调整为 2它工作正常。
我分析了 DDMS 中的内存,奇怪的是我发现堆只有 3.5mb 大。如果我检查 rt.MaxMemory() 它说我每个应用程序有大约 25mb 的空间。
我想到的是,堆的“更新”速度不够快,无法容纳更大的照片/应用程序,因此尽管它很小,但它在加载图像之前就崩溃了。有没有办法手动设置堆大小,或者至少告诉它放大?
这是我加载图像的代码:
这是来自 LogCat 的确切错误:
编辑:现在您说位图使用“原始”图像大小而不是压缩是有道理的。经过一些研究,似乎在 android 2.2 和 2.3 上,位图没有存储在堆中,因此在加载图像后堆不会增加。
我还有一个问题。我们使用这 3 张图片作为背景。我们现在将在垂直方向调整它们的大小,但在水平方向我们仍然需要它们原样。所以图像仍将在 100x720 像素左右。我们需要 3 张图像的问题是,我们可以分别绘制它们并获得图层效果(我们可以在 2 张图像之间绘制一些东西)。用尽可能少的内存来实现这一点以获得理想效果的最佳方法是什么?
背景: 中间: 前景
注意:这只是静态背景,动画会在它们周围和它们之间发生。
java - -Xmx 的大值会推迟垃圾收集吗?
我有很多 JVM 在具有 32GB 物理内存和 32GB 虚拟内存的 Linux Redhat 上运行。这些 JVM 被配置为具有超过 32GB 的 Xmx 总值,并且可能让 Linux 使用了它的虚拟内存。
我的问题是,如果我指定的 Xmx 超过了所需的堆大小,它会延迟垃圾收集并因此分配比必要更多的堆大小吗?因此它将导致操作系统从其虚拟内存中分配内存,从而导致性能下降。
java - 尝试从结果集大小填充列表大约 12000 行再次执行操作大约 4 次,jvm 超出堆内存
我正在尝试使用包含大约 12000 条记录的数据库填充类型为 tableList 的数组列表,然后使用 struts 迭代器标记填充我的 jsp 页面,但是在一次又一次地执行此操作时,jvm 内存不足,正如我所见每次从我的页面调用此操作时,堆大小都会不断减小。我认为,每当创建此操作类的新实例时,列表空间都不会被释放。建议解决此问题。我也在运行 tableList.clear( ); 在类的构造函数中
android - Android 版本是否有最小堆大小?
许多帖子都谈到了 Android 堆大小,到目前为止,我发现最大堆大小的唯一共同点是它至少为 16MB,但这是自 API 3 以来的限制。为了使用更多内存,人们会建议使用 NDK 或任何超出“正常”Android 开发的东西。
是否有任何 Android 版本要求设备具有更大的堆大小,以便我可以开始假设更大的堆大小并停止在内存上如此便宜?
清单中是否还有关于大堆标志(来自 API 11 - 蜂窝)的要求,还是设备甚至可能忽略它的模糊请求?
只是 Android 硬件这些年来改进了很多,但即使设备现在有超过 1GB 的内存,我们仍然需要如此便宜的内存。奇怪的是,我们不能要求操作系统为我们提供特定数量的堆大小并承诺我们不会再使用这些。
java - Java -Xmx 命令没有给我预期的内存
我正在使用 java-Xmx60g
命令运行以下代码。
每个阵列应该是8.5GB左右,总共17GB。该机器总共有64GB,其中63GB “免费”。它打印DONE DECLARING RIVER HANDS 1
,表明它完成了第一个数组的声明。
但是我在线程“main” java.lang.OutOfMemoryError: Java heap space 在第二个数组的声明过程中得到了异常。我很困惑,因为我的理解是-Xmx60g
应该分配60GB,而数组只使用17GB。
在此先感谢您的帮助!
java - Eclipse Android 中的“java 堆大小”错误?
当我在工作 5-10 分钟后使用图形布局编辑器时,我收到错误“java heap size”。我试图增加 eclipse.ini 中的大小: -Xms512m -Xmx1024m 但它没有帮助。请告诉我谁遇到了这个问题以及如何解决?