草庐IT

java - 使用并发标记扫描 GC 收集器?

coder 2024-03-18 原文

这个问题是基于我对 link 的 Java 垃圾收集器部分的理解 看起来 jvm 默认情况下在 Windows 7 上使用“Parallel GC”,正如我确认的那样 -XX:+PrintCommandLineFlags -version。这篇文章还说

The parallel garbage collector uses multiple threads to perform the young generation garbage collection. This collector should be used when a lot of work need to be done and long pauses are acceptable

我不确定并行 GC 使用哪个收集器来收集永久空间?

我也想不出可以接受长时间停顿的应用程序(会导致响应速度降低)。任何人都希望减少 GC 的暂停时间并使应用尽可能地响应。

然后我阅读了Concurrent Mark Sweep (CMS) Collector,它收集了tenured generation

CMS 表示它需要低暂停时间并且可以与垃圾回收共享资源

我的问题是最不应该 的 Web 应用程序使用 Concurrent Mark Sweep (CMS) Collector 是因为它的响应能力。? 决定,但在通过此链接后,我觉得我应该将默认 GC 类型更改为并发标记扫描 (CMS) 收集器。有什么想法/见解吗?

此外,我认为如果我们同时使用 CMS 收集器和并行收集器,应用程序可能是最好的,其中 CMS 用于老年代和并行 fpr 年轻一代

最佳答案

i am not sure which collector is used for tenured space collection by Parallel GC?

离开this页面,如果你使用并行 GC,则并行清除收集器用于年轻代,并行标记/清除收集器用于老年代(也称为老一代)。所以我猜答案是“Parallel GC 用于 Parallel GC 的永久空间收集”。有点循环陈述,但我认为这是有道理的。

Also i could not think of applications where long pauses are acceptable(will cause less responsiveness). Anyone would like to less pauses for GC and make app as responsive as it can.

“长时间停顿”是相对的,是否可以接受取决于应用程序的类型及其用途。需要快速用户交互的应用程序(例如游戏)可能需要较短的暂停时间,而长时间运行的应用程序几乎没有用户交互(通宵批处理作业、可以运行几天的处理作业、可能运行很长时间的服务器)时间段等),或者不需要快速用户交互(文字处理器?但是谁用 Java 编写文字处理器?)几乎没有严格的暂停要求,所以暂停是好的那些。此外,暂停不是唯一要考虑的 GC 因素,因此即使暂停是可以的,也有其他原因会选择暂停时间较长的 GC。我会在下面进一步解释。

My question is should not most of web applications use Concurrent Mark Sweep (CMS) Collector because of its responsiveness.?

CMS 收集器有缺点。在你提到的文章中,有这一行:

Normally the concurrent low pause collector does not copy or compact the live objects. A garbage collection is done without moving the live objects.

所以没有堆压缩会导致堆碎片,这可能对性能有害。 This帖子指出了另一个缺点(我不确定这篇帖子到底有多可靠,但乍一看似乎相当不错):

A more important disadvantage of the CMS collector is related to the fact that it cannot be started when the Old generation heap is full. Once the Old generation is full, it is too late for the CMS and it must then fall back to the usual stop-the-world strategy (announced by a “concurrent mode failure” in the GC log).

...

The biggest disadvantage of the CMS, however, is related to the fact that it does not compact the Old generation heap. It therefore carries the risk of heap fragmentation and severe operations degradation over time.

...

It is obvious that with these settings the JVM worked well for almost 14 hours under loadtest conditions (in production and with lower load this treacherously benign period may last much longer). Then suddenly there were very long GC pauses which actually stopped the JVM for about half of the remaining time. There were not only attempts to clean up the mess in the Old generation which lasted more than 10 seconds but even New generation GC pauses were in the seconds range because the collector spent a lot of time searching for space in the Old generation when it tried to promote objects from new to Old generation.

博文中有更多详细信息,您可能应该阅读这些内容,因为这里的引述之外还有很多内容以及一些精彩的演示。但要指出的是,CMS 收集器并不是一个通用的收集器。它也有它的缺点,这可能会导致程序员选择不同的收集器。对于短时间运行的应用程序,将它用作默认值可能没问题,但对于长时间运行的应用程序,这种行为将非常糟糕...

Further i think application can be best if we use CMS Collector and parallel collector together where CMS is used for old generation and parallel fpr younger generation

当您将 -XX:+UseConcMarkSweepGC 参数传递给您的 VM 时,这实际上是默认模式。但如上所述,您可能真的需要花一些时间来考虑要使用哪种收集器。在不考虑您的用例的情况下选择收集器可能不是一个好主意。 (旁注:我以为我从 Oracle 看到了一些关于如何决定使用什么 GC 的文档,但我再也找不到了...)

此外,如果您有 Java 7u4 或更高版本,您可能需要考虑 Shiny 的新 G1 收集器。它应该是 CMS 收集器的替代品。

关于java - 使用并发标记扫描 GC 收集器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24593300/

有关java - 使用并发标记扫描 GC 收集器?的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  5. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  6. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  7. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  8. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  9. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  10. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

随机推荐