找回密码
 初始化身份识别芯片
查看: 40148|回复: 67

修改vmparams,解决存档卡顿

   火.. [复制链接]

战列舰长

发表于 2022-3-18 15:15:40 | 显示全部楼层 |阅读模式
本帖最后由 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里不再存在。


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





vmparams

844 Bytes, 下载次数: 5412

评分

参与人数 12星币 +28 收起 理由
且徐行 + 1 666
q6161217 + 1 惊了!
大眼仔 + 5 很给力!用了后不大卡了,比优化之前好多了.
Yuuzhan Vong + 1 牛逼!
YaeSakura + 5 牛逼!
九曲龙魇 + 1 很给力!
先走一步的子期 + 1 牛逼!
幕后老司机 + 5 谢谢大佬,配合jre8,好到改天换地!!!.
自由的巫妖王 + 5 赞一个!
勇敢的懦夫 + 1 牛逼!
Charlie!! + 1 牛逼!
雪夜晴岚 + 1 牛逼!

查看全部评分

战列舰长

Plauge

发表于 2022-3-18 15:28:14 | 显示全部楼层
nb,这就去试试
我要成为超级尼特!

势力巨擘

发表于 2022-3-18 15:36:28 | 显示全部楼层
本帖最后由 红尘客栈 于 2022-3-18 15:38 编辑

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

点评

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

战列舰长

Plauge

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

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

点评

大神,问一个小白的问题,-Xms4g -Xmx4g是最小和最大内存, -Xmn2g -Xss2m,这两个什么意思啊  详情 回复 发表于 2022-11-13 11:25
我刚刚试了是可以用的 是我孤陋寡闻了哈哈  详情 回复 发表于 2022-3-18 16:23
我要成为超级尼特!

势力巨擘

发表于 2022-3-18 16:23:43 | 显示全部楼层
Dr.Charls 发表于 2022-3-18 15:46
按我的经验来讲用G为单位是没问题的......

我刚刚试了是可以用的 是我孤陋寡闻了哈哈

星域军阀

晴岚号舰长

发表于 2022-3-18 16:59:58 | 显示全部楼层
有效果,谢谢!
别的国家喜欢在船上带修理队修修补补,英国人喜欢在船上装一座造船厂造半艘新的.jpg

巡洋大副

发表于 2022-3-18 18:02:55 | 显示全部楼层
有效果,而且内存调用也比以前高了,之前最多只能用到5G,现在能到8G,我设置的是12G内存

势力巨擘

发表于 2022-3-18 18:43:38 | 显示全部楼层
使用[-Xverify:none]意味着能使用最新的jre8吗?

点评

可以用jre8的最新版,但感觉不到什么提升效果。论坛说的jre8_275效果足够了。  详情 回复 发表于 2022-3-18 23:12

势力巨擘

发表于 2022-3-18 19:57:02 | 显示全部楼层
太牛了
梦之绚烂,恍若星辰

战列舰长

 楼主| 发表于 2022-3-18 23:12:03 来自手机 | 显示全部楼层
kncc 发表于 2022-3-18 18:43
使用[-Xverify:none]意味着能使用最新的jre8吗?

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

巡洋大副

发表于 2022-3-19 15:16:45 | 显示全部楼层
请教一下 -XX:PermSize=1024m -XX:MaxPermSize=1024m -classpath
这些还要加吗,之前不加的时候会崩溃跳出,permgen error这样

点评

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

势力巨擘

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

这个参数在java8被弃用了吧

点评

确实,java8里这一相关内容改成了metaspace,可以自动扩展,不用人工指定了  详情 回复 发表于 2022-3-19 21:34

势力巨擘

发表于 2022-3-19 21:21:02 | 显示全部楼层
谢谢大佬 流畅太多了

战列舰长

 楼主| 发表于 2022-3-19 21:34:54 来自手机 | 显示全部楼层
kncc 发表于 2022-3-19 20:22
这个参数在java8被弃用了吧

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

势力巨擘

发表于 2022-3-19 21:52:52 | 显示全部楼层
马克

