一、初始JVM分配內存
1、JVM默認的初始內存大小為物理內存的1/64,最小為1MB。
2、如果應用一開始就需要大量內存,可以通過調整初始內存大小來提升性能。
3、可以通過-Xms參數設置初始內存大小,例如:-Xms4g表示初始內存為4GB。
$ java -Xms4g -Xmx8g HelloWorld
二、JVM內存分配比例
1、JVM內存可分為年輕代、老年代和元數據區,在分配內存時,可通過參數-Xmn,-XX:NewRatio和-XX:SurvivorRatio調整各個區的內存比例。
2、年輕代內存越大,垃圾回收次數越少,中斷時間越短。同時,在年輕代中,可再分為Eden區和Survivor區,可以適當調整Survivor區的大小。
$ java -Xmn2g -XX:NewRatio=3 -XX:SurvivorRatio=4 HelloWorld
三、垃圾回收演算法
1、JVM提供了多種垃圾回收演算法,如Serial、Parallel、CMS、G1等。可以通過-XX:+UseSerialGC、-XX:+UseParallelGC、-XX:+UseConcMarkSweepGC、-XX:+UseG1GC等參數設置垃圾回收演算法。
2、在使用了CMS或G1垃圾回收演算法後,可以通過參數-XX:CMSInitiatingOccupancyFraction和-XX:G1HeapRegionSize調整垃圾收集器的堆內存使用率和內存塊大小。
$ java -XX:+UseG1GC -XX:G1HeapRegionSize=1m -XX:MaxGCPauseMillis=200 HelloWorld
四、堆外內存分配
1、JVM堆外內存不會被垃圾回收,但與堆內內存相比,堆外內存的堆上分配速度要快得多。
2、可以通過DirectByteBuffer等API分配堆外內存。如果需要擴展堆外內存空間,可以通過-XX:MaxDirectMemorySize參數設置,例如:-XX:MaxDirectMemorySize=1g。
$ ByteBuffer buffer=ByteBuffer.allocateDirect(128 * 1024 * 1024);
五、日誌輸出調優
1、日誌輸出會影響應用的性能,可以通過減少日誌輸出、禁用某些日誌等方式提高應用性能。
2、日誌輸出可以通過配置文件或命令行參數進行調整,例如:-Dlog4j.debug=false。
log4j.logger.org.apache.zookeeper=ERROR
log4j.logger.org.apache.kafka=ERROR
原創文章,作者:VIQH,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/131191.html