Java垃圾回收(garbage collection)介绍

根据网络资料优化整理



常用虚拟机 hotport JRockit IBMJVM

 

Jdk 默认的oracle 的hotport (常用)

 

GC 使程序员可以不必关注内存

 

大型软件开发和检查内存泄露和溢出,解决性能瓶颈,提高并发,使程序更加高效还是要了解GC机制;

 

Java内存区:

 

1:程序计数器(小)行号指示器

   线程私有,每个线程对应一个计数器

2:栈 statck

    线程私有,每个线程对应一个栈

2.1 虚拟机栈  栈帧 方法调用 入栈,执行完成,出栈;

2.2 本地方法栈

3:堆 heap(最重要的区域,内存分配主要指堆)

   线程共享区域

   机制:分代分配,分代回收

  OutOfMemoryError:Java heap space

  3.1  年轻代  经常GC

       采用停止-复制算法 YongGC

       Eden (内存连续空间)创建新对象,98%很快消亡,满了GC

Survivor0

Survivior1 必须有一个是空白的

8:1:1

活了15次copy年老代(hotport)

如果分配 survivor大于 10% 多于分配到年老代

  3.2  年老代 GC次数比年轻代少

       对象大大多于年轻代,大对象

       采用标记—整理算法 Full GC

                   标记存活对象,向一端移动,保证内存连续;

                   yongGC时虚拟机检查 进入年老代的大小是否大于剩余空间,如果大于进行FullGC

       

       

4:方法区(永久代)

  OutOfMemoryError:Permgen Space

       线程共享区域

       存储已经被虚拟机加载的类信息,final常量,静态变量,编译的代码

       很少GC

       常用两种

       回收没有引用的常量;

       回收卸载已加载的无用类;

 

5:直接内存

     除jvm之外的内存

 

垃圾回收器来做GC,GC的具体实现;实现上述算法;

 


你可能感兴趣的:(java感想)