Java 6 内存使用过多

2024-05-04

对于大型应用程序,Java 6 消耗的内存是否比您预期的要多?

我有一个已经开发多年的应用程序,到目前为止,在我的特定测试配置中,该应用程序占用了大约 30-40 MB 的空间;现在,对于 Java 6u10 和 11,活动时需要数百个时间。它跳动很多,在 50M 到 200M 之间的任何地方,当它空闲时,它doesGC 并直接删除内存。此外,它还会产生数百万个页面错误。所有这些都可以通过 Windows 任务管理器观察到。

因此,我在我的分析器 (jProfiler) 下运行它并使用 jVisualVM,它们都表明,即使在完全活跃地执行负载测试周期时,通常的中等堆和永久代使用量合计约为 30M。

所以我很迷惑!它不仅仅是从 Windows 虚拟内存池请求更多内存 - 这显示为 200M“内存使用量”。

澄清:我想完全澄清这一点 - 在 Java VisualVM 的 18 小时内观察到,类堆和永久代堆一直非常稳定。分配的易失性堆(eden 和 tenured)保持在 16MB 不变(在前几分钟就达到了),并且该内存的使用量以完美的模式波动,从 8MB 均匀增长到 16MB,此时 GC 会启动将其降回 8MB。在这 18 小时内,自从我进行压力测试以来,系统一直处于恒定的最大负载下。这种行为是完美 and 始终如一地可重复,在多次运行中可见。唯一的异常是,当这种情况发生时,通过任务管理器观察到的从 Windows 获取的内存在 64MB 到 900+MB 之间波动。

2008-12-18 更新:我已经使用 -Xms16M -Xmx16M 运行程序,没有任何明显的不利影响 - 性能很好,总运行时间大致相同。但短期内内存使用仍达到180M左右的峰值。

2009-01-21 更新:看来答案可能在于线程数 - 请参阅下面我的答案。


编辑:我的意思是字面上数百万个页面错误 - 在 30M+ 的区域。

编辑:我有一台4G机器,所以200M在这方面并不重要。


为了回应 Ran 答案评论中的讨论,这里有一个测试用例,证明 JVMwill在某些情况下将内存释放回操作系统:

public class FreeTest
{
    public static void main(String[] args) throws Exception
    {
        byte[][] blob = new byte[60][1024*1024];
        for(int i=0; i<blob.length; i++)
        {
            Thread.sleep(500);
            System.out.println("freeing block "+i);
            blob[i] = null;
            System.gc();
        }
    }
}

我发现,在 Java 1.4 和 Java 6 JVM(来自 Sun)上,当计数达到 40 左右时,JVM 进程的大小就会减小。

您甚至可以使用以下命令调整确切的行为-XX:MaxHeapFreeRatio 和 -XX:MinHeapFreeRatio 选项 http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp#PerformanceTuning-- 该页面上的一些选项也可能有助于回答原始问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 6 内存使用过多 的相关文章

