idea内存与功能调优

一.内存显示设置

效果

 显示设置

2020.1版本

双击Shift

二.idea运行内存设置

我的是16G

通过 Help - Edit Custom VM Options...菜单设置配置,IntelliJ会优先使用这个地方的配置文件

编辑idea64.exe.vmoptions文件,(2020默认配置的CMS回收器)

-Xms2048m
-Xmx2048m
-XX:ReservedCodeCacheSize=1024m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=100
-ea
-XX:CICompilerCount=2
-Dsun.io.useCanonPrefixCache=false
-Djdk.http.auth.tunneling.disabledSchemes=""
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-Djdk.attach.allowAttachSelf=true
-Dkotlinx.coroutines.debug=off
-Djdk.module.illegalAccess.silent=true
-javaagent:C:\Users\Public\.jetbrains\jetbrains-agent-v3.2.1.c46b.ed7=by https://zhile.io

2021默认使用的G1回收器

-Xms128m
-Xmx2004m
-XX:ReservedCodeCacheSize=512m
-XX:+UseG1GC
-XX:SoftRefLRUPolicyMSPerMB=50
-XX:CICompilerCount=2
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-ea
-Dsun.io.useCanonCaches=false
-Djdk.http.auth.tunneling.disabledSchemes=""
-Djdk.attach.allowAttachSelf=true
-Djdk.module.illegalAccess.silent=true
-Dkotlinx.coroutines.debug=off

G1垃圾回收与CMS垃圾回收有什么区别呢

Intellij IDEA 设置启动JVM参数 https://www.cnblogs.com/hongdada/p/10238758.html

CMS垃圾回收器和G1垃圾回收器区别 https://blog.csdn.net/shlgyzl/article/details/95041113java常用垃圾回收器G1和CMS有什么区别https://blog.csdn.net/qq_45901741/article/details/115683354

G1 与 CMS 两个垃圾收集器的对比 https://www.cnblogs.com/javago/p/14433416.html

G1垃圾回收器介绍与CMS区别:http://blog.itpub.net/69990087/viewspace-2753935/

CMS垃圾回收与G1垃圾回收的比较请参见:http://colobu.com/2015/04/14/G1-Getting-Started/

G1垃圾回收器介绍与CMS区别 https://my.oschina.net/jayhu/blog/4900556

JVM虚拟机垃圾回收CMS和G1的区别 https://www.pianshen.com/article/5063815942/

CMS 和 G1 垃圾回收器 https://zhuanlan.zhihu.com/p/59995724

参数作用:

    -Xms 设置初时的内存大小,提高Java程序的启动速度
    -Xmx 设置最大内存数,提高该值,可以减少内存Garage收集的频率,提高程序性能
    -XX:ReservedCodeCacheSize 设置代码内存容量
    -XX:+UseParNewGC 使用并行收集算法
    -server 控制内存garage方式,这样你无需在花一到两分钟等待内存garage的收集

JVM参数:-XX:ReservedCodeCacheSize

这个参数主要设置codecache的大小,比如我们jit编译的代码都是放在codecache里的,所以codecache如果满了的话,那带来的问题就是无法再jit编译了,而且还会去优化。因此大家可能碰到这样的问题:cpu一直高,然后发现是编译线程一直高(系统运行到一定时期),这个很大可能是codecache满了,一直去做优化。
代码缓存默认大小:
 

附网上查询的关于这个参数的一些描述:
JVM一个有趣的,但往往被忽视的内存区域是“代码缓存”,它是用来存储已编译方法生成的本地代码。代码缓存确实很少引起性能问题,但是一旦发生其影响可能是毁灭性的。如果代码缓存被占满,JVM会打印出一条警告消息,并切换到interpreted-only 模式:JIT编译器被停用,字节码将不再会被编译成机器码。因此,应用程序将继续运行,但运行速度会降低一个数量级,直到有人注意到这个问题。就像其他内存区域一样,我们可以自定义代码缓存的大小。相关的参数是-XX:InitialCodeCacheSize 和-XX:ReservedCodeCacheSize,它们的参数和上面介绍的参数一样,都是字节值。
 

如果依然报low memory:www.jianshu.com/p/06dd4ed371d2

-XX:MaxMetaspaceSize=2048m

三.方法区内存大小设置


1.方法区的大小可以不是固定的,JVM可以根据应用需要自动调整。
a)JDK7及以前(了解):-XX:PermSize设置永久代初始大小。-XX:MaxPermSize设置永久代最大可分配空间。(JDK7目前已经很少用了,这两个参数在JDK8及以后已经没有了,所以不必掌握,了解一下)


JDK8及以后:可以使用-XX:MetaspaceSize-XX:MaxMetaspaceSize设置元空间初始大小以及最大可分配大小。

参数解释:

-XX:MetaspaceSize:设置元空间大小
-XX:MaxMetaspaceSize:设置元空间最大大小
Java8以后,永久代被元空间取代,同时元空间不像永久代一样受制于堆内存,元空间是基于操作系统内存的,理论上讲,可以一直扩展内存直到操作系统的极限,所以设置元空间大小时,建议加上-XX:MaxMetaspaceSize参数,给个范围限制,避免元空间占用的内存一直增长。 


