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性能优化是Java虚拟机(JVM)中非常重要的一部分,它对Jvm的性能产生了很大的影响。本文将从Jvm内存结构的角度来分析Jvm性能优化的原理。 Jvm内存结构主要分为五部分:堆...
**JVM性能优化** 在Java开发中,JVM(Java Virtual Machine)是至关重要的组成部分,它负责运行所有的Java应用程序。JVM性能优化是一项细致而关键的任务,能够显著提升程序的运行效率,减少资源消耗,提高系统稳定...
JVM性能优化笔记 ------------------------------------------
本次分享的内容将涵盖Java类的加载过程、类加载机制、内存分配和垃圾收集机制等关键知识点,这些内容对于理解Java程序的性能优化至关重要。 首先,我们来探讨Java类加载的过程,这个过程包括了加载、验证、准备、...
### jvm性能优化相关知识点详解 #### 一、JVM加载Class文件的原理机制 **1.1 类加载概述** Java虚拟机(JVM)在执行Java程序时,并不会一次性加载所有的类,而是采取按需加载的方式。这种方式可以有效减少内存消耗...
以下是一些关于JVM性能优化的关键知识点: 1. **内存管理:** - **堆内存**:Java对象主要存储在堆内存中,分为新生代(Young Generation)和老年代(Old Generation)。新生代又细分为Eden区和两个Survivor区。...
在深入探讨JVM性能优化相关面试题之前,先了解Java虚拟机(JVM)中类加载过程、JVM加载Class文件的原理机制以及Java内存分配的知识点是非常有必要的。 首先,Java类加载过程共有七个步骤,这七个步骤分别是:加载、...
JVM性能优化是提高Java应用性能的关键环节,对于开发者来说,深入理解JVM的工作原理并进行有效优化至关重要。下面我们将详细探讨JVM性能优化的相关知识点。 1. **类加载机制**:JVM通过类加载器将类的.class文件...
JVM性能优化相关问题.zip
在JVM性能优化中,我们重点关注垃圾收集(GC)和内存管理。GC的主要任务是自动回收不再使用的对象所占用的内存空间,避免内存泄漏。了解不同类型的GC算法,如串行GC、并行GC、CMS(Concurrent Mark Sweep)和G1...
最后,为了更好地诊断和分析JVM性能,我们可以使用各种工具,如JVisualVM、JConsole、JProfiler等,它们可以提供内存、线程、CPU使用情况的实时监控,帮助定位问题。 总之,Java虚拟机的性能优化是一个涉及多方面...
Java虚拟机(JVM)性能优化的一个重要领域是线程锁优化,这直接影响到多线程应用程序的效率和并发性能。线程锁是确保多线程环境下数据一致性和线程安全的关键机制。以下是对线程锁优化的一些核心知识点的详细说明: ...
这份思维笔记会深入探讨以上各个知识点,通过实例和案例分析,帮助开发者从理论到实践全面掌握JVM性能优化的技巧。通过学习和应用这些知识,不仅可以提升Java应用的运行效率,还能在面对复杂的系统问题时,更快速、...
性能优化手册是一套java性能学习研究小技巧,包含内容:Java性能优化、JVM性能优化、服务器性能优化、数据库性能优化、前端性能优化等。 内容包括但不限于: String 性能优化的 3 个小技巧 HashMap 7 种遍历方式...
在本文中,我们将深入探讨Java虚拟机(JVM)性能优化的一个具体案例,涉及的是一个批量导出功能引发的内存管理问题。这个问题涉及到的主要知识点包括Java内存模型、垃圾收集器(Garbage Collector, GC)的选择以及...
java面试资料 当虚拟机启动时,解释器可以首先发挥作用,而不必等待编译器全部编译完成再执行,这样可以省去许多不必要的编译时间。并且随着程序运行时间的推移,编译器逐渐发挥作用,根据热点探测功能,,将有价值...