随机推荐

  • 查找二维空间中圆内的所有点

    我表示我的 2D 空间 考虑一个窗口 其中每个像素显示为 2D 数组中的一个单元格 即 100x100 的窗口由相同维度的数组表示 现在给定窗口中的一个点 如果我画一个半径的圆r 我想找到该圆圈中的所有点 我想我应该检查半径周围方形区域中的
  • request.getScheme() 返回 http 而不是在 java 中返回 https

    function demo request response request getScheme is returning http instead of returning https System out println request
  • JavaScript blob 编码为 UTF-8 而不是 ANSI

    我使用 JavaScript blob 创建一个 FDF 文件 该文件打开并填充本地存储的 PDF 但是 本地存储的 PDF 的文件路径包含重音字符 并且我无法编辑文件夹名称 当文件夹路径不包含重音符号时 此代码有效 并且如果我在记事本中打
  • 在生产 Web 服务器上安装 Visual Studio 的原因

    有人将 Visual Studio 安装在 Web 服务器上 其唯一目的是为传入请求提供服务 是否有正当理由 说真的 有人可能这样做有什么特殊原因吗 一种可能的用途是连接到 Web 服务器并调试某种错误或内存泄漏 这些错误或内存泄漏已被证明
  • Android:图库视图已被弃用?

    我一直在使用图库控件来显示照片 但在滑动照片时遇到问题 我需要一直滑动才能更改照片 否则它会弹回到上一张照片 上网一查 听说画廊已经被废弃了 下一个可以与画廊控件执行相同操作的控件是什么 Use a Gridview http develo
  • Groovy 中的嵌套“each”循环

    需要有关 groovy 中嵌套循环语法的指导 如何使用迭代器在这里打印 a name的值 b name的值 的值 List a a each print it name List b something b each print value
  • 用以前的非缺失值填充“缺失”值的有效方法是什么?

    我有一个向量 using Missings v allowmissing rand 100 v rand 100 lt 0 1 missing 最好的填充方式是什么v与最后一个非缺失值 现在 for i val in enumerate v
  • pandas:qcut错误:ValueError:Bin边缘必须是唯一的:

    我正在尝试使用 pandas qcut 方法计算两列的百分位数 如下所示 my df float col quantile pd qcut my df float col 100 labels False my df int col qua
  • Visual Studio 项目的依赖关系图

    我目前正在将一个大型解决方案 约 70 个项目 从 VS 2005 NET 2 0 迁移到 VS 2008 NET 3 5 目前我有 VS 2008 NET 2 0 问题是我需要将项目一一移动到新的 NET 框架 确保没有 NET 2 0
  • 在 iOS 9 上,所有 uitableviewcell 的高度都变成一行

    我有一个带有多个 UITableView 控制器的应用程序 在 iOS 8 x 上运行 每个表格中所有单元格的高度将调整大小以适合单元格的内容 所有单元格仅包含纯文本的 UILabel 现在 在 iOS 9 上运行时 每个表格上的每个单元格
  • Java - 线程“主”中的异常 java.util.ConcurrentModificationException

    有什么办法可以修改HashMap迭代特定键时的值 下面给出一个示例程序 public static void main String args HashMap
  • javax.management.InstanceNotFoundException: org.springframework.boot:type=Admin,name=SpringApplication

    我开发了一个 Spring boot 应用程序 该应用程序的功能运行良好 但是 在启动时 我多次看到以下异常 当我几周前运行相同的应用程序时 我没有看到任何此类异常 此后代码库没有改变 我想知道它是否与环境有关 我发帖的原因是我想更多地了解
  • 能够删除特定约束的增量 SMT 求解器

    是否有增量 SMT 求解器或用于某些增量 SMT 求解器的 API 我可以在其中增量添加约束 在其中我可以通过某个标签 名称唯一地标识每个约束 我想唯一地标识约束的原因是这样我可以稍后通过指定标签 名称来删除它们 需要放弃约束是因为我之前的
  • 对 Qsort 和指针感到困惑

    我是一名 C 初学者程序员 想要习惯术语和指针 我在寻找对数值数组元素进行排序的方法时发现了以下工作函数原型 该函数是 qsort 它使用指针 现在我的理解是 const 一词确保值 a 和 b 不变 但指针不变 如果我在这里错了 请纠正我
  • Xcode 4.6.2 应用程序每秒运行一次就会崩溃

    Xcode 4 6 2 似乎有很多 bug 当我第二次跑步时any项目我在第一秒内就发生 SIGABRT 崩溃 我完全删除了 Xcode 并重新安装 是的 我尝试关闭然后再次打开 我还删除了命令行工具和模拟器 但这也没有帮助 好的 我找到了
  • 使用 Volley 时出现 SSL 异常

    我在 Android 中使用 Volley 来执行我的应用程序请求 不幸的是 我收到以下错误 com android volley NoConnectionError javax net ssl SSLHandshakeException
  • #pragma 指令是否依赖于编译器?

    我知道并且我用过 pragma startup and pragma exit之前 但当我执行以下代码时 它仅输出In main 谁能告诉我这里发生了什么事 include
  • XPCOM是什么? XPCOM 与 COM?

    我无法理解 XPCOM 它与 COM 有什么不同 是什么让它跨平台 它是一个包含一组可用于完成某些工作的库的框架吗 另外 组件对象模型是否意味着每个功能都在组件中实现 因此我们可以在不知道详细实现的情况下使用它 你能帮我理解这一点吗 谢谢
  • 为什么向列表<>添加新值会覆盖列表<>中以前的值

    我本质上是试图将多个项目添加到列表中 但最后所有项目的值都等于最后一个项目 public class Tag public string TagName get set List
  • Java 6 内存使用过多

    对于大型应用程序 Java 6 消耗的内存是否比您预期的要多 我有一个已经开发多年的应用程序 到目前为止 在我的特定测试配置中 该应用程序占用了大约 30 40 MB 的空间 现在 对于 Java 6u10 和 11 活动时需要数百个时间