2016-06-21 91 views
-2

其实我最近在一次采访中被问到了这个问题,我回答了堆栈,我是对的,因为我认为线程会执行方法,但是请你解释为什么线程在堆栈中创建,或者如果不是,那么为什么创建它在堆中。在堆栈或堆内存中创建线程对象的位置?

在此先感谢

+4

以下链接可能会澄清您的疑问:http://stackoverflow.com/questions/19433523/where-is-thread-object-created-stack-or-heap –

+1

所有对象都在堆上创建,包括'Thread'对象。 – Kayaman

+1

一个线程对象总是在堆上创建(除非它没有启动) 大多数对象都是在堆上创建的(就像它是这样的),但是在某些情况下,当一个对象可以通过Escape Analysis确定具有没有转义方法,它可以将对象放在堆栈上。在线程的情况下,除非它没有实际启动,否则这是不可能的。 –

回答

0

之间的主要区别内存和内存是堆栈存储器用于存储局部变量,而堆内存用来存储Java对象的函数调用。无论在代码中创建对象的位置。

因此线程对象存储在堆中。

另外每个线程都有自己的堆栈来存放自己的本地变量和函数调用。