实例化和启动Java线程时分配了多少内存(大致)?
以下是代码示例:
// Definition of the thread class
class BasicThread extends Thread {
// This method is called when the thread runs
public void run() {
}
}
.
.
.
// Create and start the thread
Thread thread = new BasicThread();
thread.start();
答案 0 :(得分:7)
线程(即对象)本身需要一些空间 - 它确实有十几个变量和对象(而且我太懒了,无法正确计算它们)但它应该只有200byte(您基本上必须计算所有原语和引用[平凡,那些具有固定大小 - 但引用依赖于您的VM]然后计算由类分配的所有对象的大小[热点VM具有2个字的开销每个对象(如果对象中没有局部变量,则为3)并在8字节边界上分配])
真正占用空间的是线程本地堆栈,它可以受到VM的-Xss标志的影响(尽管请注意每个操作系统对最大堆栈空间有一些限制,你可以用linux中的-ulimit来影响它,当然不知何故在Windows中)。
热点的默认值如下:
在Java SE 6中,Sparc的默认值为 32位VM中512k,1024k 64位虚拟机。在x86 Solaris / Linux上 在32位VM中是320k,在1024k中是 64位虚拟机。
在Windows上,默认线程堆栈 从二进制文件中读取大小 (java.exe的)。截至Java SE 6,这个 32位VM中的值为320k 64位VM中的1024k。
答案 1 :(得分:0)
不知道Linux-32的行为方式。据推测,有点类似。
RGDS, 马丁