修改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里不再存在。
欢迎大家评价以上参数的使用感受。
nb,这就去试试{:5_133:} 本帖最后由 红尘客栈 于 2022-3-18 15:38 编辑
这个内存设置 不能直接填 4G,要填4096m -Xms4096m -Xmx4096m 新手入门里面说的很清楚了议长教你如何分配内存 红尘客栈 发表于 2022-3-18 15:36
这个内存设置 不能直接填 4G,要填4096m -Xms4096m -Xmx4096m 新手入门里面说的很清楚了议长教你如何分配 ...
按我的经验来讲用G为单位是没问题的...... Dr.Charls 发表于 2022-3-18 15:46
按我的经验来讲用G为单位是没问题的......
我刚刚试了是可以用的 是我孤陋寡闻了哈哈 {:5_132:} 有效果,谢谢! 有效果,而且内存调用也比以前高了,之前最多只能用到5G,现在能到8G,我设置的是12G内存 使用[-Xverify:none]意味着能使用最新的jre8吗? 太牛了 kncc 发表于 2022-3-18 18:43
使用[-Xverify:none]意味着能使用最新的jre8吗?
可以用jre8的最新版,但感觉不到什么提升效果。论坛说的jre8_275效果足够了。 请教一下 -XX:PermSize=1024m -XX:MaxPermSize=1024m -classpath
这些还要加吗,之前不加的时候会崩溃跳出,permgen error这样 arlondytle 发表于 2022-3-19 15:16
请教一下 -XX:PermSize=1024m -XX:MaxPermSize=1024m -classpath
这些还要加吗,之前不加的时候会崩溃跳出 ...
这个参数在java8被弃用了吧 谢谢大佬 流畅太多了 kncc 发表于 2022-3-19 20:22
这个参数在java8被弃用了吧
确实,java8里这一相关内容改成了metaspace,可以自动扩展,不用人工指定了 马克 实测确实不卡了,开一个小时以后保存都只要几秒钟,以前玩半小时就卡的不成样了 英雄 用了这个刚做完原版初始星系的任务 就提示检测到内存溢出。。什么鬼? 本帖最后由 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发生的,所有的内存清理都只发生在新生代。
这两天测试了一下,效果很好,也没有碰到兼容性问题 (喝茶)论坛里就有工具直接修改何必那么麻烦呢 xiaoleilei 发表于 2022-3-22 23:56
(喝茶)论坛里就有工具直接修改何必那么麻烦呢
这个不光修改了内存参数.....是有其他优化的.....{:5_133:} 感谢大佬!!!!!!!!!! 冒昧的问一下setting里面的允许全版本java需要改吗
我之前看的是允许的,不过论坛有个帖子是说最好设置成不允许
本帖最后由 wuyi 于 2022-3-24 09:33 编辑
happyman 发表于 2022-3-23 20:29
冒昧的问一下setting里面的允许全版本java需要改吗
我之前看的是允许的,不过论坛有个帖子是说最好设置成不 ...
请看第一点:jre7(原版自带)玩久了会有概率陷入卡顿无法正常玩,只能重开游戏解决,用jre8长期运行没有这个问题。
要用8就要允许全版本
-------------
补充一下,升级java版本唯一的问题就是网上的那些好种子都会失效,如果想用那些种子的话,请先切换到原版jre,新开局生成星系后,存档退出游戏,再切换到java8重进游戏。
xiaoleilei 发表于 2022-3-22 23:56
(喝茶)论坛里就有工具直接修改何必那么麻烦呢
请看标题:解决存档卡顿
论坛工具解决的是能不能玩的问题,这个帖子解决的是存档爽不爽的问题。如果你按原配置没有碰到存档卡的问题(虽然我觉得不大可能),请忽略本贴。 谢谢楼主{:tieba_43:} wuyi 发表于 2022-3-22 20:17
如果只是弹个对话框说内存不足但还是能继续游戏的话,不用管,不会崩,游戏自带的内存容量检测不准。
如果 ...
谢谢您的详细说明 wuyi 发表于 2022-3-24 07:55
请看第一点:jre7(原版自带)玩久了会有概率陷入卡顿无法正常玩,只能重开游戏解决,用jre8长期运行没有 ...
我用了你的文件 一样运行久了会卡,
哈哈,我也不知道咋回事,时好时坏吧 happyman 发表于 2022-3-24 11:10
我用了你的文件 一样运行久了会卡,
哈哈,我也不知道咋回事,时好时坏吧 ...
我的配置文件解决的是存档卡顿问题。
要解决长时间运行卡顿只有升级jre8。 wuyi 发表于 2022-3-24 13:05
我的配置文件解决的是存档卡顿问题。
要解决长时间运行卡顿只有升级jre8。 ...
都一样,存档也卡,可能我这电脑win10或者说电脑上java版本多了 happyman 发表于 2022-3-24 15:49
都一样,存档也卡,可能我这电脑win10或者说电脑上java版本多了
请问一下,你的一个存档文件有多大? wuyi 发表于 2022-3-24 20:16
请问一下,你的一个存档文件有多大?
26mb 阿西吧,看了这帖子才知道玩久了卡不是我一个人的问题。另外这帖子不放首页可惜了 my hero! 感谢大佬! 优化到像个新版本!建议大家都体验下,配合jre8 谢大佬 感谢大佬 感谢大佬,存档速度真的快了很多 太好了!
终于有大佬过来治治这个老年痴呆jvm了{:5_134:} 为什么我换完之后打不开游戏了,游戏图标双击一点反应没有,还回去就好了 各种方面都是丝滑!就是内存溢出检测变频繁了好多,几乎次次读档后都要跳.... mmmmarrrrrk 本帖最后由 合金弹头 于 2022-11-13 14:14 编辑
Dr.Charls 发表于 2022-3-18 15:46
按我的经验来讲用G为单位是没问题的......
大神,我内存够大,设成-Xmx8G行吗?每次一读档,必定会跳出检测到内存溢出。 太震撼了,4G>8G……我之前手改的8G内存溢出花式跳出,还是说太大了反而不行吗(草)
不知道能不能提升到2-6-6?这样的话能拿出来六个G…… 本帖最后由 wuyi 于 2023-1-21 09:36 编辑
一笛落日 发表于 2022-12-14 18:35
太震撼了,4G>8G……我之前手改的8G内存溢出花式跳出,还是说太大了反而不行吗(草)
不知道能不能提升到2- ...
可以试试,但根据我的游戏体验,没有必要。
2-6-6的话是增加了年老代,也就是说在这一局游戏中需要一直用到的内容,如果是势力MOD加很多的话,可能有点作用。
如果势力MOD很多且游戏到了后期,游戏中也开始卡顿的话,可以尝试一下这种调整。
至少目前为止我用2-4-4是可以保持流畅的。
合金弹头 发表于 2022-11-13 11:25
大神,我内存够大,设成-Xmx8G行吗?每次一读档,必定会跳出检测到内存溢出。 ...
请看上面我的回帖。读档时跳出内存溢出是不影响之后玩的。真的内存溢出了是直接跳出游戏的。 wuyi 发表于 2023-1-21 09:39
请看上面我的回帖。读档时跳出内存溢出是不影响之后玩的。真的内存溢出了是直接跳出游戏的。 ...
能请教下无法保存是什么原因吗? 顶一个,好东西,开久了一点都不卡了~~~
页:
[1]
2