6.JVM调优

一、JVM调优

    1.jvm调优主要是内存空间的分配,目的是提高系统性能。主要调优方式:
        1.适当增加堆大小(也不能太大不然gc时间太长);
        2.-Xms初始堆大小 和-Xmx最大堆大小相同,减少内存扩容的开销
        3.减少full GC频率的方式:适当增加eden空间,让更多的对象留在年轻代;合理调整进入老年代的年龄;
        4.大对象(XX:PretenureSizeThreshold)直接放到老年代,以免影响年轻代高频率的minor gc;
        5.编码角度:尽量避免使用短时间存在的大对象、尽量不在循环中new对象;
        6.选用合适的gc

二、内存溢出

    1. 并不是内存完全耗空才OOM: 当jvm98%的时间都在gc且每次回收内存小于2%时也会。

    2.  java.lang.OutOfMemoryError: Java heap space. 堆溢出,最常见。内存泄露或者堆大小设置(Xmx/Xmn)不当导致
         java.lang.StackOverflowError. 栈溢出。深度递归或者Xss太小,导致超过栈大小(Xss)
         java.lang.OutOfMemoryError: PermGen space,永久代溢出,1.8没了。加载大量Class或者过多常量(比如字符串)导致溢出。

    3. OOM分析--heapdump

三、内存泄漏

    1.内存泄露:对象可达但已无用,无法被gc释放内存,导致可用内存越来越小。 根本原因:长生命周期的对象持有短生命周期对象的引用。

    2.集合类引用:先new对象,然后将对象的引用添加到集合内,此时该对象有两个引用(map.get(i)也是一个引用),同时将两个引用赋null才会被释放。static静态集合对象的生命周期=程序。
      单例模式是static,如果单例类中持有外部对象的引用时
      各种连接未关闭时(数据库、网络、IO)

    3.如何避免:少用static;少用String;无用对象及时赋null;缓存经常使用的对象

四、做过哪些jvm调优,用的什么方法,达到什么效果

    jps:查看所有的jvm进程,包括进程ID,进程启动的路径等等。
    jstack:观察jvm中当前所有线程的运行情况和线程当前状态。
    jstat:利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对进程的classloader,compiler,gc情况;
    jmap:监视进程运行中的jvm物理内存的占用情况,该进程内存内,所有对象的情况,例如产生了哪些对象,对象数量;
    jinfo:观察进程运行环境参数,包括Java System属性和JVM命令行参数。

 

 jvm的初始化步骤?类的加载过程
 jvm的内存结构?每块内存分别存的什么信息
 双亲委派模型
 GC算法,如何调优
 FULL GC的条件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章