Java对象所占用的内存主要林堆上进行分配,堆是所有线程共享的,因此在堆上分配内存时需要进行加锁,这导致了创建对象开销比较大。
SUN JDK为了提升内存分配的效率,会为每个新建的线程在新代代的Eden Space上分配一块独立的空间,这块空间称为TLAB,其大小由JVM根据运行情况计算而得。
在TLAB上分配内存时不用加锁,因此JVMd给线程中的对象分配内存时会尽量在TLAB上分配,如果对象过大或TLAB空间用完,刚仍然在堆上进行分配。因此在编写Java程序时,通常多个小的对象比大的对象分配起来更加高效。
配置参数有:
-XX:TLABWasteTargetPercent来设置TLAB可占用的Eden Space的百分比
-XX:+PrintTLAB来查看空间的使用情况
浙公网安备 33010602011771号