• JVM性能


    1、压缩指针

    2、每个线程的栈的大小Xss

    3、线程太多,栈空间飙升

    4、堆【eden(8/10)              from(1/10)                           to(1/10)                      老年代(2/3)】

    minor  GC

    full  GC

    STW

     (新生代设置大大一些然后不停的创建一些临时的变量,survivor)

    先把所有的永久对象驱赶到老年代,然后执行System.gc(),这样字就可以知道永久对象的大小了。

    java  -showversion     -Dkey=value      App   (设置系统参数)

    -Xcomp  -Xint   -Xmixed

    普通参数  -D参数    -X参数    -XX参数

    -XX参数

      ·boolean类型      -XX:+DisableExplicitGC    -XX:-DisableExplicitGC

      非boolean类型      -XX:NewRatio=1

    -Xms  -Xmx (-Xmx2048m等价于-XX:MaxHeapSize=2048m)              (-Xms2048m等价于-XX:InitialHeapSize=2048m)

    -XX:+PrintFlagsFinal  打印所有的JVM参数(启动的时候)

    jinfo   -flags     jcid(查看正在运行的JVM参数)

    jps -l

     元空间的原因:

    jstat查看堆内存的使用情况:

      jstat -class jcid

      jstat -compiler jcid

      jstat -gc jcid

      jstat -gc jcid   1000    5  (每一秒打印一次,一共打印5次)

    jmap -heap  jcid

    jmap -histo jcid  |  more      查看对象信息

    jmap -histo:live  jcid  |  more      查看对象信息

    jmap  -dump:format=b,file=fileName  jcid

    jhat对dump文件进行分析

    jhat  -port   9999   dumpFile     和   eclipse   MAT工具

    -XX:+HeapDumpOnOutOfMemoryError

    jstack检测线程情况

    性能调优的手段之一可以学习netty一样,用对象池来管理对象,避免GC进行频繁的垃圾回收

    容器中对象的释放问题

    调优的步骤:

    1、设置最大内存和最小内存

    2、设置新生代的大小(-Xmn  -XX:NewSize  -XX:MaxNewSize)

    怎么防止内存震荡

    3、设置线程栈的大小-Xss(每个线程所能持有的栈的大小)

    4、设置新生代和老年代的比例大小-XX:Ratio;设置eden和survivor的比例大小  -XX:SurvivorRatio    -XX:TargetSurvivorRatio

    5、编译器的调优

    -version  -Xcomp  -Xint   -Xmixed

    -XX:+PrintGCDetails

    6、-XX:MetaspaceSize    -XX:MaxMetaspaceSize

    7、为什么需要对象池,避免频繁的回收与申请

    8、压缩指针

    1、jps -l

    2、jps  -v

    3、jinfo -flags 71236

    4、java -XX:+PrintFlagsFinal

    5、jinfo -flag +PrintGCDetails 43520动态的设置参数

    6、jstat -gc pid

    jstat -gcutil pid

    jstat -gcnew pid

    jstat -gcold pid

    7、jstat -class pid

    8、jstat -compiler pid

    1、编译器的优化

    2、池化技术(线程调优)

    3、缓冲管理

    1、jps  jinfo查看虚拟机配置参数

    2、jstat参看虚拟机统计信息

    3、打印垃圾回收信息

    4、通过垃圾货收信息首先配置元空间的大小,防止内存震荡

    5、确认初始化的老年代的大小(适当的调大新生代,适当的调整晋级老年代的策略,通过不同的创建新对象把一些持久化的对象驱赶到老年代)

    6、参数:垃圾回收时间+系统吞吐量+系统响应时间(指定相应的垃圾回收器)

    7、然后再次调整老年代的大小

    8、确认新生代的大小【确认eden空间大小和survivor空间的大小】

    通过系统最大吞吐量来确定eden空间的大小

    通过系统最大吞吐量和系统响应时间来确定survivor空间的大小

    9、确认eden和survivor的比例大小

    9、jmap查看虚拟机的内存状况(内存泄漏问题)(内存不断的增加现象)

    10、jstack查看虚拟机的线程状况(死锁信息)(cpu100%)

    11、选择指针压缩策略

    12、选择不用类校验器

    怎么快速的找到枚举根节点,(在类加载,或者JIT编译器中的OopMap中记录下类),在OopMap的帮助下,可以快速且准确的完成GCRoots枚举

    只有在安全点才有OopMap数据结构,主动式中断

    虚拟机在离开安全区域时会检测是否完成了根节点的枚举

    RememberedSet是记录新生代和老年代的对象相互引用的情况下的问题的

    Java虚拟机是面向操作数栈的架构,Linux系统是面向寄存器的架构

    类的生命周期:加载+验证+准备+解析+初始化+使用+卸载

  • 相关阅读:
    改进ls的实现(课下作业)
    stat命令的实现-mysate
    (选做)实现mypwd
    2019-2020-1 20175209 20175213 20175214 实验五 通讯协议设计
    2019-2020-1 20175209 20175213 20175214 实验四 外设驱动程序设计
    2019-2020-1 20175209 20175213 20175214 实验三 并发程序
    2019-2020-1 20175209 20175213 20175214 实验三 并发程序
    2019-2020-1 20175209 20175213 20175214 实验一 开发环境的熟悉
    2018-2019-2 20175213实验五 《网络编程与安全》实验报告
    2018-2019-2 20175213实验四 《Android开发基础》实验报告
  • 原文地址:https://www.cnblogs.com/erdanyang/p/13052812.html
Copyright © 2020-2023  润新知