2016-06-21 92 views
-2

其實我最近在一次採訪中被問到了這個問題,我回答了堆棧,我是對的,因爲我認爲線程會執行方法,但是請你解釋爲什麼線程在堆棧中創建,或者如果不是,那麼爲什麼創建它在堆中。在堆棧或堆內存中創建線程對象的位置?

在此先感謝

+4

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

+1

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

+1

一個線程對象總是在堆上創建(除非它沒有啓動) 大多數對象都是在堆上創建的(就像它是這樣的),但是在某些情況下,當一個對象可以通過Escape Analysis確定具有沒有轉義方法,它可以將對象放在堆棧上。在線程的情況下,除非它沒有實際啓動,否則這是不可能的。 –

回答

0

之間的主要區別內存和內存是堆棧存儲器用於存儲局部變量,而堆內存用來存儲Java對象的函數調用。無論在代碼中創建對象的位置。

因此線程對象存儲在堆中。

另外每個線程都有自己的堆棧來存放自己的本地變量和函數調用。