[2024版]修改vmparams,解决存档卡顿,适用版本091/0951/096/097(/098/099/100/...)
本帖最后由 wuyi 于 2024-2-27 11:49 编辑大家好!
自从在 https://www.fossic.org/forum.php?mod=viewthread&tid=9168 里尝试ShenandoahGC但失败后,最近又看到一个帖子https://www.fossic.org/forum.php?mod=viewthread&tid=10627,说是可以用java21或者23来跑远行星号,不禁又动了研究的心思。折腾一番后,就有了下面这串可以跑ShenandoahGC的vmparams,需要redhat的java8:
java.exe -XX:CompilerThreadPriority=1 -XX:+CompilerThreadHintNoPreempt -Xverify:none -XX:+AggressiveOpts -Djava.library.path=native\\windows -XX:+UseShenandoahGC -XX:+DisableExplicitGC -XX:CompileCommand=exclude,com.fs.starfarer.combat.ai.O0OO::Ò00000 -XX:CompileCommand=exclude,com.fs.starfarer.api.impl.campaign.terrain.AuroraRenderer::render -XX:CompileCommand=exclude,com.fs.starfarer.combat.ai.movement.maneuvers.StrafeTargetManeuverV2::o00000 -XX:+PrintGCDateStamps -Xloggc:jvm.log -Xms8g -Xmx8g -Xss2048k -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
已经测试,上面的vmparams可以在版本091/0951/096/097里使用
以下是自问自答环节,内容偏技术,仅供参考。
1. 为什么不继续使用CMS?
答:CMS太老了,其中的新生代(-Xmn)一旦超过2g,整个新生代的暂停时间(Stop the World,STW,咋瓦鲁多)就很容易超过100ms。但新生代又代表了活跃变量的容量大小,开的小了就无法充分利用你新机器的大内存了。这也是我在之前的帖子里反复说明整个堆内存不用开很大的原因,老年代开大了不代表活跃变量(新生代)的容量大,新生代开大了STW受不了。
2. 那为啥不用G1?
答:G1里也是有新生代的,不过是由jvm自己动态控制大小,默认的控制目标是:STW<200ms !也就是说,如果你的机器有点老的话(比如我之前用的2015年笔记本),G1的卡顿会比CMS还要严重。当然在2020年后的机器上这个问题就没那么严重了,我设堆大小8g的话STW可以保证在100ms以下,大多在40ms左右。
3. ShenandoahGC有什么好?为什么现在才用?
答:ShenandoahGC和ZGC都是最新一代的内存回收技术,STW可以达到个位数!比如某一次回收过程里的4次STW,分别是 ,其他的回收步骤都是可以Concurrent也就是和游戏并行的,这可是开了8g的堆。我甚至设置过16g的堆,STW也没有超过5ms。这个是CMS和G1无法做到的。但ShenandoahGC是在java11之后才正式发布的,目前java8里提供ShenandoahGC的只有redhat红帽子一家。
之前在使用redhat的java8时,出现了致命的C2编译错误,让我不得不放弃。但最近偶尔看到一些资料,可以通过-XX:CompileCommand=exclude的方式跳过C2编译会出错的方法,马上利用起来,嗯,真香。
4. 为什么不使用java21或java23来跑?据说性能可以很大提高。
答: 21和23我都用过了,提高是有,很大说不上,但我觉得弊端不少。首先,这两个方式都替换了一些外部工具类,23甚至改写了游戏的核心类。这就会造成一些问题,已知问题就有,和老存档不兼容不能读老档,有些MOD不兼容会闪退,096本来就不多的汉化会继续丢汉化。23改写了游戏核心类后,像这次游戏升级到rc11,就要等作者更新。21是使用代理的方法更改了一些方法,但是否能兼容升级也有疑问。性能提升是:实时fps的上限可以高5帧,但画面该卡的时候(小飞机和导弹多)还是会卡。我个人认为是不值得,不值得这么折腾。
5. 为啥这个方法能兼容到100?
答:因为我只是替换了java runtime,未对游戏做任何修改。只要游戏作者没有更新外部工具类(我觉得是不会更新了,要知道游戏默认用的是java7),也不动游戏底层框架(Starsector2肯定是不能用我这个vmparams了),那这个vmparams就可以用到098/099/100/...,兼容性绝佳。就算再次出现C2编译错误,也可以继续通过-XX:CompileCommand跳过。
6. 有没有其他MOD可以推荐增加性能?
答: 强烈推荐 https://www.fossic.org/forum.php?mod=viewthread&tid=10302 里的MOD,直接改善战斗画面。096/097可直接用,0951不能用。无副作用。注意java21和java23不可用。
分享下redhat的jre8,方便大家下载:
链接:https://pan.baidu.com/s/1IEEapkOf4vBpjuBEnLE7Ng?pwd=svro
提取码:svro
好好好回去试试 AnyIDElse 发表于 2024-2-26 15:12
这里应该是冒号冒号小写o :;P ::o 这些oO0啥啥的类名,alex每次更新RC版本的时候是有可能发生变化的
真的能通用吗?
Java 23我用的是作者正式登出来前的版本之后比较懒没更新,到目前一直用都没有遇到问题,没遇到和mod适配的问题,不过确实要随着版本更新。是否有提高这个确实要看系统,discord那边虽然主要反应不错,没有提高的也确实有一些,我个人这边相比之前的Shenandoah 提高很明显,没有再出现后期卡顿的情况。 (当然我mod也不是装的太多,大概30-40个左右,mod的多了肯定还是会慢的)
具体的和个别mod冲突的情况有,但是作者也修复了几个,如果有具体问题可以说下我可以试着跟miko 反映下。(但我也只是个翻译的23333,代码什么的是外行,如果能英文解释更好。)汉化兼容问题miko已经知道了。 先收藏,等闲下来我再试试951能不能用!!{:tieba_50:}{:tieba_50:} 这个是别人优化的,和你的有啥区别?????
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 -Xms8192m -Xmx8192m -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 文仔 发表于 2024-2-26 18:46
这个是别人优化的,和你的有啥区别?????
java.exe -XX:CompilerThreadPriority=1 -XX:+CompilerThrea ...
晕菜,直接启动不了。用的是J8最新版 PEI修复了一下,之前其实没有作用的说(在PEI+Java11中的PEI是修复过的) zender 发表于 2024-2-26 19:13
PEI修复了一下,之前其实没有作用的说(在PEI+Java11中的PEI是修复过的)
活捉大佬一只
ParticleEngineInject 太棒了,我今天(2/27)更新后,帧数直接爆炸,已经不再纠结gc方式了。就是不兼容0951,能麻烦大佬兼容一下吗?
错误是:
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: javassist.NotFoundException: addNebulaSmoothParticle(..) is not found in com.fs.starfarer.combat.CombatEngine
at zender.patch.ParticleEngineInject_PreMain.premain(ParticleEngineInject_PreMain.java:44)
好像是有个方法在0951里没有 每次启动游戏的存档没办法直接保存,只能save copy,而且游戏根目录存档文件会比实际存档多出来好几个 wuyi 发表于 2024-2-27 12:02
活捉大佬一只
ParticleEngineInject 太棒了,我今天(2/27)更新后,帧数直接爆炸,已经不再纠结gc方式了 ...
更了一下,有时间帮忙测测 java 8 报错了:
Exception in thread "main" java.lang.UnsupportedClassVersionError: zender/patch/ParticleEngineInject_PreMain has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
编译版本太高了 wuyi 发表于 2024-2-27 13:19
java 8 报错了:
Exception in thread "main" java.lang.UnsupportedClassVersionError: zender/patch/Part ...
改回java8编译了 不行啊大佬,23版的能用很久,但是24版的我甚至连游戏启动界面都打不开,点图标没反应,大佬麻烦把修改过的发过来好不好呀 啸天行 发表于 2024-3-16 20:40
不行啊大佬,23版的能用很久,但是24版的我甚至连游戏启动界面都打不开,点图标没反应,大佬麻烦把修改过的发过 ...
我是0951版本的 本帖最后由 圣剑圣剑 于 2024-4-22 23:15 编辑
macOS 没 vmparams 文件 {:tieba_30:}
在游戏路径下终端执行 grep -rli "Xms1536m" 找到一个 /Starsector.app/Contents/MacOS/starsector_mac.sh
更改里面的 JVM 启动参数
启动游戏后可以用 jps + jcmd <pid> VM.flags 获取当前 JVM 运行参数验证有效
0.951保存提示save copy,保存新存档还闪退。 用了之后游戏进入时的加载变慢了,其它感觉没太大变化...但我找不回原先用的优化了,{:tieba_36:} 我改成了分配3G内存,为什么老提示内存溢出,但是还是能存档 097换成jre8用了这个代码游戏无法启动 wuyi 发表于 2024-2-27 13:19
java 8 报错了:
Exception in thread "main" java.lang.UnsupportedClassVersionError: zender/patch/Part ...
请问vmparams文件该怎么开,以前能打开修改的,现在只有空白了,我是951版本的;把这个贴的附件下载替换进游戏后提示分配的内存太多会闪退,我这是16G内存的电脑,不应该吧? 本帖最后由 ewker5167 于 2024-10-8 09:09 编辑
这种东西你用vs code打开就可以,同理游戏本身的csv和未编译的java文件你做轻量级修改的话都用vs code就行,比较方便。
我使用楼主的办法更新了之后,存档速度产生了飞速提升,也不会出现之前玩久了存个档卡半分钟的情况了。
只不过游戏会偶发提示内存不足,关闭提示不影响继续进行游戏也不影响存档(本机64G,推测还是jvm没吃到足够内存?或许提示后触发了GC?反正没搞懂),但体感亚空间飞行时帧数有所下降,也可能是我生成了更大、星系更多的地图并放大了zoom导致的吧。
战斗帧数倒是没感觉有什么影响,哪怕是使用了speed up。 直接启动器没反应了
页:
[1]