Java 的并行收集 GC 对多线程环境的优化程度如何?我编写了一些多线程 Jython 代码,大部分时间都用于调用 Java 库。根据我运行程序时使用的选项,库调用要么在后台进行大量分配,要么几乎不进行分配。当我使用需要大量堆分配的选项时,我无法让代码扩展到超过 6 个内核。当我使用不需要大量分配的选项时,它至少可以扩展到 20。这与 GC 瓶颈相关的可能性有多大,因为我使用的是 Sun VM、并行 GC 和 Jython作为我的胶水语言?
编辑:澄清一下,我不一定会想到对 Java 老手来说显而易见的东西,因为我几乎从不使用 Java/JVM 语言。我的大部分编程都是用 D 和 Python 的旗舰 CPython 实现完成的。我正在将 JVM 和 Jython 用于一个小型的一次性项目 b/c 我需要访问 Java 库。
最佳答案
由于您的问题是关于 GC 瓶颈的:您可以通过打开 GC 日志记录并检查日志来消除这种可能性 - 如果有大量 GC 事件且暂停时间较长,您可以证实/否定这一理论。 (但是,在您描述的情况下,我猜这不是 GC 问题)。
关于Java GC 线程瓶颈在实践中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3390531/