巡洋大副

发表于 2022-3-20 13:25:30 | 显示全部楼层
实测确实不卡了,开一个小时以后保存都只要几秒钟,以前玩半小时就卡的不成样了

护卫船员

发表于 2022-3-21 20:50:38 | 显示全部楼层
英雄

战列舰长

发表于 2022-3-22 02:23:34 | 显示全部楼层
用了这个刚做完原版初始星系的任务 就提示检测到内存溢出。。什么鬼?

点评

如果只是弹个对话框说内存不足但还是能继续游戏的话,不用管,不会崩,游戏自带的内存容量检测不准。 如果真的是因为内存不足会直接跳出游戏,可以加大[-Xms4g -Xmx4g]这里,注意两个数字要一样。 再说一次,内存真  详情 回复 发表于 2022-3-22 20:17

战列舰长

 楼主| 发表于 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发生的,所有的内存清理都只发生在新生代。

点评

谢谢您的详细说明  详情 回复 发表于 2022-3-24 10:01

评分

参与人数 1星币 +5 收起 理由
fzzxpsp2 + 5 赞一个!

查看全部评分

势力巨擘

发表于 2022-3-22 22:05:24 | 显示全部楼层
这两天测试了一下,效果很好,也没有碰到兼容性问题

驱逐技师

发表于 2022-3-22 23:56:06 | 显示全部楼层
(喝茶)论坛里就有工具直接修改何必那么麻烦呢

点评

请看标题:解决存档卡顿 论坛工具解决的是能不能玩的问题,这个帖子解决的是存档爽不爽的问题。如果你按原配置没有碰到存档卡的问题(虽然我觉得不大可能),请忽略本贴。  详情 回复 发表于 2022-3-24 08:01
这个不光修改了内存参数.....是有其他参数优化的.....  详情 回复 发表于 2022-3-23 11:28

战列舰长

Plauge

发表于 2022-3-23 11:28:22 | 显示全部楼层
xiaoleilei 发表于 2022-3-22 23:56
(喝茶)论坛里就有工具直接修改何必那么麻烦呢

这个不光修改了内存参数.....是有其他优化的.....
我要成为超级尼特!

势力巨擘

发表于 2022-3-23 19:43:12 | 显示全部楼层
感谢大佬!!!!!!!!!!

战列舰长

发表于 2022-3-23 20:29:50 | 显示全部楼层
冒昧的问一下setting里面的允许全版本java需要改吗
我之前看的是允许的,不过论坛有个帖子是说最好设置成不允许

点评

请看第一点:jre7(原版自带)玩久了会有概率陷入卡顿无法正常玩,只能重开游戏解决,用jre8长期运行没有这个问题。 要用8就要允许全版本  详情 回复 发表于 2022-3-24 07:55

战列舰长

 楼主| 发表于 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重进游戏。

点评

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

战列舰长

 楼主| 发表于 2022-3-24 08:01:02 来自手机 | 显示全部楼层
xiaoleilei 发表于 2022-3-22 23:56
(喝茶)论坛里就有工具直接修改何必那么麻烦呢

请看标题:解决存档卡顿

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

战列舰长

论坛元老

发表于 2022-3-24 08:38:31 | 显示全部楼层
谢谢楼主

战列舰长

发表于 2022-3-24 10:01:56 来自手机 | 显示全部楼层
wuyi 发表于 2022-3-22 20:17
如果只是弹个对话框说内存不足但还是能继续游戏的话,不用管,不会崩,游戏自带的内存容量检测不准。
如果 ...

谢谢您的详细说明

战列舰长

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

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

点评

我的配置文件解决的是存档卡顿问题。 要解决长时间运行卡顿只有升级jre8。  详情 回复 发表于 2022-3-24 13:05

战列舰长

 楼主| 发表于 2022-3-24 13:05:52 | 显示全部楼层
happyman 发表于 2022-3-24 11:10
我用了你的文件 一样运行久了会卡,
哈哈,我也不知道咋回事,时好时坏吧 ...

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

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

点评

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

战列舰长

