如何缩小java堆空间? [复制]

2024-04-10

我有一个 Java 控制台应用程序,它使用 DOM 处理大型 xml 文件。基本上,它根据从数据库获取的数据创建 xml 文件。 现在,正如您猜测的那样,它使用了大量内存,但令我惊讶的是,它与错误代码无关,而是与“java 堆空间未缩小”有关。 我尝试使用以下 JVM 参数从 Eclipse 运行我的应用程序:

-Xmx700m -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20

我什至添加了

-XX:-UseSerialGC

as i found out that parallel GC ignores "MinHeap" and "MaxHeap" options. Even with all those options graph of my app's memory use looks like this: java app graph

正如您所看到的,在某一时刻,我的应用程序占用了约 400 MB 的堆空间,堆增长到约 650 MB,但几秒钟后(当 xml 生成完成时)我的应用程序的已用堆空间减少到 12MB,但是“堆大小” " 仍保持在 ~650 MB。我的内存需要 650 MB!这很奇怪,你不觉得吗?

**有没有办法强制 JVS 将可用堆大小缩小到当前已用堆的 150%?**例如,如果我的应用程序需要 15 MB 的 RAM,则当我的应用程序要求 400 MB 时,堆大小约为 20MB当我的应用程序完成繁重的操作时,堆会增长到约 600 MB,然后又回落到约 20 MB?


您可能应该使用并行收集并使用 -XX:-UseAdaptiveSizePolicy。文档适用于 Java 1.5,但我找不到更新的内容。

-XX:+UseAdaptiveSizePolicy 的实现默认使用 -XX:+UseParallelGC 垃圾收集器已更改为考虑三个 目标:

  • 期望的最大 GC 暂停目标
  • 期望的应用程序吞吐量目标
  • 最小占地面积

实施检查(按此顺序):

  1. 如果 GC 暂停时间大于暂停时间目标,则减少代大小以更好地实现目标。
  2. 如果满足暂停时间目标,则考虑应用程序的吞吐量目标。如果应用程序的吞吐量目标 没有得到满足,然后将世代的大小增加到 更好地实现目标。
  3. 如果暂停时间目标和吞吐量目标都得到满足,则减少代的大小以减少占用空间。

EDIT

根据OP的建议添加“-”。

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

如何缩小java堆空间? [复制] 的相关文章

