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的條件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章