V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mko0okmko0
V2EX  ›  Android

太多 AS 卡慢停当问题,怒发 jvm 参数,此良药有点毒,服用前请看注解选择服用.

  •  
  •   mko0okmko0 · 2015-11-06 22:17:35 +08:00 · 10100 次点击
    这是一个创建于 3307 天前的主题,其中的信息可能已经有所发展或是发生改变。
    依照使用环境肯定不会每个人都一样快,优化后比原来更慢的请不要喷,但欢迎讨论可能的原因.
    studio(64).exe.vmoptions:-da 之前的参数改成以下(去除含#后的注解和空行):
    -server #先调到 server 模式,很多预设参数直接优化了,启动稍慢但资源消耗有比较好.
    #我喜欢先设小,然后依需求消耗 ram,并设定回收百分比参数提早回收.一开始就大,你的 ram 肯定回收不了,设小才有回收机会
    -Xms4m #设多小能正常用就设多小,反正都是省 ram.
    -Xmx1280m #一个 jvm 最多消耗的 ram,实际消耗还要加上 Perm
    -Xss256k #设多小能正常用就设多小,反正都是省 ram.
    -XX:+AggressiveOpts #开启官方激进优化
    -XX:PermSize=8m #设多小能正常用就设多小,反正都是省 ram.
    -XX:+UseG1GC #我喜欢不分新旧带的混合回收管理.用 AggressiveOpts 才有,大家依照自己喜欢的选 cms 爆发回收或是并行回收
    -XX:+UseStringDeduplication #G1GC 送的字串重复空间回收,据说省 80%重复字串资源.
    -XX:MaxHeapFreeRatio=40 #提早回收延迟分配 ram
    -XX:MinHeapFreeRatio=30 #提早回收延迟分配 ram
    -XX:MaxGCPauseMillis=200 #每次回收 ram 的时间不要超过 0.2 秒,避免卡,但会增加顿的机会,用顿换不卡
    -XX:GCTimeRatio=4 #用 1/(1+4)=20%的 CPU 资源处理回收 ram 的消耗,预设是 1/(1+19)=5%所以预设的回收很慢,多给他 CPU 资源换取 ram.反正 cpu 很少用满.
    -XX:G1ReservePercent=25 #G1GC 回收参数.看官方说明按喜好调整.
    -XX:InitiatingHeapOccupancyPercent=0 #G1GC 一直标记可回收 ram.我喜欢持续回收.用顿换不卡
    -XX:+ScavengeBeforeFullGC #回收卡死之前尝试再次局部回收.用顿换不卡
    -XX:+DoEscapeAnalysis #分析优化,没啥感觉.
    #优化执行过程产生的 BIN.
    -XX:+UseFastAccessorMethods
    -XX:+UseFastEmptyMethods
    -XX:+UseFastJNIAccessors

    -XX:UseAVX=2 #不加这个买赛扬算了,浪费好 CPU,=2:当你有小于 2 的 AVX 或是没有会自动降级和停用,所以加了也没差.
    -XX:UseSSE=5 #不加这个买赛扬算了,浪费好 CPU,=5:当你有小于 5 的(s)sse 或是没有会自动降级和停用,所以加了也没差.不能大于 5 会出错.
    -XX:+UseSSE42Intrinsics #不加这个买赛扬算了,浪费好 CPU,上面的不能启动 sse4.2.要这条.
    #都是动态化使用资源,用顿换不卡
    -XX:+UseTLAB
    -XX:+ResizeTLAB
    -XX:+UseAdaptiveGCBoundary
    -XX:+UseAdaptiveSizePolicy

    -XX:CompileThreshold=8000 #-server 后有效,当 jvm 用脚本模式执行某程式某段几次后转成原生 BIN,次数将影响产生的 BIN 品质,越小越差但越快完成,经大量测试,8000 之后的数字优化结果几乎同等 8000 所以是 8000 次后转 BIN.
    -XX:+TieredCompilation #当转 BIN 之后再次执行 8000 次后转第 2 次,终极优化 BIN.
    -XX:+BackgroundCompilation #转 BIN 的时候用最低优先权的背景线程去转,让你的桌面工作顺畅.

    studio.vmoptions 也是以上内容

    甚至环境参数 java_opts 也设,这样 jvm 启动时有发现 java_opts,就会以该内容的参数来启动 java,让所有 java 都能优化,但有些 JAVA 会跟以上部分参数冲突,导致无法启动,所以可以开小以点:
    java_opts= -Xms4m -Xss384k -XX:PermSize=8m -XX:+AggressiveOpts -XX:MaxHeapFreeRatio=40 -XX:MinHeapFreeRatio=30 -XX:MaxGCPauseMillis=200 -XX:GCTimeRatio=4 -XX:+ScavengeBeforeFullGC -XX:+UseFastAccessorMethods -XX:+UseFastEmptyMethods -XX:+UseFastJNIAccessors -XX:UseAVX=2 -XX:UseSSE=5 -XX:+UseSSE42Intrinsics -XX:+UseTLAB -XX:+ResizeTLAB -XX:+UseAdaptiveGCBoundary -XX:+UseAdaptiveSizePolicy -XX:CompileThreshold=8000 -XX:+TieredCompilation -XX:+BackgroundCompilation
    第 1 条附言  ·  2015-11-11 07:48:25 +08:00
    我为了说清楚一些参数结果边查边实验,又改进了参数表,但我不会修改文章,所以发到 JAVA 区了:
    https://www.v2ex.com/t/235137#reply0
    请大家前往此篇讨论.
    6 条回复    2015-11-10 17:54:07 +08:00
    halou12
        1
    halou12  
       2015-11-06 22:27:40 +08:00 via Android
    战略马克
    lyz1990
        2
    lyz1990  
       2015-11-06 22:40:56 +08:00
    不卡的表示淡定 233
    kaedea
        3
    kaedea  
       2015-11-06 22:42:56 +08:00
    …… 上了三星的 SSD+16GDDR3 后,很久没有这些烦恼了
    顺便说一下 我的电脑是 12 年的普通笔记本
    dezng
        4
    dezng  
       2015-11-10 09:37:50 +08:00
    :)
    试一下,看效果怎么样
    dezng
        5
    dezng  
       2015-11-10 11:43:06 +08:00
    注释掉此配置文件中的
    -XX:+UseStringDeduplication
    原有配置文件中的
    -XX:+UseConcMarkSweepGC

    以前开两份源码会卡,现在不卡了,用久一点看怎么样。
    mko0okmko0
        6
    mko0okmko0  
    OP
       2015-11-10 17:54:07 +08:00
    我为了说清楚一些参数结果边查边实验,又改进了参数表,但我不会修改文章,所以发到 JAVA 区了:
    https://www.v2ex.com/t/235137#reply0
    请大家前往此篇讨论.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2811 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 15:07 · PVG 23:07 · LAX 07:07 · JFK 10:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.