随机推荐

  • 仅当重新初始化继承类中的实例变量时,PHP 中使用单例模式的类继承才有效。但为什么?

    我有一个带有单例函数的主类实例 和相关变量 实例 现在我创建几个子类并让主类继承 我没有重新定义单例函数和变量 因为继承很有用 不幸的是 每个实例都指向第一个子类 仅当在子类中 实例变量被初始化为null它有效 但为什么呢 有了关键词sta
  • JavaScript 中的 eval 如何改变调用上下文?

    JavaScript 的动态特性是 eval 改变调用上下文 这是什么意思 一些例子会更好 eval间接调用时确实会更改上下文 并将其更改为全局上下文 所有函数的默认上下文 var myObj a 1 function someFunc c
  • Bootstrap rtl(从右到左)输入组

    我正在用 RTL 语言和 Bootstrap 开发一个页面input group看起来像这样 显然border radius是在错误的一边 我可以用 CSS 修复它 但我想知道 Bootstrap 是否有本地方法来处理它 这是我的代码 di
  • java中距离的国际化

    Java 是否可以在没有任何额外库的情况下实现国际化距离 我的意思是可以用日期 时间 货币 数字来处理这个问题 我本来希望找到一个 NumberFormat getDistanceInstance 之类的东西 是否已经嵌入了类似的东西 或者
  • 更改分支不会丢弃本地更改

    所以 我有点困惑 我不太擅长 git 但我记得如果您所在的分支有未提交的更改 并且您尝试签出另一个分支 git 要么不让您这样做 要么会放弃您的更改 我还在 Chacon 和 Straub 所著的 Apress 的 Pro Git 书中检查
  • 按关系中的项目计数过滤结果

    假设我有这两个模型 def Client db Model id db Column db Integer primary key True invoices db relationship Invoice backref client d
  • 启动新活动时未调用 onCreateOptionsMenu

    My onCreateOptionsMenu仅在我的 MainActivity 中有效 当我尝试放置另一个时onCreateOptionsMenu在另一个活动中膨胀不同的菜单时 它不会显示我的菜单栏 请注意 我在两个活动中的设置完全相同 我
  • 当未指定默认命名空间时,函数“ ”必须带有前缀

    我们正在对表单变量进行一些奇怪的处理 不管怎样 我已经设法从请求中获取变量 这样我就可以做一些数据库的事情了 现在我想发回原样 以便可以用原始选择填充选择框 以下是选择字段的示例 JSP Condition Code nbsp
  • 使用自定义验证属性时收到错误消息

    我正在像这样使用 CustomValidationAttribute CustomValidation typeof MyValidator Validate ErrorMessage Foo 我的验证器包含这段代码 public clas
  • 如何使用 Angular-CLI 在控制台中显示日志

    我正在使用 angular cli 进行 webpack ng serve 构建成功 我明白了 NG Live Development Server 运行于http 本地主机 4200 http localhost 4200 哈希值 dd3
  • 在 Windows XP 上安装 JDK8 - advapi32.dll 错误

    我下载了JDK8 https jdk8 java net download htmlbuild b121 并在尝试安装时出现以下错误 the procedure entry point RegDeleteKeyExA could not b
  • 测试组件,这取决于路由参数

    我有一个关于在 angular2 中测试路由组件的问题 这是一个简单的组件 它依赖于带有参数的路由 foo 属性foo组件中的值将被设置为参数的值 import Component OnInit from angular core impo
  • TFS 构建定义 - 您可以将其添加到源代码管理中吗?

    我想将我的构建定义添加到 TFS 源代码管理中 有办法做到这一点吗 不完全是 不 如果您尝试跟踪构建定义的更改 您可以使用最新版本中的几个新命令Team Foundation 电动工具 http visualstudiogallery ms
  • 如何将 JTextField 限制为 x 个字符

    我必须限制 JTextField 中的字符数 我使用以下代码来执行此操作 但问题是我使用虚拟键盘将数据输入到 JTextField 所以偏移量始终设置为0 当我输入超过指定数量的字符时 它会重置该字段并从头开始执行 例如 如果我的限制是 3
  • 使用 ng-file-upload 和 Rails Carrierwave gem 上传多个文件

    我正在尝试结合ng 文件上传 and 载波上传多个文件 但服务器端的控制器只接收一个文件 所选文件的最后一项 客户端 参考 https github com danialfarid ng file upload usage html
  • 如何在 ejs 文件、nodeJS 应用程序中包含 JS 脚本?

    我正在做 NodeJS 教程开放课堂 https openclassrooms com courses des applications ultra rapides avec node js tp la todo list 我使用模板引擎e
  • 如何使用函数指针数组?

    我应该如何在 C 中使用函数指针数组 我怎样才能初始化它们 你有一个很好的例子这里 函数指针数组 http www java2s com Code C Function Arrayoffunctionpointer htm 与语法详细 ht
  • Webpack url 和文件加载器不适用于 Angular 2 所需的组件样式

    我正在使用 Angular 2 sass 和 webpack 构建一个应用程序 但我在每个组件内所需的 sass 文件上的 url 上遇到了麻烦 使用 require 它不会将这些文件复制到资产文件夹中 也不会将 url 修改为构建的 cs
  • 如何使用宏引用数据文件?

    我有各种 Stata 数据文件 它们位于不同的文件夹中 我也有一个单do使用这些文件的文件 一次一个 有没有办法使用宏来引用我的特定数据集do file 例如 local datafile C filepath mydata dta 我们的
  • 如何缩小java堆空间? [复制]

    这个问题在这里已经有答案了 我有一个 Java 控制台应用程序 它使用 DOM 处理大型 xml 文件 基本上 它根据从数据库获取的数据创建 xml 文件 现在 正如您猜测的那样 它使用了大量内存 但令我惊讶的是 它与错误代码无关 而是与