1.如果不指定元空间的大小,默认情况下,元空间最大的大小是系统内存的大小,元空间一直扩大,虚拟机可能会消耗完所有的可用系统内存。
2.如果元空间内存不够用,就会报OOM
3.默认情况下,对应一个64位的服务端JVM来说,其默认的-XX:MetaspaceSize值为21MB,这就是初始的高水位线,一旦元空间的大小触及这个高水位线,就会触发Full GC并会卸载没有用的类,然后高水位线的值将会被重置。
4.从第3点可以知道,如果初始化的高水位线设置过低,会频繁的触发Full GC,高水位线会被多次调整。所以为了避免频繁GC以及调整高水位线,建议将-XX:MetaspaceSize设置为较高的值.

具体设置多大,建议稳定运行一段时间后通过jstat -gc pid确认且这个值大一些,对于大部分项目256m即可。

由于调整元空间的大小需要Full GC,这是非常昂贵的操作,如果应用在启动的时候发生大量Full GC,通常都是由于永久代或元空间发生了大小调整,基于这种情况,一般建议在JVM参数中将MetaspaceSize和MaxMetaspaceSize设置成一样的值,并设置得比初始值要大,对于8G物理内存的机器来说,一般将这两个值都设置为256M(PS:读者可以根据自己的实际情况再调整)。

也有人不建议设置为一样的值,因为一旦系统因为元空间达到max 后果不堪设想
参数MetaspaceSize 通知回收就是一个保障机制, 而max可以设置更高 或者不设置
参数MetaspaceSize 应该设置一个基于系统的理论高值, 比如256M 这样一般不会触发 但是一旦触发还有一个到达MAX的缓冲值, 让程序员可以关注这片区域,如果参数MetaspaceSize和 maxSize设置一致, 那么出问题就无力回天了

补充

/*************************************************************************************************************/

-XX:MetaspaceSize这个JVM参数是指Metaspace扩容时触发FullGC的初始化阈值,也是最小的阈值。这里有几个要点需要明确

1.无论-XX:MetaspaceSize配置什么值,Metaspace的初始容量一定是21807104(约20.8m);

2.Metaspace由于使用不断扩容到-XX:MetaspaceSize参数指定的量,就会发生FGC;且之后每次Metaspace扩容都会发生FGC;

3.如果老年区配置CMS垃圾回收,那么第2点的FGC也会使用CMS算法进行回收;

4.Meta区容量范围为[20.8m, MaxMetaspaceSize);

5.如果MaxMetaspaceSize设置太小,可能会导致频繁FGC,甚至OOM;

无论-XX:MetaspaceSize和-XX:MaxMetaspaceSize两个参数如何设置,都会从20.8M开始,随着类加载越来越多不断扩容调整,上限是-XX:MaxMetaspaceSize,默认是几乎无穷大。

而JDK7中的Perm的话,通过配置-XX:PermSize以及-XX:MaxPermSize来控制这块内存的大小,jvm在启动的时候会根据-XX:PermSize初始化分配一块连续的内存块,这样的话,如果-XX:PermSize设置过大,就是一种赤果果的浪费。很明显,Metapsace比Perm好多了


/*************************************************************************************************************/

G1垃圾回收与CMS垃圾回收有什么区别呢

Intellij IDEA 设置启动JVM参数 https://www.cnblogs.com/hongdada/p/10238758.html

CMS垃圾回收器和G1垃圾回收器区别 https://blog.csdn.net/shlgyzl/article/details/95041113
 

java常用垃圾回收器G1和CMS有什么区别 https://blog.csdn.net/qq_45901741/article/details/115683354


G1 与 CMS 两个垃圾收集器的对比 https://www.cnblogs.com/javago/p/14433416.html


G1垃圾回收器介绍与CMS区别:http://blog.itpub.net/69990087/viewspace-2753935/


CMS垃圾回收与G1垃圾回收的比较请参见:http://colobu.com/2015/04/14/G1-Getting-Started/


G1垃圾回收器介绍与CMS区别 https://my.oschina.net/jayhu/blog/4900556


JVM虚拟机垃圾回收CMS和G1的区别 https://www.pianshen.com/article/5063815942/


CMS 和 G1 垃圾回收器 https://zhuanlan.zhihu.com/p/59995724

参考:

https://blog.csdn.net/weixin_38106322/article/details/109004181

https://blog.csdn.net/u011069294/article/details/107393331

https://www.jianshu.com/p/1fcb8fdb3359

https://www.cnblogs.com/javaadu/p/11742562.html

四.idea其他设置

项目运行内存

指定构建过程所需的堆大小。

 

maven导入

VM options for importer:可以设置导入的VM参数,一般这个都不需要主动改,除非项目真的导入太慢了我们再增大此参数,比如IDEA 新建maven项目 一直停在 loading archetype list

单行显示多个Tabs

File–>settings–>Editor–>General -->Editor Tabs–>去掉√

参考:

https://blog.csdn.net/zeal9s/article/details/83544074

https://www.cnblogs.com/qinxu/p/9706454.html

http://blog.oneapm.com/apm-tech/426.html

https://blog.csdn.net/lidf1992/article/details/75050219

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晨港飞燕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值