wuyi 发表于 2022-3-18 15:15:40

修改vmparams,解决存档卡顿

本帖最后由 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里不再存在。


欢迎大家评价以上参数的使用感受。





Dr.C 发表于 2022-3-18 15:28:14

nb,这就去试试{:5_133:}

彬哥 发表于 2022-3-18 15:36:28

本帖最后由 红尘客栈 于 2022-3-18 15:38 编辑

这个内存设置 不能直接填 4G,要填4096m -Xms4096m -Xmx4096m 新手入门里面说的很清楚了议长教你如何分配内存

Dr.C 发表于 2022-3-18 15:46:43

红尘客栈 发表于 2022-3-18 15:36
这个内存设置 不能直接填 4G,要填4096m -Xms4096m -Xmx4096m 新手入门里面说的很清楚了议长教你如何分配 ...

按我的经验来讲用G为单位是没问题的......

彬哥 发表于 2022-3-18 16:23:43

Dr.Charls 发表于 2022-3-18 15:46
按我的经验来讲用G为单位是没问题的......

我刚刚试了是可以用的 是我孤陋寡闻了哈哈 {:5_132:}

雪夜晴岚 发表于 2022-3-18 16:59:58

有效果,谢谢!

seeyourick 发表于 2022-3-18 18:02:55

有效果,而且内存调用也比以前高了,之前最多只能用到5G,现在能到8G,我设置的是12G内存

kncc 发表于 2022-3-18 18:43:38

使用[-Xverify:none]意味着能使用最新的jre8吗?

灵暝 发表于 2022-3-18 19:57:02

太牛了

wuyi 发表于 2022-3-18 23:12:03

kncc 发表于 2022-3-18 18:43
使用[-Xverify:none]意味着能使用最新的jre8吗?

可以用jre8的最新版,但感觉不到什么提升效果。论坛说的jre8_275效果足够了。

arlondytle 发表于 2022-3-19 15:16:45

请教一下 -XX:PermSize=1024m -XX:MaxPermSize=1024m -classpath
这些还要加吗,之前不加的时候会崩溃跳出,permgen error这样

kncc 发表于 2022-3-19 20:22:24

arlondytle 发表于 2022-3-19 15:16
请教一下 -XX:PermSize=1024m -XX:MaxPermSize=1024m -classpath
这些还要加吗,之前不加的时候会崩溃跳出 ...

这个参数在java8被弃用了吧

ManaMetal 发表于 2022-3-19 21:21:02

谢谢大佬 流畅太多了

wuyi 发表于 2022-3-19 21:34:54

kncc 发表于 2022-3-19 20:22
这个参数在java8被弃用了吧

确实,java8里这一相关内容改成了metaspace,可以自动扩展,不用人工指定了

攻势级攻势号 发表于 2022-3-19 21:52:52

马克

arlondytle 发表于 2022-3-20 13:25:30

实测确实不卡了,开一个小时以后保存都只要几秒钟,以前玩半小时就卡的不成样了

徐昃 发表于 2022-3-21 20:50:38

英雄

马斯坦大佐 发表于 2022-3-22 02:23:34

用了这个刚做完原版初始星系的任务 就提示检测到内存溢出。。什么鬼?

wuyi 发表于 2022-3-22 20:17:59

本帖最后由 wuyi 于 2022-3-22 20:55 编辑

马斯坦大佐 发表于 2022-3-22 02:23
用了这个刚做完原版初始星系的任务 就提示检测到内存溢出。。什么鬼?
如果只是弹个对话框说内存不足但还是能继续游戏的话,不用管,不会崩,游戏自带的内存容量检测不准。
如果真的是因为内存不足会直接跳出游戏,可以加大[-Xms4g -Xmx4g]这里,注意两个数字要一样。

再说一次,内存真的不足会直接跳出游戏,只在游戏内部弹框的话不用理。
-------------------
修正一下,也不能说“游戏自带的内存容量检测不准”,具体技术分析如下:

