-  CPU 
   
 
    - 如果应用需要大量计算,会长时间占用CPU资源,导致其它应用因无法争夺到CPU而响应缓慢
  
    - 场景:代码递归导致的无限循环,JVM频繁的Full GC、多线程编程造成的大量上下文切换
  
   
   
  -  内存 
   
 
    - Java程序一般通过JVM对内存进行分配管理,主要使用JVM中的堆内存来存储Java创建的对象
  
    - 但内存空间有限,当内存空间被占满,对象无法回收,会导致内存溢出,内存泄露等问题
  
   
   
  - 磁盘IO
  
  - 网络:带宽
  
  - 异常:Java应用中,抛出异常需要构建异常栈,对异常进行捕获和处理,这个过程非常消耗系统性能
  
  - 数据库:数据库的操作往往涉及到磁盘IO的读写,大量的数据库读写操作,会导致磁盘IO的性能瓶颈
  
  -  锁竞争 
   
 
    - 在并发编程中,经常需要使用到多线程,并发读写同一个共享资源,为了保证数据原子性,会用到锁
  
    - 锁的使用会带来上下文切换,从而给系统带来性能开销
  
   
   
 
 
 性能指标 
 
 响应时间 
 
 
 
  
  -  一个接口的响应时间一般在 毫秒级 
  
  -  数据库响应时间:数据库操作所消耗的时间,往往是整个请求链中 最耗时 的 
  
  - 服务端响应时间:包括Nginx分发请求所消耗的时间以及服务端程序执行所消耗的时间
  
  - 网络响应时间:在网络传输时,网络硬件对需要传输的请求进行解析等操作所消耗的时间
  
  - 客户端响应时间:对于普通的Web、App客户端来说,该阶段的消耗时间是可以忽略不计的
  
 
 
 吞吐量 
 
  
  -  在测试中,比较关注 TPS (Transactions per second) 
  
  -  在系统中,可以把吞吐量分为两种: 磁盘吞吐量 、 网络吞吐量 
  
  -  磁盘吞吐量 
   
 
    -  IOPS :每秒的输入输出量(或读写次数),关注的是 随机读写性能 
      
  
    -  数据吞吐量 :单位时间内可以成功传输的数据量,对于大量顺序读写的应用,会传输大量连续数据 
      
  
   
   
  -  网络吞吐量 
   
 
    - 在网络传输没有帧丢失的情况下,设备能够接受的最大数据速率
  
    -  网络吞吐量的大小主要由 网卡的处理能力、带宽大小、内部程序算法 决定 
  
   
   
 
 
 资源使用率 
 
 CPU占用率、内存使用率、磁盘IO、网络IO
 
 负载承受能力 
 
 当系统压力上升时,系统响应时间的上升曲线是否平缓
 
 
        
                原文  
                http://zhongmingmao.me/2019/06/02/java-performance-opt-std/