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

如何通过java1.8及其以上设置大内存的同时减少GC所带来的卡顿

  [复制链接]

驱逐技师

发表于 2023-5-5 18:46:30 | 显示全部楼层 |阅读模式


众所周知由于java的特性,如果给内存内存一大就很卡,但是我又想开大内存放一堆mod
其次是如果内存小,也会经常gc导致卡顿,那么有什么办法可以接近卡顿问题的情况下进行优化呢?

vmparams:

-XX:+UseG1GC -XX:MaxGCPauseMillis=30  -Xms12g -Xmx12g



-XX:+UseG1GC #使用G1 gc
-XX:MaxGCPauseMillis=30  #期望卡顿时间为30ms

-Xms12g -Xmx12g  #开12g内存

特别注意的是开启G1后 电脑会从单核转向多核运行,并行的清理垃圾
从耗电角度来说会多一点,但是从游戏角度来说,将单核引向多核,可感知的卡顿会提升很多



以下是GPT的介绍


Java中的G1垃圾回收器是一种面向服务端应用程序的垃圾回收器,它的主要优点包括:

1. 分代收集:G1垃圾回收器采用分代收集的方式,在保证应用程序吞吐量的同时,有效地降低了回收器的停顿时间。

2. 内存占用:G1垃圾回收器可以有效地控制内存占用,避免应用程序因为占用过多的内存而出现问题。

3. 可预测性:G1垃圾回收器可以通过控制最大垃圾回收停顿时间,提高应用程序的可预测性和稳定性。

MaxGCPauseMillis是G1垃圾回收器中一个重要的参数,它的具体含义是最大垃圾回收停顿时间,即G1垃圾回收器在执行垃圾回收操作时,可以允许的最大停顿时间,单位是毫秒。该参数的默认值是200毫秒。

MaxGCPauseMillis参数的背后原理是G1垃圾回收器使用一种叫做“Region”的内存布局方式,将整个堆内存分成多个大小相等的区域,每个区域都有一个特定的垃圾回收目标,并且在执行垃圾回收时,只回收那些不再使用的区域,从而避免了全局性的垃圾回收,减少了垃圾回收的停顿时间。MaxGCPauseMillis参数的设置可以帮助开发人员控制垃圾回收器的停顿时间,从而提高应用程序的性能和稳定性。但需要注意的是,设置过小的最大垃圾回收停顿时间可能会导致频繁的垃圾回收,从而降低应用程序的性能。





评分

参与人数 1星币 +5 收起 理由
啊呀呀 + 5 惊了!

查看全部评分

势力巨擘

发表于 2023-5-5 20:42:49 | 显示全部楼层
分12G这么大?
等大佬试过再说了

点评

我都玩3天了,根本没有卡顿  详情 回复 发表于 2023-5-5 23:46

驱逐技师

 楼主| 发表于 2023-5-5 23:46:12 | 显示全部楼层
topgamer 发表于 2023-5-5 20:42
分12G这么大?
等大佬试过再说了

我都玩3天了,根本没有卡顿

点评

大佬!发个教程或者视频!大佬,我想学!  详情 回复 发表于 2023-5-9 09:43

驱逐技师

 楼主| 发表于 2023-5-5 23:49:47 | 显示全部楼层
特别注意要java1.8 及其以上 不是1.8的不会起作用

战列舰长

发表于 2023-5-6 03:13:00 | 显示全部楼层
这样设置后我调的是6g内存,但是进游戏会占用8g不知道为什么

势力巨擘

发表于 2023-5-6 14:53:35 | 显示全部楼层
那么应该怎样把这两个参数添加上去呢,我试着直接添加,但是打不开程序了

点评

你是java1.8吗 没遇到过打不开的情况  详情 回复 发表于 2023-5-6 20:48

势力巨擘

发表于 2023-5-6 16:51:00 | 显示全部楼层
请问一下有具体的使用方法吗?

星域军阀

难道这就是自定义头衔!

发表于 2023-5-6 19:49:03 | 显示全部楼层
细说怎么搞?要不把你的vmparams文件发一下

点评

java.exe -XX:CompilerThreadPriority=1 -XX:+UseG1GC -XX:MaxGCPauseMillis=30 -XX:+CompilerThreadHintNoPreempt -Djava.library.path=native\\windows -Xms12g -Xmx12g -Xss2048k -classpath janino.jar;commons-  详情 回复 发表于 2023-5-6 20:47
哇哦~是个人签名!

驱逐技师

 楼主| 发表于 2023-5-6 20:47:10 | 显示全部楼层
蕾丝圣斗士 发表于 2023-5-6 19:49
细说怎么搞?要不把你的vmparams文件发一下

java.exe -XX:CompilerThreadPriority=1 -XX:+UseG1GC -XX:MaxGCPauseMillis=30 -XX:+CompilerThreadHintNoPreempt -Djava.library.path=native\\windows -Xms12g -Xmx12g -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

点评

