java - 惯用 scala 中 jvm 选项的指南

标签 java scala memory garbage-collection jvm

好的,我知道我应该对我的特定应用程序进行基准测试,等等,但是:

-Xmx 的默认 JVM 设置、默认垃圾收集器等,对于大多数典型的 Java 程序来说是合理的默认设置,并且可能不适合惯用的 Scala 代码(部分因为惯用的 Scala 会产生更多的“垃圾”)。

所以我正在寻找可供选择的建议。典型的 Scala 程序是否需要更高的 -Xmx 设置?某些 JVM 是否比其他 JVM 更适合 scala?与 Java 通常默认的相比,Scala 的不同垃圾收集器(-XX:+UseParallelGC vs XX:+UseConcMarkSweepGC)通常是更安全/更好/更快的猜测/赌注/默认值吗?对于 Scala 代码,我还应该特别考虑其他选项吗?以什么方式?

既然生成了更多的临时对象,那么默认情况下通常应该给“年轻”一代更多的空间吗?还是应该less 通常给年轻代空间以强制进行更频繁的垃圾回收?其他几代人呢?

当然,我仍然需要为我的特定应用程序调整这些东西,但通常我猜测,对于一个典型的 Scala 程序,我的起点可能与它在 Java 中的不同。

我确实发现自己在某些特定应用程序中遇到了内存不足错误和“达到 GC 开销限制”,或者只是让应用程序在垃圾收集暂停上花费了太多时间。在某种程度上,我可以通过调整选项来解决这些问题,但我想听听其他经验、一般原则和起点。

最佳答案

这是来自 scala 用户,因此纯粹基于个人经验。简而言之:我倾向于做很多 JVM 优化,因为我发现一点点努力可以让你走很长一段路,但我没有找到任何特定于 scala 的东西。

正如您所说,JVM 默认值充其量是合理的。设置适当的堆大小、选择正确的 GC、使用服务器 VM、调整生成大小等都可以提高 scala 应用程序的性能,就像它对普通 java 应用程序一样。这并不是说 java 和 scala 的配置文件是相同的,只是您的实际应用程序可能会产生更大的影响。

从理论上来说,我唯一希望关心的是新一代的大小,因为 scala 可能会产生更多的短期垃圾,而更大的新一代可能会在这里对 VM 有所帮助。

关于java - 惯用 scala 中 jvm 选项的指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12398046/

相关文章:

java - 无法引用另一个类中的方法

java - 可以在一个应用程序中创建多个菜单吗?

c++ - 使用 MMX 指令处理字符串

android - Android 内存调试教程或示例

java - 在Java中打开带有子报表的JasperReport

java - 我可以使用什么来跟踪按下了哪个按钮?

postgresql - 使用 Spark 和 Scala 连接到本地 postgresql 数据库

scala - 在Scala中嵌入XML(和其他语言?)

html - 使用@helper.inputText ("property"时不在输入框前显示文本)

c++ - 如何减少基于 MingW 的 GUI 应用程序的内存消耗?