创建Java线程时的内存使用量

Arm*_*ian 6 java multithreading

实例化和启动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();
Run Code Online (Sandbox Code Playgroud)

Voo*_*Voo 7

那么线程(也就是对象)本身需要一些空间 - 它确实有十几个变量和对象(而且我太懒了,无法正确计算它们)但是它应该只是200byte(你可能只需要200byte)基本上必须计算所有原语和引用[平凡,那些具有固定大小 - 但引用依赖于您的VM]然后计算由类分配的所有对象的大小[热点VM具有每个对象2个字的开销( 3,如果对象中没有局部变量)并在8字节边界上分配])

真正占用空间的是线程本地堆栈,它可以受到VM的-Xss标志的影响(尽管请注意每个操作系统对最大堆栈空间有一些限制,你可以用linux中的-ulimit来影响它,并且肯定会在windows中以某种方式以及).

热点的默认值如下:

在Java SE 6中,Sparc的默认值在32位VM中为512k,在64位VM中为1024k.在x86 Solaris/Linux上,32位VM为320k,64位VM为1024k.

在Windows上,从二进制文件(java.exe)中读取默认的线程堆栈大小.从Java SE 6开始,该值在32位VM中为320k,在64位VM中为1024k.