0
点赞
收藏
分享

微信扫一扫

JVM第四讲:JVM性能调优

小_北_爸 2022-03-26 阅读 71

JVM第四讲:性能调优

1、JVM 调优的参数可以在哪儿设置参数值

可以在IDEA,Eclipse,工具里设置
在这里插入图片描述

如果上线了是WAR包的话可以在Tomcat设置

如果是Jar包直接 :java -jar 直接插入JVM命令就好了

  • 补充图片

2、说一下 JVM 调优的工具?

JDK 自带了很多监控工具,都位于 JDK 的 bin 目录下,其中最常用的是 jconsole 和 jvisualvm 这两款视图监控工具

  • jconsole:用于对 JVM 中的内存、线程和类等进行监控

  • 在这里插入图片描述

  • jvisualvm:JDK 自带的全能分析工具,可以分析:内存快照、线程快照、程序死锁、监控内存的变化、gc 变化等

  • 在这里插入图片描述

Grafane:

  • todo 补充数据

3、常用的 JVM 调优的参数都有哪些?

#常用的设置

  • -Xms:初始堆大小,JVM 启动的时候,给定堆空间大小。
  • -Xmx:最大堆大小,JVM 运行过程中,如果初始堆空间不足的时候,最大可以扩展到多少。
  • -Xmn:设置堆中年轻代大小。整个堆大小=年轻代大小+年老代大小+持久代大小。
  • -XX:NewSize=n 设置年轻代初始化大小大小
  • -XX:MaxNewSize=n 设置年轻代最大值
  • -XX:NewRatio=n 设置年轻代和年老代的比值。如: -XX:NewRatio=3,表示年轻代与年老代比值为 1:3,年轻代占整个年轻代+年老代和的 1/4
  • -XX:SurvivorRatio=n 年轻代中 Eden 区与两个 Survivor 区的比值。注意 Survivor 区有两个。8表示两个Survivor :eden=2:8 ,即一个Survivor占年轻代的1/10,默认就为8
  • -Xss:设置每个线程的堆栈大小。JDK5后每个线程 Java 栈大小为 1M,以前每个线程堆栈大小为 256K。
  • -XX:ThreadStackSize=n 线程堆栈大小
  • -XX:PermSize=n 设置持久代初始值
  • -XX:MaxPermSize=n 设置持久代大小
  • -XX:MaxTenuringThreshold=n 设置年轻带垃圾对象最大年龄。如果设置为 0 的话,则年轻代对象不经过 Survivor 区,直接进入年老代。

#下面是一些不常用的

  • -XX:LargePageSizeInBytes=n 设置堆内存的内存页大小
  • -XX:+UseFastAccessorMethods 优化原始类型的getter方法性能
  • -XX:+DisableExplicitGC 禁止在运行期显式地调用System.gc(),默认启用
  • -XX:+AggressiveOpts 是否启用JVM开发团队最新的调优成果。例如编译优化,偏向锁,并行年老代收集等,jdk6之后默认启动
  • -XX:+UseBiasedLocking 是否启用偏向锁,JDK6默认启用
  • -Xnoclassgc 是否禁用垃圾回收
  • -XX:+UseThreadPriorities 使用本地线程的优先级,默认启用

4、JVM的GC收集器设置

-xx:+Use xxx GC
xxx 代表垃圾收集器名称

  • -XX:+UseSerialGC:设置串行收集器,年轻代收集器
  • -XX:+UseParNewGC:设置年轻代为并行收集。可与 CMS 收集同时使用。JDK5.0 以上,JVM 会根据系统配置自行设置,所以无需再设置此值。
  • -XX:+UseParallelGC:设置并行收集器,目标是目标是达到可控制的吞吐量;
  • -XX:+UseParallelOldGC:设置并行年老代收集器,JDK6.0 支持对年老代并行收集。
  • -XX:+UseConcMarkSweepGC:设置年老代并发收集器;
  • -XX:+UseG1GC:设置 G1 收集器,JDK1.9默认垃圾收集器;

5、标准中心虚拟机参数

6、什么是堆内存? 参数如何设置? 美团

堆内存是指由程序代码自由分配的内存,与栈内存作区分。

  • 在 Java 中,堆内存主要用于分配对象的存储空间,只要拿到对象引用,所有线程都可以访问堆内存
    • -Xmx, 指定最大堆内存。如 -Xmx4g. 这只是限制了 Heap 部分的最大值为 4g。这个内存不包括栈内存,也不包括堆外使用的内存。
    • -Xms, 指定堆内存空间的初始大小。如 -Xms4g。而且指定的内存大小,并不是操作系统实际分配的初始值,而是 GC 先规划好,用到才分配。专用服务器上需要保持 – Xms和 – Xmx 一致,否则应用刚启动可能就有好几个 FullGC。当两者配置不一致时,堆内存扩容可能会导致性能抖动
    • -Xmn, 设置堆中年轻代大小,等价于 -XX:NewSize,使用 G1 垃圾收集器 不应该设置该选项,在其他的某些业务场景下可以设置。官方建议设置为 -Xmx 的 1/2 ~ 1/4
    • -XX:MaxPermSize=size, 这是 JDK1.7 之前使用的。 Java8 默认允许的 Meta 空间无限大, 此参数无效。
    • -XX:MaxMetaspaceSize=size, Java8 默认不限制 Meta 空间, 一般不允许设置该选项。
    • -XX:MaxDirectMemorySize=size, 系统可以使用的最大堆外内存, 这个参数跟 -Dsun.nio.MaxDirectMemorySize 效果相同。
    • -Xss, 设置每个线程栈的字节数。 例如 -Xss1m 指定线程栈为 1MB, 与-XX:ThreadStackSize=1m 等价
举报

相关推荐

0 条评论