JVM-参数配置

/ java / 2 条评论 / 1380浏览

JVM调优/参数配置

XX参数

boolean类型

K-V类型

jinfo 查看当前运行程序的配置

经典参数-Xms、-Xmx

盘点查看JVM默认值

java -XX:+PrintFlagsInitial 
java -XX:+PrintFlagsFinal
java -XX:+PrintFlagsFinal -Xss128k T //T运行Java类的名字
java -XX:+PrintCommandLineFlags

JVM常用配置

总结(案例设置)

-Xms128m -Xmx4096m -Xss1024k -XX:MetaspaceSize=512m -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseSerialGC

InitialHeapSize

MaxHeapSize

ThreadStackSize

MetaspaceSize

PrintCommandLineFlags

PrintGCDetails

UseSerialGC

GC详情面板

[GC (Allocation Failure) [PSYoungGen: 2048K->488K(2560K)] 2048K->708K(9728K), 0.0177434 secs] [Times: user=0.00 sys=0.00, real=0.03 secs] 
GC名称(Young)         【GC前Young内存占用->GC后Young内存占用(Young总大小)】 【GC前JVM堆占用->GC后JVM堆占用(JVM堆大小)】 【用户耗时,系统耗时,实际耗时】

SurvivorRatio

NewRation

MaxTenuringThreshold

四大引用(强、软、弱、虚)

强引用

Object obj = new Object();
Object obj1 = obj; //两个都是强引用
obj = null; //这样会清理掉obj,并不会清理掉obj1

软引用SoftReference

Object obj = new Object();
SoftReference obj1 = new SoftReference(obj);
obj = null; //这样会清理掉obj,但在内存不足的时候就会把obj1清理掉

弱引用WeakReference

Object obj = new Object();
WeakReference obj1 = new WeakReference(obj);

obj = null;
System.gc(); //gc之后obj1就等于null了

虚引用PhantomReference

OOM(内存用完)

StackOverflowError

    public static void StackOverflowErro(){
        StackOverflowErro();//递归调用
    }

OutOfMemeoryError:Java heap sapce

    public static void OOMJavaHeapSpace(){
        byte[] bytes = new byte[20 * 1024 * 1024];
    }

OutOfMemeoryError:GC overhead limit exceeded

    public static void OOMGCoverHeadLimitExceeded(){
        int i = 0;
        List<String> list = new ArrayList<>();
        try {
            while (true){
                list.add(String.valueOf(i++).intern());
            }
        }catch (Exception e){
            System.out.println("*************i:" + i);
            e.printStackTrace();
        }
    }

OutOfMemeoryError:Direct buffer memory

OutOfMemeoryError:unable to create new native thread

        for (int i = 0; ; i++) {
            System.out.println("************" + i);
            new Thread(() -> {
                try {TimeUnit.SECONDS.sleep(Integer.MAX_VALUE);} catch (Exception e) {e.printStackTrace();}
            }, "" + i).start();
        }

OutOfMemeoryError:Metaspace