发表于 2022-3-24 15:49:09 | 显示全部楼层
wuyi 发表于 2022-3-24 13:05
我的配置文件解决的是存档卡顿问题。

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

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

点评

请问一下,你的一个存档文件[campaign.xml]有多大?  详情 回复 发表于 2022-3-24 20:16

战列舰长

 楼主| 发表于 2022-3-24 20:16:27 | 显示全部楼层
happyman 发表于 2022-3-24 15:49
都一样,存档也卡,可能我这电脑win10或者说电脑上java版本多了

请问一下,你的一个存档文件[campaign.xml]有多大?

点评

26mb  详情 回复 发表于 2022-3-25 18:22

战列舰长

发表于 2022-3-25 18:22:32 | 显示全部楼层
wuyi 发表于 2022-3-24 20:16
请问一下,你的一个存档文件[campaign.xml]有多大?

26mb

巡洋大副

发表于 2022-4-9 01:37:29 | 显示全部楼层
阿西吧,看了这帖子才知道玩久了卡不是我一个人的问题。另外这帖子不放首页可惜了

星域军阀

不吹不黑平心而论有一说一就事论事

发表于 2022-4-10 06:50:51 | 显示全部楼层
my hero!

驱逐技师

发表于 2022-4-30 22:29:54 | 显示全部楼层
感谢大佬!

战列舰长

发表于 2022-5-11 21:09:55 | 显示全部楼层
优化到像个新版本!建议大家都体验下,配合jre8

战列舰长

发表于 2022-5-13 23:20:32 | 显示全部楼层
谢大佬

驱逐技师

发表于 2022-5-23 20:06:44 | 显示全部楼层
感谢大佬

巡洋大副

发表于 2022-5-29 13:48:32 | 显示全部楼层
感谢大佬,存档速度真的快了很多

势力巨擘

舰长,我要摁了啊!

发表于 2022-6-7 00:13:17 | 显示全部楼层
太好了!
终于有大佬过来治治这个老年痴呆jvm了

战列舰长

发表于 2022-7-5 13:44:16 | 显示全部楼层
为什么我换完之后打不开游戏了,游戏图标双击一点反应没有,还回去就好了

势力巨擘

发表于 2022-7-7 21:32:05 | 显示全部楼层
各种方面都是丝滑!就是内存溢出检测变频繁了好多,几乎次次读档后都要跳....

星域军阀

废船海攻势舰长

战术专家

发表于 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行吗?每次一读档,必定会跳出检测到内存溢出。

点评

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

势力巨擘

发表于 2022-12-14 18:35:35 | 显示全部楼层
太震撼了,4G>8G……我之前手改的8G内存溢出花式跳出,还是说太大了反而不行吗(草)
不知道能不能提升到2-6-6?这样的话能拿出来六个G……

点评

可以试试,但根据我的游戏体验,没有必要。  详情 回复 发表于 2023-1-16 09:56

战列舰长

 楼主| 发表于 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是可以保持流畅的。

战列舰长

 楼主| 发表于 2023-1-21 09:39:32 | 显示全部楼层
合金弹头 发表于 2022-11-13 11:25
大神,我内存够大,设成-Xmx8G行吗?每次一读档,必定会跳出检测到内存溢出。 ...

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

点评

能请教下无法保存是什么原因吗?  详情 回复 发表于 2023-2-28 23:36

势力巨擘

发表于 2023-2-28 23:36:40 | 显示全部楼层
wuyi 发表于 2023-1-21 09:39
请看上面我的回帖。读档时跳出内存溢出是不影响之后玩的。真的内存溢出了是直接跳出游戏的。 ...

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

战列舰长

发表于 2023-3-13 15:28:26 | 显示全部楼层
顶一个,好东西,开久了一点都不卡了~~~

本版积分规则

Archiver|手机版|小黑屋|远行星号中文论坛

GMT+8, 2024-12-22 02:24

Powered by Discuz! X3.5

© 2001-2077 Tencent Cloud | Durian Software Studio

快速回复 返回顶部 返回列表