Java对象所占用的内存主要林堆上进行分配,堆是所有线程共享的,因此在堆上分配内存时需要进行加锁,这导致了创建对象开销比较大。

SUN JDK为了提升内存分配的效率,会为每个新建的线程在新代代的Eden Space上分配一块独立的空间,这块空间称为TLAB,其大小由JVM根据运行情况计算而得。

在TLAB上分配内存时不用加锁,因此JVMd给线程中的对象分配内存时会尽量在TLAB上分配,如果对象过大或TLAB空间用完,刚仍然在堆上进行分配。因此在编写Java程序时,通常多个小的对象比大的对象分配起来更加高效。

 

配置参数有:

-XX:TLABWasteTargetPercent来设置TLAB可占用的Eden Space的百分比

-XX:+PrintTLAB来查看空间的使用情况 

posted on 2010-07-31 10:46  ALVINZ  阅读(174)  评论(0)    收藏  举报