当前位置: 首页 > 面试题库 >

客户端的最佳垃圾收集设置是什么?

蒋联
2023-03-14
问题内容

最近的JVM有很多用于垃圾收集的XX参数(例如,请参见此处),但是哪些选项可以使客户端Swing应用程序真正更好地执行?

我应该注意到,让客户端Java应用程序真正困扰我的一件事是世界级垃圾回收的大量延迟。在Intelli-J IDEA中,我看到它进行了三分钟或更长时间。

编辑:感谢您的所有答复。只是为了报告一下,我使用了此处建议的设置,将IDEA的CMS垃圾收集器(这是大多数阅读此问题的每个人都熟悉的应用程序类型的一个很好的通用参考)。我还设置了-
XX:+ StringCache来查看它是否会减少内存需求。

通常,观察到的是正常运行性能不会降低到您可以注意到它的程度。使用“字符串缓存”选项可以减少 大量
内存,但是CMS方法并不彻底,最终需要停止世界垃圾收集周期(返回三分钟的等待时间)以清除内存(一次运行400MB)。

但是,鉴于减少的内存占用量,我也许可以只放置较小的最大内存量,这将使世界收藏集的大小保持较小。

IDEA 8.1.4随JDK
1.6.0_12一起提供,因此我尚未测试G1。另外,我的机器只有2个内核,因此G1方法实际上并不会最大化。是时候给老板一个更好的机器了;)。


问题答案:

这个问题没有唯一的答案,这在很大程度上取决于您的应用程序在做什么以及它如何管理对象。也许看看垃圾收集是如何工作的,以及并行和并发垃圾收集器以了解各种选项。

然后,查看Java SE 6 HotSpot
[tm]虚拟机垃圾收集优化
文档,该文档扩展了在5.0的Java虚拟机文档中的“
优化垃圾收集”中引入的Java SE
6的GC调试概念和技术。

如果要使垃圾收集暂停一会儿,则并发收集器可能是正确的方向,因为它可以同时执行大部分工作(即,在应用程序仍在运行时)。但是,找到最佳设置将需要进行概要分析(考虑测量GC吞吐量,最大和平均暂停时间,完整GC的频率及其持续时间)。

(编辑:阅读过OP的评论后,我认为从性能大师Kirk Pepperdine
那里阅读有关JVM堆调优的建议,不要用手指了!)



 类似资料:
  • Kubernetes 垃圾收集器的角色是删除指定的对象,这些对象曾经有但以后不再拥有 Owner 了。 注意:垃圾收集是 beta 特性,在 Kubernetes 1.4 及以上版本默认启用。 Owner 和 Dependent 一些 Kubernetes 对象是其它一些的 Owner。例如,一个 ReplicaSet 是一组 Pod 的 Owner。具有 Owner 的对象被称为是 Owner

  • 问题内容: 我是Java新手,对Java中的垃圾收集器感到困惑。它实际上是做什么的,什么时候生效。请描述Java中垃圾收集器的一些属性。 问题答案: 该垃圾收集器是运行在一个程序的Java虚拟机,其摆脱其未使用的Java应用程序了对象。它是自动内存管理的一种形式。 当典型的Java应用程序运行时,它正在创建新的对象,例如和,但是在一段时间之后,这些对象将不再使用。例如,看下面的代码: 在上面的代码

  • 本文向大家介绍Java垃圾收集,包括了Java垃圾收集的使用技巧和注意事项,需要的朋友参考一下 示例 C ++方法-新增和删除 在像C ++这样的语言中,应用程序负责管理动态分配的内存所使用的内存。当使用new运算符在C ++堆中创建对象时,需要相应地使用delete运算符来处置该对象: 如果程序忘记了delete一个对象而只是“忘记”了该对象,则关联的内存将丢失给应用程序。这种情况的术语是内存泄

  • JavaScript 具有自动垃圾收集机制,也就是说,执行环境会负责管理代码执行过程中使用的内存。 而在C 和C++之类的语言中,开发人员的一项基本任务就是手工跟踪内存的使用情况,这是造成许多问题的一个根源。在编写JavaScript 程序时,开发人员不用再关心内存使用问题,所需内存的分配以及无用内存的回收完全实现了自动管理。这种垃圾收集机制的原理其实很简单:找出那些不再继续使用的变量,然后释放其

  • 问题内容: 是什么决定了垃圾收集器何时真正收集?它是在一定时间之后还是在一定数量的内存用完之后发生的吗?还是还有其他因素? 问题答案: 它在确定是时候运行时运行。在世代垃圾收集器中,一种常见的策略是在第0代内存分配失败时运行收集器。也就是说,每次你分配一小块内存(大块通常直接放置在“旧”代中)时,系统都会检查gen-0堆中是否有足够的可用空间,如果没有,则运行GC释放空间以使分配成功。然后将旧数据

  • 问题内容: 什么是JavaScript垃圾回收?为了编写更好的代码,对于Web程序员来说,了解JavaScript垃圾回收有什么重要意义? 问题答案: 从该页面引用: JScript使用了非世代的标记清除垃圾收集器。它是这样的: 每个“范围内”的变量都称为“清除剂”。清道夫可以指数字,对象,字符串等。我们维护一个清道夫列表- 变量进入作用域时将移入scav列表,超出范围时将其移出scav列表。 垃