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

Java并发和并行GC

徐高韵
2023-03-14
问题内容

本文在这里建议使用-XX:+UseParNewGC“为了使与并发GC并行年轻一代的GC”。

我的困惑是,为了同时启用并行和并发GC,我应该

  • 使用-XX:+UseParNewGC
  • 同时使用-XX:+UseParNewGC -XX:+UseConcMarkSweepGC

聚苯乙烯

我正在使用JVM 6。


问题答案:

由于链接的文档是针对1.4.2 VM的,因此我假设您正在使用(JVM 5和6的行为有所不同)。

从http://java.sun.com/docs/hotspot/gc1.4.2/

如果在命令行上使用了-XX:+ UseConcMarkSweepGC,则如果未在命令行上另外明确设置UseUseNewNew标志,则还将其设置为true

因此,答案是您只需要使用-XX:+ UseConcMarkSweepGC,它将启用并行年轻代收集器与并发收集器。

编辑:对于Java 6,相同的标志(-XX:+
UseConcMarkSweepGC)启用并发收集器。所需的收集器选择取决于几件事,您应该测试不同的配置。但是有一些非常通用的准则。如果只有一个处理器,一个单线程计算机,则应该使用串行收集器(某些配置的默认值,可以使用-
XX:+ UseSerialGC显式启用)。对于工作量基本上受CPU约束的多处理器计算机,请使用并行收集器。如果使用-
server标志,则默认情况下启用此功能,也可以使用-XX:+
UseParallelGC显式启用它。如果您希望缩短GC暂停时间,但会浪费更多的CPU总时间,而您拥有多个CPU,则可以使用并发收集器(-XX:+
UseConcMarkSweepGC)。




 类似资料:
  • 在讲解并发概念时,总会涉及另外一个概念并行。下面让我们来了解并发和并行之间的区别。 并发(concurrency):把任务在不同的时间点交给处理器进行处理。在同一时间点,任务并不会同时运行。 并行(parallelism):把每一个任务分配给每一个处理器独立完成。在同一时间点,任务一定是同时运行。 并发不是并行。并行是让不同的代码片段同时在不同的物理处理器上执行。并行的关键是同时做很多事情,而并发

  • 14.1.1 什么是协程 一个应用程序是运行在机器上的一个进程;进程是一个运行在自己内存地址空间里的独立执行体。一个进程由一个或多个操作系统线程组成,这些线程其实是共享同一个内存地址空间的一起工作的执行体。几乎所有'正式'的程序都是多线程的,以便让用户或计算机不必等待,或者能够同时服务多个请求(如 Web 服务器),或增加性能和吞吐量(例如,通过对不同的数据集并行执行代码)。一个并发程序可以在一个

  • 问题内容: 假设我有一堂课 我试图按班上所有领域分组。如何在JAVA 8中使用并行流来转换 映射的键是类中每个字段的值。JAVA 8以下示例将单个字段分组,如何将一个类的所有字段归为一个Map? 问题答案: 您可以使用的静态工厂方法来实现: 正如Holger在评论中所建议的那样,以下方法可能比上述方法更可取: 它使用的重载方法的行为与我上面建议的语句相同。

  • 并发(Concurrently)和并行(Parallel)是两个不同的概念。借用Go创始人Rob Pike的说法,并发不是并行,并发更好。并发是一共要处理(deal with)很多事情,并行是一次可以做(do)多少事情。 举个简单的例子,华罗庚泡茶,必须有烧水、洗杯子、拿茶叶等步骤。现在我们想尽快做完这件事,也就是“一共要处理很多事情”,有很多方法可以实现并发,例如请多个人同时做,这就是并行。并行

  • 众所周知,AWS lambda可能会重用早期创建的处理程序对象,它确实做到了这一点(参见常见问题解答): 问:AWS Lambda 是否会重用函数实例? 为了提高性能,AWS Lambda可能会选择保留您的函数实例并重用它来服务后续请求,而不是创建新副本。您的代码不应假设这种情况总是会发生。 问题是关于并发。如果我有一个处理程序的类,比如: 那么,在这里访问和使用对象变量是否是线程安全的? 换句话

  • 考虑以下方法: 尤其是这两条线: 如果线程A进入synchronized块并获得当前对象的锁,这是否意味着该对象的实例属性的状态不能被synchronized块之外的其他线程改变(当线程A在synchronized块中时)? 例如,线程A执行了第1行- 消息是非静态同步列表 UPD:更新的方法,可能的解决方案: addLock - AtomicBoolean,默认为false