垃圾收集器与内存分配策略

Posted hello-yz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了垃圾收集器与内存分配策略相关的知识,希望对你有一定的参考价值。

1. 引用计数GC算法

每个对象都会有对应的计数器来计算对象引用,但JVM不会采用该策略,因为不能解决对象相互引用的回收。

public class ReferenceCountingGC {
    
    public Object instance = null;

    private static final int _1M = 1024 * 1024;
    
    private byte[] bigSize = new byte[2 * _1M];
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ReferenceCountingGC objA = new ReferenceCountingGC();
        ReferenceCountingGC objB = new ReferenceCountingGC();
        
        objA.instance = objB;
        objB.instance = objA;
        
        objA = null;
        objB = null;
        
        //GC
        System.gc();
    }

}

设置VM参数,打印GC日志

-XX:+PrintGC
-XX:+PrintGCDetails

部分GC日志:

[GC (System.gc()) [PSYoungGen: 6758K->584K(38400K)] 6758K->592K(125952K), 0.0015223 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
[Full GC (System.gc()) [PSYoungGen: 584K->0K(38400K)] [ParOldGen: 8K->515K(87552K)] 592K->515K(125952K), [Metaspace: 2554K->2554K(1056768K)], 0.0048039 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 

 

[GC (System.gc()) [PSYoungGen: 6758K->584K(38400K)] 6758K->592K(125952K), 0.0015223 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] [Full GC (System.gc()) [PSYoungGen: 584K->0K(38400K)] [ParOldGen: 8K->515K(87552K)] 592K->515K(125952K), [Metaspace: 2554K->2554K(1056768K)], 0.0048039 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 

 

以上是关于垃圾收集器与内存分配策略的主要内容,如果未能解决你的问题,请参考以下文章

垃圾收集器与内存分配策略之内存分配与回收策略

垃圾收集器与内存分配策略之垃圾收集器

Java垃圾收集器与内存分配策略

垃圾收集器与内存分配策略

垃圾收集器与内存分配策略-内存分配与回收策略

垃圾收集器与内存分配策略