starsector在启动读条时,也就是从MOD选择那个画面到游戏读档画面时,会把所有要用的船、武器、插件、派系等等所有要用到的文件都读取一遍(这个操作可以从starsector.log里看出来),用意应该是防止游戏中读不到文件崩溃。但这个操作会对内存使用造成很大压力,新生代的内容会很容易提升到老年代,老年代满后就会触发CMS清理。但CMS清理中有个阶段叫做CMS-concurrent-abortable-preclean会持续较长时间,在我的机器上要5秒以上,但因为和游戏线程是并发操作,就感觉不到停顿。但此时如果游戏进行内存检测的话就会发现内存不够,其实是已在内存清理中,完全不影响之后的游戏。

这个现象在我的机器上只会很偶尔地发生在刚刚进入游戏时,之后就再没发生过。如果去分析一下jvm.log,就会发现除了开头会有几次CMS清理,之后几乎不会再有CMS发生。用“几乎”是因为只有在反复读档的情况下,才有机会触发CMS。如果是单单进游戏的时候读了一次档的话,在我给出的配置下是不会有CMS发生的,所有的内存清理都只发生在新生代。

kncc 发表于 2022-3-22 22:05:24

这两天测试了一下,效果很好,也没有碰到兼容性问题

xiaoleilei 发表于 2022-3-22 23:56:06

(喝茶)论坛里就有工具直接修改何必那么麻烦呢

Dr.C 发表于 2022-3-23 11:28:22

xiaoleilei 发表于 2022-3-22 23:56
(喝茶)论坛里就有工具直接修改何必那么麻烦呢
这个不光修改了内存参数.....是有其他优化的.....{:5_133:}

NINTH 发表于 2022-3-23 19:43:12

感谢大佬!!!!!!!!!!

MotherSlayer 发表于 2022-3-23 20:29:50

冒昧的问一下setting里面的允许全版本java需要改吗
我之前看的是允许的,不过论坛有个帖子是说最好设置成不允许

wuyi 发表于 2022-3-24 07:55:32

本帖最后由 wuyi 于 2022-3-24 09:33 编辑

happyman 发表于 2022-3-23 20:29
冒昧的问一下setting里面的允许全版本java需要改吗
我之前看的是允许的,不过论坛有个帖子是说最好设置成不 ...
请看第一点:jre7(原版自带)玩久了会有概率陷入卡顿无法正常玩,只能重开游戏解决,用jre8长期运行没有这个问题。

要用8就要允许全版本
-------------
补充一下,升级java版本唯一的问题就是网上的那些好种子都会失效,如果想用那些种子的话,请先切换到原版jre,新开局生成星系后,存档退出游戏,再切换到java8重进游戏。

wuyi 发表于 2022-3-24 08:01:02

xiaoleilei 发表于 2022-3-22 23:56
(喝茶)论坛里就有工具直接修改何必那么麻烦呢

请看标题:解决存档卡顿

论坛工具解决的是能不能玩的问题,这个帖子解决的是存档爽不爽的问题。如果你按原配置没有碰到存档卡的问题(虽然我觉得不大可能),请忽略本贴。

正义甜不辣 发表于 2022-3-24 08:38:31

谢谢楼主{:tieba_43:}

马斯坦大佐 发表于 2022-3-24 10:01:56

wuyi 发表于 2022-3-22 20:17
如果只是弹个对话框说内存不足但还是能继续游戏的话,不用管,不会崩,游戏自带的内存容量检测不准。
如果 ...

谢谢您的详细说明

MotherSlayer 发表于 2022-3-24 11:10:59

wuyi 发表于 2022-3-24 07:55
请看第一点:jre7(原版自带)玩久了会有概率陷入卡顿无法正常玩,只能重开游戏解决,用jre8长期运行没有 ...

我用了你的文件 一样运行久了会卡,
哈哈,我也不知道咋回事,时好时坏吧

wuyi 发表于 2022-3-24 13:05:52

happyman 发表于 2022-3-24 11:10
我用了你的文件 一样运行久了会卡,
哈哈,我也不知道咋回事,时好时坏吧 ...

我的配置文件解决的是存档卡顿问题。

要解决长时间运行卡顿只有升级jre8。

