java - 如何更改垃圾收集线程的优先级?

标签 java multithreading performance garbage-collection

此问题与 Is it possible to change the priority of garbage Collector thread? 重复

这是一个老问题,从那以后事情可能发生了很大变化。它也没有澄清一切。

是否可以更改 GC 线程的优先级?我见过具有不同 GC 线程优先级的线程转储。如果我们不能改变它,那怎么会发生呢?此外,我了解到高频交易平台希望将 GC 线程优先级保持在非常低的水平,以便主线程大部分时间都在运行,并且“停止世界”事件不会经常发生。

最佳答案

Is it possible to change GC thread priority?

我真的认为这是错误的问题。您不想影响这种关键后台操作的优先级。根据线程架构,这可能会使 GC 线程饿死并导致 JVM 崩溃。

我认为减少 GC 系统使用的 CPU 数量的正确方法是减少对象带宽——减少正在创建和回收的对象的数量。您应该使用内存分析器来查看系统的哪些部分消耗了太多内存或使用了太多临时对象。

有很多方法可以降低对象带宽:

  • 在适当的时候更改为使用可变对象(即对象不在线程之间共享的地方)
  • 清理和重复使用集合,而不是重建它们
  • 使用 StringBuilder 而不是串行 String 追加
  • 使用 slf4j 类型的 {} 日志记录
  • 可能使用ThreadLocal来存储可以重置和重用的状态对象
  • 等..

有很多方法可以减少代码的对象带宽,与使用后台系统线程的线程优先级相比,这最终会对 JVM 的内存性能产生更大的影响。

请参阅下面@Voo 的评论以获得对此的一个很好的警告。

关于java - 如何更改垃圾收集线程的优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21206655/

相关文章:

java - 如何在测试启动之前修改 testNG DataProvider 数组对象(在 Saucelabs 中命名测试)

c# - 您如何通知父线程所有子线程都已终止?

sql - 数据库: Are "TEXT" fields less efficient than "varchar"?

java - 如何使用 MultiValueMap 作为参数创建 URI/URL?

java - 如何使变量等于 Java 文本文件中的随机行?

Java-同步

c++ - 在 C++ 代码中使用纯 C 库是否会导致性能下降/损失?

PHP 脚本使服务器过载

JAVA嵌套循环用法

c++ - 为什么我不能使用 std::thread 通过引用发送对象