大佬强啊,好用的一批  详情 回复 发表于 2023-10-19 17:09
感谢大佬!!!!! 战斗完全不卡顿了,满60帧运行,不过我看了下内存占用一直都只有400多m,大概不需要开到8g以上的内存  详情 回复 发表于 2023-6-11 19:24
感谢告知,现已实测可以运行。  详情 回复 发表于 2023-5-6 21:08

驱逐技师

 楼主| 发表于 2023-5-6 20:48:01 | 显示全部楼层
ALSSS 发表于 2023-5-6 14:53
那么应该怎样把这两个参数添加上去呢,我试着直接添加,但是打不开程序了 ...

你是java1.8吗 没遇到过打不开的情况

驱逐技师

 楼主| 发表于 2023-5-6 20:49:50 | 显示全部楼层
PS D:\games\Starsector0951\jre\bin> ./java.exe -version
openjdk version "1.8.0_275"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_275-b01)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.275-b01, mixed mode)

点评

请问这段是什么意思啊? java8是不是就是jdk1.8.0? 我换了vmparams内容直接打不开了。。。  详情 回复 发表于 2024-1-8 11:20

势力巨擘

发表于 2023-5-6 21:08:57 | 显示全部楼层
6g3y 发表于 2023-5-6 20:47
java.exe -XX:CompilerThreadPriority=1 -XX:+UseG1GC -XX:MaxGCPauseMillis=30 -XX:+CompilerThreadHint ...

感谢告知,现已实测可以运行。

势力巨擘

发表于 2023-5-9 08:17:36 | 显示全部楼层
这个和指南贴更新java8会有冲突吗?
和指南贴修改vmparams的方法也不一样,那个用了其他代码?好像是存档不卡顿的方法,可以一起用吗?

点评

垃圾处理方式不同,指南贴用的是CMS GC,这个用的是G1 GC  详情 回复 发表于 2023-9-26 18:43

势力巨擘

发表于 2023-5-9 09:43:07 | 显示全部楼层
6g3y 发表于 2023-5-5 23:46
我都玩3天了,根本没有卡顿

大佬!发个教程或者视频!大佬,我想学!

战列舰长

发表于 2023-5-9 21:49:56 | 显示全部楼层
6g3y 发表于 2023-5-6 20:49
PS D:\games\Starsector0951\jre\bin> ./java.exe -version
openjdk version "1.8.0_275"
OpenJDK Runtime  ...

大佬可以加你qq详细问你嘛?

星域军阀

晴岚号舰长

发表于 2023-5-14 10:07:35 | 显示全部楼层
大佬你好,请问一下除开修改vmparams文件以外,是否需要更换游戏自带的jre
别的国家喜欢在船上带修理队修修补补,英国人喜欢在船上装一座造船厂造半艘新的.jpg

巡洋大副

发表于 2023-6-9 15:42:54 | 显示全部楼层
大佬nb,终于不用被内存溢出折磨了,感谢万分!

战列舰长

发表于 2023-6-11 19:24:34 | 显示全部楼层
6g3y 发表于 2023-5-6 20:47
java.exe -XX:CompilerThreadPriority=1 -XX:+UseG1GC -XX:MaxGCPauseMillis=30 -XX:+CompilerThreadHint ...

感谢大佬!!!!!
战斗完全不卡顿了,满60帧运行,不过我看了下内存占用一直都只有400多m,大概不需要开到8g以上的内存

战列舰长

发表于 2023-6-13 00:44:45 | 显示全部楼层
呃,运行一段时间后反而比原来的设置更卡了,原来的卡是帧数低但稳定,现在的方案是一顿一顿,更难受
而且还出现过闪退报错,space gem什么的

战列舰长

燃烧你的梦!我上周新涂的烤漆!

发表于 2023-6-24 23:30:04 | 显示全部楼层
本帖最后由 黑梦777 于 2023-6-25 00:14 编辑

@wuyi 大佬给出了另外一个vmparams解决方案,那个方法体感卡顿比该方法还小,但好像还是单核?您这个方法明显降低了我的电脑负担,大规模战斗时完全不卡顿了,不过在保存等操作时还会明显卡死一瞬,请问能否结合一下两方之长?

巡洋大副

发表于 2023-7-12 08:21:03 | 显示全部楼层
试试~谢谢

驱逐技师

发表于 2023-7-19 04:38:21 | 显示全部楼层
我的是1.8 282版本 用不了这个-XX:+UseG1GC吗?  我的是1.8 282版本 用了这个参数就启动不了游戏 打开没反应

巡洋大副

发表于 2023-8-6 16:53:40 | 显示全部楼层
太感谢了,帧数直接翻倍稳定60

巡洋大副

发表于 2023-8-6 18:24:49 | 显示全部楼层
nb

巡洋大副

发表于 2023-8-16 17:25:52 | 显示全部楼层
打不开游戏的 加一行  -Xverify:none 代码,这个是限制指定JRE版本解除的  我加了就能打开了 0.96 RC10

点评

顶一下 打不开的看这楼!!  详情 回复 发表于 2023-8-20 23:24

