方法住哪里?堆还是堆?


问题内容

我知道方法的局部变量和参数驻留在堆栈中,但是我无法弄清楚在Java情况下方法实际上在哪里?

如果我声明任何Thread对象,例如:

Thread t=new Thread();
t.start();

因此,这意味着除了主方法之外,我还创建了一个单独的方法调用。这是什么意思?这是否意味着在堆栈内存上调用单独的方法序列?我对吗?


问题答案:

每个线程都分配有自己的堆栈。

本文对Java进程中的内存分离进行了很好的介绍。

在Java虚拟机内部,每个线程都被授予一个Java堆栈,该堆栈包含其他线程无法访问的数据,包括该线程调用的每个方法的局部变量,参数和返回值。堆栈上的数据仅限于基本类型和对象引用。在JVM中,不可能将实际对象的映像放置在堆栈上。所有对象都驻留在堆上。

我已经看到许多方案,其中客户端基于每个线程只做很少的事情实现了线程数量巨大的服务器,并且它们遇到了内存问题。那是因为每个线程都分配有自己的堆栈,并且(显然)加起来了。我
认为 默认值为每个线程512k,但是我还没有找到一个规范的来源。