问题描述
我正在用scala构建javafx项目,并且我注意到内存使用量超过170mb,空白的javafx项目大约为90mb。我看到了JavaFX eats my memory?页,它说未使用堆中的大多数内存,并解释了一种使用以下标志来缩小堆的方法:--XX:+ UseG1GC。我通过使用以下方法在sbt中进行了尝试 javacoptions + =“ --XX:+ UseG1GC” 在Sbt中,但内存使用率保持不变。有人可以帮我缩小堆吗?
解决方法
javacOptions
是used to pass Java compiler flags,如果您已提交要在项目中进行编译的Java文件。
如果您正在通过sbt运行项目,则可以设置JVM_OPTS
环境变量或创建.jvmopts
文件。必须以这种方式配置它们,因为当JVM运行时,它无法设置自己的JVM配置。尽管如果您想在fork中运行程序并让sbt使用不同的配置,则可以使用SBT_OPTS
与fork分开配置sbt。
顺便说一句。如果遇到问题,可以随时使用sbt-extras
包装器,这使事情变得更容易。它使用一些更合理的默认值,如果缺少sbt则下载sbt等。
如果您在项目中使用SBT本机打包程序,则除了JVM_OPTS
和.jvmopts
之外,还可以在生成的执行脚本中添加标志(或一些其他自定义命令)。我们就是在项目中这样做的:
project.in(file("example")).settings(
batScriptExtraDefines ++= Seq( //Windows bat/cmd
"""set _JAVA_OPTS=!_JAVA_OPTS! -Djdk.tls.ephemeralDHKeySize=2048""","""set _JAVA_OPTS=!_JAVA_OPTS! -Djdk.tls.rejectClientInitiatedRenegotiation=true"""
),bashScriptExtraDefines ++= Seq( //Unix shell
"""addJava "-Djdk.tls.ephemeralDHKeySize=2048"""","""addJava "-Djdk.tls.rejectClientInitiatedRenegotiation=true"""","""umask 077"""
)
)