Java内存分配机制

Posted qianjinyan

tags:

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

内存分配,主要指的是在上的分配,

一般的,对象的内存分配都是在堆上进行,但现代技术也支持将对象拆成标量类型(标量类型即原子类型,表示单个值,可以是基本类型或String等),然后在栈上分配,在栈上分配的很少见,我们这里不考虑。

Java内存分配和回收的机制概括的说,就是:分代分配,分代回收

对象将根据存活的时间被分为:年轻代(Young Generation)、年老代(Old Generation)、永久代(Permanent Generation,也就是方法区)。

如下图(来源于《成为JavaGC专家part I》,http://www.importnew.com/1993.html):

技术图片

年轻代(Young Generation):对象被创建时,内存的分配首先发生在年轻代(大对象可以直接 被创建在年老代),大部分的对象在创建后很快就不再使用,因此很快变得不可达,于是被年轻代的GC机制清理掉(IBM的研究表明,98%的对象都是很快消 亡的),这个GC机制被称为Minor GC或叫Young GC。注意,Minor GC并不代表年轻代内存不足,它事实上只表示在Eden区上的GC。

年轻代上的内存分配是这样的,年轻代可以分为3个区域:Eden区(伊甸园,亚当和夏娃偷吃禁果生娃娃的地方,用来表示内存首次分配的区域,再 贴切不过)和两个存活区(Survivor 0 、Survivor 1)。内存分配过程为(来源于《成为JavaGC专家part I》,http://www.importnew.com/1993.html):

以上是关于Java内存分配机制的主要内容,如果未能解决你的问题,请参考以下文章

Java 内存管理机制:04 Java 内存分配策略

java虚拟机的内存分配与回收机制

Java GC 机制与内存分配策略

Java内存分配机制

Java学习之垃圾回收机制

垃圾收集机制与内存分配策略