• IDEA与eclipse:vm参数调优笔记


    我的电脑配置12G内存,64位,win10系统。

      首先,idea,是在idea中安装目录下的bin目录下面找到idea64.exe.vmoptions ,要是有32位的同学注意找到idea32.exe.vmoptions的文件去编辑。

      更改文件,无非大多数情况下就是堆和栈的溢出或者编码格式问题。如果出现堆溢出(java.lang.OutOfMemoryError: Java heap space),可更改堆区的Xms还有Xmx的大小或者非堆区(持久化内存)的-XX:PermSize-XX:MaxPermSize的大小,具体大小得看你电脑得配置,还有你项目编译需要的内存。

      要是出现java.lang.StackOverflowError,这种栈溢出得话,就添加一下-Xss128k  ,修改一下栈的大小,这里的128看情况更改,也可以自己尝试其它参数。一般小的应用, 如果栈不是很深, 应该是128k够用的 大的应用建议使用256k。一般出现栈溢出的错误,一般都是递归的错误,才出现Stack满的情况,而无限循环一般不会占用更多的内存或者具体的Stack,只是占cpu而已。

    -Xms1024m   //设置堆最小值为1G,表示java虚拟机堆区内存初始内存分配的大小
    -Xmx2048m  //设置堆最大值为2G,表示java虚拟机堆区内存可被分配的最大上限
    -XX:ReservedCodeCacheSize=512m   //设置缓存大小
    -XX:+UseConcMarkSweepGC     //并发标记清除(CMS)收集器
    -XX:SoftRefLRUPolicyMSPerMB=50   //每兆堆空闲空间中SoftReference的存活时间
    -ea
    -Dsun.io.useCanonCaches=false
    -Djava.net.preferIPv4Stack=true  //设置网络编程获取IPv4 的地址
    -XX:+HeapDumpOnOutOfMemoryError  //当堆内存空间溢出时输出堆的内存快照。
    -XX:-OmitStackTraceInFastThrow //强制要求JVM始终抛出含堆栈的异常
    -Dfile.encoding=UTF-8    //设置编码格式

    eclipse (eclipse更改vm参数在ecplise安装目录下找到eclipse.ini文件),更改参数。

    -startup
    plugins/org.eclipse.equinox.launcher_1.5.0.v20180512-1130.jar
    --launcher.library
    plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.700.v20180518-1200
    -product
    org.eclipse.epp.package.jee.product
    -showsplash
    org.eclipse.epp.package.common
    --launcher.defaultAction
    openFile
    --launcher.defaultAction
    openFile
    --launcher.appendVmargs
    -vmargs      //这里开始VM参数
    -Dosgi.requiredJavaVersion=1.8   //指定JDK1.8版本,有时候项目版本问题也可以更改这个参数      
    -Dosgi.instance.area.default=@user.home/eclipse-workspace
    -XX:+UseG1GC                    // 指定G1垃圾回收器,G1垃圾回收器适用于堆内存很大的情况,他将堆内存分割成不同的区域,并且并发的对其进行垃圾回收。
                                    //G1也可以在回收内存之后对剩余的堆内存空间进行压缩。并发扫描标记垃圾回收器在STW情况下压缩内存。G1垃圾回收会优先选择第一块垃圾最多的区域
    -XX:+UseStringDeduplication       //删除重复的字符串,只保留一个char[]来优化堆内存
    --add-modules=ALL-SYSTEM
    -Dosgi.requiredJavaVersion=1.8  //指定JDK1.8版本,有时候项目版本问题也可以更改这个参数
    -Dosgi.dataAreaRequiresExplicitInit=true
    -Xms512m                       //分配最小堆512m
    -Xmx2048m                        //分配最大堆2048m内存
    --add-modules=ALL-SYSTEM
    JVM按照其存储数据的内容将所需内存分配为堆区非堆区两个部分:
    • 堆区即为通过new的方式创建的对象(类实例)所占用的内存空间     (参数-Xms  -Xmx)
    • 非堆区即为代码、常量、外部访问(如文件访问流所占资源)等        (参数-XX:PermSize,-XX:MaxPermSize)
  • 相关阅读:
    HashMap遍历的两种方式
    抽象类和接口的区别是什么
    “用户、组或角色'XXX'在当前数据库中已存在”问题
    FCKEditor在IE10下的不兼容问题解决方法
    ADODB.Connection 错误 '800a0e7a' 未找到提供程序。该程序可能未正确安装。解决方法!
    ASP.NET中Url重写后,打不开真正的Html页面
    运用正则表达式在Asp中过滤Html标签代码的四种不同方法
    静态页分页功能js代码
    .NET生成静态页面的方案总结
    禁止ViewState的3种解决方法
  • 原文地址:https://www.cnblogs.com/yswyzh/p/10138699.html
Copyright © 2020-2023  润新知