线程局部区域(TLA)和线程堆栈大小(Xss)之间有什么区别?

时间:2012-10-17 06:52:18

标签: java multithreading gcc parameters

正如我读到的那样:

http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/geninfo/diagnos/tune_app_thruput.html#wp998772

TLA是:线程局部区域(TLA)是用于对象分配的空闲内存块。 TLA是从堆中保留的,并根据需要提供给Java线程,这样Java线程就可以分配对象,而不必为每个对象分配与其他Java线程同步。

我认为线程堆栈区域用于此目的(并且还保持卡住的调用)。

究竟有什么区别?

2 个答案:

答案 0 :(得分:5)

正如定义所说,线程局部区域是堆的一部分,每个线程可以分配对象。所有线程都访问同一个堆:线程1可以访问线程2创建的对象,反之亦然; TLA 仅为对象分配分隔堆:每个线程只能分配该区域中的对象,但可以访问堆中的任何对象。

线程堆栈是堆栈的一部分;每个线程都有自己的堆栈,线程堆栈大小提到堆栈的大小。线程无法访问其他线程的堆栈。

答案 1 :(得分:0)

TLA是堆的一部分。堆栈不在堆上。

如果您不理解堆栈和堆之间的区别,请参阅this other question