|
本帖最后由 wuyi 于 2022-3-18 15:17 编辑
先备份老文件!先备份老文件!先备份老文件!
使用适当的编辑器,编辑vmparams文件,将以下内容覆盖原内容:
java.exe -XX:CompilerThreadPriority=1 -XX:+CompilerThreadHintNoPreempt -Djava.library.path=native\\windows -Xverify:none -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=80 -XX:MaxTenuringThreshold=15 -Xmn2g -Xms4g -Xmx4g -Xss2m -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:jvm.log -classpath janino.jar;commons-compiler.jar;commons-compiler-jdk.jar;starfarer.api.jar;starfarer_obf.jar;jogg-0.0.7.jar;jorbis-0.0.15.jar;json.jar;lwjgl.jar;jinput.jar;log4j-1.2.9.jar;lwjgl_util.jar;fs.sound_obf.jar;fs.common_obf.jar;xstream-1.4.10.jar -Dcom.fs.starfarer.settings.paths.saves=..\\saves -Dcom.fs.starfarer.settings.paths.screenshots=..\\screenshots -Dcom.fs.starfarer.settings.paths.mods=..\\mods -Dcom.fs.starfarer.settings.paths.logs=. com.fs.starfarer.StarfarerLauncher
如不想自己编辑,直接用附件。
一些技术上的解释说明:
0. 远行星号0.91和0.951都可以使用这个vmparams文件。
1. 建议使用jre8,论坛上有具体的方法,使用关键字“java8”搜索即可。jre7(原版自带)玩久了会有概率陷入卡顿无法正常玩,只能重开游戏解决,用jre8长期运行没有这个问题。使用jre8唯一不好的是地图种子没法用了。在意的可以用原始jre开好地图后切换到jre8,不在意地图种子的直接无视。
2. 分析java的垃圾收集日志[-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:jvm.log],可以得知保存卡顿的原因是在存档时,游戏会调用3次FullGC。FullGC会造成jvm的长时间停顿,基本上是java开发的大忌。使用参数[-XX:+DisableExplicitGC]禁止显式调用FullGC后,整个保存过程就如丝般顺滑。
3. 内存大小设置:java运行中分年老代和新生代,年老代保存长期数据,新生代保存临时数据。用visualvm等工具分析后可知,在启用功能MOD不用势力MOD时,年老代(长期数据)长期在300M以下。在0.91启用所有势力MOD(和势力争霸MOD)后,年老代(长期数据)长期在500M左右。所以年老代保留到1G就够了,富裕起见可以保留到2G。而新生代1G有点小,2G~3G比较合适,4G以上的话,新生代的垃圾收集偶尔会有可以感觉到的停顿。综上,内存大小设置[-Xmn2g -Xms4g -Xmx4g],即新生代2G,新生代+年老代4G。
4. jvm默认的年老代垃圾收集是和FullGC一样,会有长时间的停顿,设置[-XX:+UseConcMarkSweepGC -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=80]启用年老代的并发收集,减少jvm停顿时间。
5. 为了减少年老代垃圾收集启动的频率,设置[-XX:MaxTenuringThreshold=15],尽量让长期数据晋升到年老代。
6. [-Xverify:none]是为了跳过只能使用jre8_275的限制,如果用jre8_275的话可以不设。
7. 远行星号是无法支持jre9的,因为使用了一些java的内部函数,这些函数在java9里不再存在。
欢迎大家评价以上参数的使用感受。
|
评分
-
查看全部评分
|