`

jvm性能优化

阅读更多

1.性能优化指标

预期吞吐量、预期响应延迟、最大并发数、并发数最大时可接受的吞吐量和延迟、最坏延迟、垃圾收集对延迟的影响

2.性能分析的方法:自顶向下、自底向上

3.操作系统性能监控

1)cpu使用率:vmstat  top

监控信息:用户态%、系统态%、io等待时间%、空闲时间%、运行队列

2)内存使用率:free  vmstat(si so)  

3)锁竞争:pidstat -w

4)网络IO:nicstat

5)磁盘IO:iostat iotop dstat

4.JVM概述

1)hotspot三组件:Runtime JIT MM  (2个JIT[server client]和一个解释器)

2)提高CPU缓存命中率(Ordinary Object Pointers)  -XX:+UseCompressedOops

3)VM类加载:类加载阶段(加载、链接、初始化)、类加载委派、启动类加载器(client模式下加速加载,类数据共享 -Xshare:on/off)、类型安全、hotspot类元数据、内部的类加载数据

4)偏向锁:-XX:+UseBiasedLocking

5)错误显示:-XX:+ShowMessageBoxOnError

-XX:OnOutOfMemeryError=<cmd>  -XX:+HeapDumpOnOutOfMemery  -XX:HeapDump- Path=<path>

6)垃圾收集器

分代垃圾收集:存活时间和对象引用

新生代:Eden、Survivor(from to),minorGC过程中,当to的空间不足时则过早提升,甚至造成晋升失败而进行fullGC,Eden区域使用了指针碰撞,只需检测top到Eden end之间的容量即可,在Eden区中有一小块内存TLAB避免安全加锁影响分配性能。

老年代、永久代

垃圾收集器分类:

Serial:新生代复制算法,老年代标记-压缩,串行方式stop-the-world

Parallel(Throughput):吞吐量为先,新生代复制算法,老年代标记-清除,并行的方式进行GC

Mostly-Concurrent:低延迟为先,CMS收集器,新生代依然同于上2种,而老年代中尽量与用户线程并发工作

初始标记-预清除-重新标记-并发清除(每个动作都是并发的)

由于空闲空间不是连续的,所以必须有空闲列表进行记录,这对MinorGC造成了开销,晋升时候都的在old区进行内存分配,都得记录到空闲列表。

Garbage-First:将堆分成相同尺寸的region,region中垃圾堆积的价值、优先列表、Remenbered Set

7)应用程序对收集器的影响

内存分配、存活数据量、老年代中的更新

8)编译器

解释器->编译器  (引用计数器和回边计数器)

Client JIT和Server JIT

混合JIT:-server -XX:+TieredCompilation

9)自适应调优

-XX:+PrintCommandLIneFlags查看自动优化参数

5.JVM性能监控

1)垃圾收集

-XX:+UseParalleGC/-XX:+UseParallelOldGC时,可带参数-XX:-ScavengeBeforeFullGC可在FullGC前不惊醒MinorGC

-XX:+PrintGCDetails  -verbose:gc

-XX:+UseConcMarkSweepGC  使用CMS收集器

监控晋升分布:-XX:+PrintTenuring-Distribution

-XX:+PrintGCTimeStamps  -XX:+PrintGCDateStamps -xloggc:<filename>

应用并发时间和应用停止时间:

-XX:+PrintGCApplicationConcurrentTime  -XX:+PrintGCApplicationStoppedTime

安全点:-XX:+PrintSafepointStatistics

2)图形化工具

jconsole:启动应用是加上参数 -Dcom.sun.management.jmxremote

visualVM:远程监控需要策略文件jstatd.policy

grant codebase "file:${java.home}/../lib/tool.jar" {

    permission java.security.AllPermission;

}

jstat -J -Djava.security.policy=/absolutePath/jstatd.policy

jps remote_hostname

JMX: com.sun.management,jmxremote.port/ssl[true | false]/authenticate[true | false]

3)JIT编译器

编译器监控:-XX:+PrintCompilation

4)类加载:永久代

-XX:PermSize  -XX:MaxPermSize

5)Mbean进行应用监控

6.java性能分析

1)工具:http://developer.51cto.com/art/201204/327130.htm   http://www.ibm.com/developerworks/cn/java/j-lo-profiling/index.html?ca=drs-

2)性能优化的机会:使用更高效的算法、减少锁竞争、为算法生成更有效的代码

3)应用程序的系统需求

可用性、可管理性、延迟及响应性、内存占用、启动时间

4)JVM运行模式

-server(复杂的生成代码优化功能)  -client(启动快,内存小)   混合模式

5)垃圾收集器调优

性能属性:吞吐量、延迟、内存占用

原则:MinorGC垃圾收集最大化、GC内存最大化、GC调优3选2(吞吐量、延迟、内存)

6)确定内存占用

活跃数据:长期存活对象或FullGC后还活着的对象
堆大小设置成老年代活跃数据的3~4倍  -Xms -Xmx

新生代设置成老年代活跃数据的1~1.5倍

永久代是永久代的活跃数据1.2~1.5  -XX:PermSIze=n -XX:MaxPermSIze=n

7)延迟调优

分别统计MinorGC和FullGC的时间和次数

-XX:SurvivorRatio=<ratio>

-XX:MaxTenuringThreshold=<n>

-XX:CMSInitiatingOccupancyFraction=<percent>

-XX:+UseCMSInitatingOccupancyOnly

禁止显示GC:-XX:ExplicitGCInvokerConcurrent -XX:ExplicitGCInvokerConcurrentAndUnloadsClasses

CMS永久代垃圾收集:

-XX:+CMSClassUnloadingEnabled

-XX:+CMSPermGenSweepingEnabled

-XX:CMSInitiatingPermOccupancyFraction=<percent>

-XX:+UseCMSInitatingOccupancyOnly

重新标记使用线程数:-XX:ParallelGCThreads=<n>

-XX:+CMScavengeBeforeRemark  -XX:+ParallelRefProcEnabled

8)实验性最大优化:-XX:+AggressiveOpts

9)逃逸分析:-XX:+DoEscapeAnalysis

10)偏向锁:-XX:UseBiasedLocking

12)大页面:-XX:+UseLargePages

 

7.java多线程实现:通过线程轮询将线程分配给处理器执行。

-XX:+PrintFlagsFinal  -XX:+PrintFlagsInitial

-XX:MaxDirectMemorySize -verbose:class -XX:TraceClassLoading -XX:TraceClassUnloading

-XX:PreTenuringSizeThreshold=xxx

 

8.垃圾收集算法和收集器

Mark-sweep  Copying  Mark-Compact Generational-Collection

Serial/Serial Old   ParNew  Parallel Scavenge/Parallel Old(Throghput)  CMS   G1

 

9.工具

jps jstat jinfo jmap jhat jstack jconsole visualvm

分享到:
评论

相关推荐

    Jvm性能优化-JVM内存结构原理分析03

    "Jvm性能优化-JVM内存结构原理分析03" Jvm性能优化是Java虚拟机(JVM)中非常重要的一部分,它对Jvm的性能产生了很大的影响。本文将从Jvm内存结构的角度来分析Jvm性能优化的原理。 Jvm内存结构主要分为五部分:堆...

    JVM性能优化(PPT)

    **JVM性能优化** 在Java开发中,JVM(Java Virtual Machine)是至关重要的组成部分,它负责运行所有的Java应用程序。JVM性能优化是一项细致而关键的任务,能够显著提升程序的运行效率,减少资源消耗,提高系统稳定...

    JVM性能优化笔记

    JVM性能优化笔记 ------------------------------------------

    JVM性能优化相关问题.pdf

    本次分享的内容将涵盖Java类的加载过程、类加载机制、内存分配和垃圾收集机制等关键知识点,这些内容对于理解Java程序的性能优化至关重要。 首先,我们来探讨Java类加载的过程,这个过程包括了加载、验证、准备、...

    面试必问之jvm与性能优化.docx

    ### jvm性能优化相关知识点详解 #### 一、JVM加载Class文件的原理机制 **1.1 类加载概述** Java虚拟机(JVM)在执行Java程序时,并不会一次性加载所有的类,而是采取按需加载的方式。这种方式可以有效减少内存消耗...

    JVM性能优化相关问题

    以下是一些关于JVM性能优化的关键知识点: 1. **内存管理:** - **堆内存**:Java对象主要存储在堆内存中,分为新生代(Young Generation)和老年代(Old Generation)。新生代又细分为Eden区和两个Survivor区。...

    JVM性能优化相关面试题21道.pdf

    在深入探讨JVM性能优化相关面试题之前,先了解Java虚拟机(JVM)中类加载过程、JVM加载Class文件的原理机制以及Java内存分配的知识点是非常有必要的。 首先,Java类加载过程共有七个步骤,这七个步骤分别是:加载、...

    【面试资料】-(机构内训资料)JVM性能优化相关问题.zip

    JVM性能优化是提高Java应用性能的关键环节,对于开发者来说,深入理解JVM的工作原理并进行有效优化至关重要。下面我们将详细探讨JVM性能优化的相关知识点。 1. **类加载机制**:JVM通过类加载器将类的.class文件...

    JVM性能优化

    ### JVM性能优化详解 #### JVM基础知识 在深入了解JVM性能优化之前,我们首先需要了解JVM的基本概念。JVM(Java Virtual Machine)是运行Java字节码的虚拟机环境,它为Java应用程序提供了运行时环境。JVM的核心...

    JVM性能优化相关问题.zip

    JVM性能优化相关问题.zip

    jvm详细介绍以及性能优化方法

    在JVM性能优化中,我们重点关注垃圾收集(GC)和内存管理。GC的主要任务是自动回收不再使用的对象所占用的内存空间,避免内存泄漏。了解不同类型的GC算法,如串行GC、并行GC、CMS(Concurrent Mark Sweep)和G1...

    JVM系列之性能调优参考手册(实践篇).pdf

    标题《JVM系列之性能调优参考手册(实践篇)》涉及的知识点主要集中在Java虚拟机(JVM)性能调优的实践操作。...因此,手册的实践操作部分对于开发者来说是作为深入理解和应用JVM性能调优知识的参考。

    Java虚拟机JVM性能优化(一):JVM知识总结

    最后,为了更好地诊断和分析JVM性能,我们可以使用各种工具,如JVisualVM、JConsole、JProfiler等,它们可以提供内存、线程、CPU使用情况的实时监控,帮助定位问题。 总之,Java虚拟机的性能优化是一个涉及多方面...

    JVM性能优化:线程锁优化.docx

    Java虚拟机(JVM)性能优化的一个重要领域是线程锁优化,这直接影响到多线程应用程序的效率和并发性能。线程锁是确保多线程环境下数据一致性和线程安全的关键机制。以下是对线程锁优化的一些核心知识点的详细说明: ...

    JVM和性能优化学习思维笔记_swim5we_jvm_性能优化_

    这份思维笔记会深入探讨以上各个知识点,通过实例和案例分析,帮助开发者从理论到实践全面掌握JVM性能优化的技巧。通过学习和应用这些知识,不仅可以提升Java应用的运行效率,还能在面对复杂的系统问题时,更快速、...

    阿里巴巴Java性能调优实战(2021-2022华山版)+Java架构核心宝典+性能优化手册100技巧.rar

    性能优化手册是一套java性能学习研究小技巧,包含内容:Java性能优化、JVM性能优化、服务器性能优化、数据库性能优化、前端性能优化等。 内容包括但不限于: String 性能优化的 3 个小技巧 HashMap 7 种遍历方式...

    JVM性能优化值导出报表2

    在本文中,我们将深入探讨Java虚拟机(JVM)性能优化的一个具体案例,涉及的是一个批量导出功能引发的内存管理问题。这个问题涉及到的主要知识点包括Java内存模型、垃圾收集器(Garbage Collector, GC)的选择以及...

Global site tag (gtag.js) - Google Analytics