MotherSlayer 发表于 2022-3-24 15:49:09

wuyi 发表于 2022-3-24 13:05
我的配置文件解决的是存档卡顿问题。

要解决长时间运行卡顿只有升级jre8。 ...

都一样,存档也卡,可能我这电脑win10或者说电脑上java版本多了

wuyi 发表于 2022-3-24 20:16:27

happyman 发表于 2022-3-24 15:49
都一样,存档也卡,可能我这电脑win10或者说电脑上java版本多了

请问一下,你的一个存档文件有多大?

MotherSlayer 发表于 2022-3-25 18:22:32

wuyi 发表于 2022-3-24 20:16
请问一下,你的一个存档文件有多大?

26mb

褪色者 发表于 2022-4-9 01:37:29

阿西吧,看了这帖子才知道玩久了卡不是我一个人的问题。另外这帖子不放首页可惜了

纯路人 发表于 2022-4-10 06:50:51

my hero!

fzzxpsp2 发表于 2022-4-30 22:29:54

感谢大佬!

幕后老司机 发表于 2022-5-11 21:09:55

优化到像个新版本!建议大家都体验下,配合jre8

羊葱炒蛋 发表于 2022-5-13 23:20:32

谢大佬

str965 发表于 2022-5-23 20:06:44

感谢大佬

先走一步的子期 发表于 2022-5-29 13:48:32

感谢大佬,存档速度真的快了很多

利爪驾驶员A 发表于 2022-6-7 00:13:17

太好了!
终于有大佬过来治治这个老年痴呆jvm了{:5_134:}

一只无害狸罢了 发表于 2022-7-5 13:44:16

为什么我换完之后打不开游戏了,游戏图标双击一点反应没有,还回去就好了

Colt_SCW 发表于 2022-7-7 21:32:05

各种方面都是丝滑!就是内存溢出检测变频繁了好多,几乎次次读档后都要跳....

davely 发表于 2022-9-19 18:28:00

mmmmarrrrrk

合金弹头 发表于 2022-11-13 11:25:16

本帖最后由 合金弹头 于 2022-11-13 14:14 编辑

Dr.Charls 发表于 2022-3-18 15:46
按我的经验来讲用G为单位是没问题的......
大神,我内存够大,设成-Xmx8G行吗?每次一读档,必定会跳出检测到内存溢出。

一笛落日 发表于 2022-12-14 18:35:35

太震撼了,4G>8G……我之前手改的8G内存溢出花式跳出,还是说太大了反而不行吗(草)
不知道能不能提升到2-6-6?这样的话能拿出来六个G……

wuyi 发表于 2023-1-16 09:56:54

本帖最后由 wuyi 于 2023-1-21 09:36 编辑

一笛落日 发表于 2022-12-14 18:35
太震撼了,4G>8G……我之前手改的8G内存溢出花式跳出,还是说太大了反而不行吗(草)
不知道能不能提升到2- ...
可以试试,但根据我的游戏体验,没有必要。

2-6-6的话是增加了年老代,也就是说在这一局游戏中需要一直用到的内容,如果是势力MOD加很多的话,可能有点作用。
如果势力MOD很多且游戏到了后期,游戏中也开始卡顿的话,可以尝试一下这种调整。
至少目前为止我用2-4-4是可以保持流畅的。

wuyi 发表于 2023-1-21 09:39:32

合金弹头 发表于 2022-11-13 11:25
大神,我内存够大,设成-Xmx8G行吗?每次一读档,必定会跳出检测到内存溢出。 ...

请看上面我的回帖。读档时跳出内存溢出是不影响之后玩的。真的内存溢出了是直接跳出游戏的。

XZCW 发表于 2023-2-28 23:36:40

wuyi 发表于 2023-1-21 09:39
请看上面我的回帖。读档时跳出内存溢出是不影响之后玩的。真的内存溢出了是直接跳出游戏的。 ...

能请教下无法保存是什么原因吗?

星占天下 发表于 2023-3-13 15:28:26

顶一个,好东西,开久了一点都不卡了~~~
页: [1] 2
查看完整版本: 修改vmparams,解决存档卡顿