前言
经过前面几篇文章,我们已经对JVM虚拟机有了个初步认识,也了解了各区域应用哪些收集器,以及每个收集器用哪些收集算法,但是在这一系列过程中,其实就是一个对象的由生到死的过程,那么在这过程中对象是怎么处理它的生命周期的呢,今天我们就来介绍下对象在内存中的分配和回收分配给对象的内存,那么,让我们带着愉快的周末心情来开启今天的JVM之旅吧。
内存分配
内存分配,通俗讲就是对象在堆上分配:对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配。少数对象也可能直接分配在老年代中,下面我们将具体讲解:
TLAB解释:全称为Thread Local Allocation Buffer即线程本地分配缓存,从名称上看是一个线程专用的内存分配区域,是为了加速对象分配而生的。每一个线程都会产生一个TLAB,该线程独享的工作区域,java虚拟机使用这种TLAB区来避免多线程冲突的问题,提高了对象分配的效率。TLAB空间一般不会太大,当大对象无法在TLAB上分配时,则会直接分配到堆上;
对象优先在Eden分配:大多数情况下,对象在新手代Eden区中分配,当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC,虚拟机提供-XX:+PrintGCDetails配置收集器日志参数,通知虚拟机在发生垃圾收集时打印内存回收日志,并且在进程退出时输出当前内存各区域分配情况。
大对象直接进