JVM提供了諸多的參數進行JVM各個方面內存大小的設置,爲Java應用進行優化提供了諸多的工具,本文將會詳細分析各個參數的功能與使用。java
-XX:+PrintGC 每次觸發GC的時候打印相關日誌服務器
-XX:+UseSerialGC 串行回收多線程
-XX:+PrintGCDetails 更詳細的GC日誌jvm
-Xms 堆初始值工具
-Xmx 堆最大可用值性能
-Xmn 新生代堆最大可用值測試
-XX:SurvivorRatio 用來設置新生代中eden空間和from/to空間的比例.優化
-XX:NewRatio 配置新生代與老年代佔比 1:2spa
含以-XX:SurvivorRatio=eden/from=den/to線程
總結:在實際工做中,咱們能夠直接將初始的堆大小與最大堆大小相等,
這樣的好處是能夠減小程序運行時垃圾回收次數,從而提升效率。
-XX:SurvivorRatio 用來設置新生代中eden空間和from/to空間的比例.
堆溢出:java.lang.OutOfMemoryError:java heap space 堆內存溢出 緣由:內存不足 解決方法:JVM參數增大內存
垃圾回收基本原則:內存不足的時候去回收,內存若是足夠,暫時不會回收。減小回收次數與回收時間(回收影響系統性能)
棧溢出:java.lang.StackOverflowError 遞歸調用會發生 解決方法:設置線程最大調用深度 -Xss5m
內存泄露、內存溢出區別:
內存溢出,是在 申請 內存空間時,超出最大堆內存空間。
內存泄露,使用由於內存空間沒有及時的釋放(不收垃圾回收器控制),長時間致使佔用內存,最終致使內存溢出(太多static致使,IO流沒有關閉)。
垃圾收集器:
並行回收與串行回收區別:多線程與單線程(服務器通常都是並行接收)
cms收集器:
jmeter壓力測試工具:
jvm調優原則:一、減小垃圾回收次數 二、老年代空間大於新生代內存空間
調優:堆的初始值和堆的最大值最好一致(初始值過小會致使頻繁的垃圾回收)
垃圾回收機制次數和最大堆內存沒有關係,和初始堆內存有關係,最大內存作申請內存,核心仍是初始內存