当我在线程内创建对象的引用时会发生什么?

时间:2012-06-26 09:49:09

标签: java memory-management

我最近开始学习Java编程,我们只是访问了Java Threads主题。 我想要理解的是,假设我有一个Thread对象,在Object cat方法中创建run()的实例,据我所知(非常欢迎您如果我错了就纠正我)引用变量cat应该保存在堆中(使其对所有“活”线程都可见)。然而,我想要了解的是,在Object cat这个线程的“私有”堆栈中存储了什么样的数据。

4 个答案:

答案 0 :(得分:1)

不,引用变量不会在堆上..它将在线程的私有堆栈上...

当run方法执行时..创建的对象将是无引用的,因此使其自身符合GC ..

答案 1 :(得分:0)

您的cat变量将位于线程堆栈上,其可见性将是run方法。您生成的主线程和所有线程没有任何公共变量,除非您在线程和SO变量之间明确共享。

答案 2 :(得分:0)

cat引用(指针)将在线程堆栈中,cat对象将在堆中。

如果您想了解更多信息,可以查看此链接:

http://www.javaworld.com/javaworld/jw-06-2012/120618-jw-archive-under-the-hood-threads-and-shared-data.html

答案 3 :(得分:0)

run被执行时,对象将在heap中创建,但引用变量将位于Thread的私有堆栈中。