战列舰长

发表于 2023-8-19 22:24:08 | 显示全部楼层
66666 之前游戏打开一会就内存爆炸 现在 不会了 大佬666

巡洋大副

发表于 2023-8-20 23:22:39 | 显示全部楼层
1.8.0_382用这个参数会直接打不开启动器

巡洋大副

发表于 2023-8-20 23:24:51 | 显示全部楼层
0.91 发表于 2023-8-16 17:25
打不开游戏的 加一行  -Xverify:none 代码,这个是限制指定JRE版本解除的  我加了就能打开了 0.96 RC10 ...

顶一下  打不开的看这楼!!

点评

能帮忙看下加的位置对吗,不懂代码 java.exe -XX:CompilerThreadPriority=1 -XX:+UseG1GC -XX:MaxGCPauseMillis=30 -XX:+CompilerThreadHintNoPreempt -Djava.library.path=native\\windows -Xverify:none -Xms12g -  详情 回复 发表于 2023-11-14 11:06

势力巨擘

科造万物以养人,人无一核以报科

发表于 2023-8-21 12:33:30 | 显示全部楼层
1.8.0_192添加参数后打不开启动器,不知道是不是用了之前wuyi佬的方法的原因

巡洋大副

发表于 2023-9-3 20:23:06 | 显示全部楼层
275一样,加了也用不了

驱逐技师

发表于 2023-9-13 22:06:14 | 显示全部楼层
我算是看出来了,玩这游戏 不懂个代码啥的玩不了,我硬是没看懂上面说了个啥,意思是复制楼主那一段代码加进vmparams里?各种闪退的想说“***,退钱”

势力巨擘

红花

发表于 2023-9-14 11:32:53 | 显示全部楼层
这个配置需要更强的中央处理器cpu
sigline - 副本 - 副本 - 副本.gif
sigline - 副本 - 副本.gif
sigline - 副本 2 - 副本.gif
sigline - 副本 2.gif
sigline - 副本.gif
sigline.gif

驱逐技师

发表于 2023-9-26 18:43:28 | 显示全部楼层
翔子 发表于 2023-5-9 08:17
这个和指南贴更新java8会有冲突吗?
和指南贴修改vmparams的方法也不一样,那个用了其他代码?好像是存档不 ...

垃圾处理方式不同,指南贴用的是CMS GC,这个用的是G1 GC

巡洋大副

发表于 2023-10-19 17:09:20 | 显示全部楼层
6g3y 发表于 2023-5-6 20:47
java.exe -XX:CompilerThreadPriority=1 -XX:+UseG1GC -XX:MaxGCPauseMillis=30 -XX:+CompilerThreadHint ...

大佬强啊,好用的一批

巡洋大副

发表于 2023-11-10 23:40:35 | 显示全部楼层
大地图卡顿有办法解决不,战斗稳定60帧,但是大地图只有15帧,emmm

巡洋大副

发表于 2023-11-14 11:06:34 | 显示全部楼层
本帖最后由 q71445357 于 2023-11-14 11:08 编辑
GTM99 发表于 2023-8-20 23:24
顶一下  打不开的看这楼!!

能帮忙看下加的位置对吗,不懂代码,换了电脑卡的不要不要的,战斗大地图15-20帧,还不时卡顿
java.exe -XX:CompilerThreadPriority=1 -XX:+UseG1GC -XX:MaxGCPauseMillis=30 -XX:+CompilerThreadHintNoPreempt -Djava.library.path=native\\windows -Xverify:none -Xms12g -Xmx12g -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

巡洋大副

发表于 2024-1-8 11:20:28 | 显示全部楼层
6g3y 发表于 2023-5-6 20:49
PS D:\games\Starsector0951\jre\bin> ./java.exe -version
openjdk version "1.8.0_275"
OpenJDK Runtime  ...

请问这段是什么意思啊?
java8是不是就是jdk1.8.0?
我换了vmparams内容直接打不开了。。。

点评

这是275版本的,像楼上说的添加-Xverify:none可以解除版本限制 java.exe -Xverify:none -XX:CompilerThreadPriority=1 这样  详情 回复 发表于 2024-1-8 19:10

巡洋大副

发表于 2024-1-8 19:10:25 | 显示全部楼层
本帖最后由 狂热牛皮癣 于 2024-1-8 19:12 编辑
远山 发表于 2024-1-8 11:20
请问这段是什么意思啊?
java8是不是就是jdk1.8.0?
我换了vmparams内容直接打不开了。。。 ...

这是275版本的,像楼上说的添加-Xverify:none可以解除版本限制
java.exe -Xverify:none -XX:CompilerThreadPriority=1 -XX:+UseG1GC -XX:MaxGCPauseMillis=30 -XX:+CompilerThreadHintNoPreempt -Djava.library.path=native\\windows -Xms12g -Xmx12g -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

本版积分规则

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

GMT+8, 2024-12-23 10:30

Powered by Discuz! X3.5

© 2001-2077 Tencent Cloud | Durian Software Studio

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