当前位置: 首页 > 面试题库 >

方法住哪里?堆还是堆?

南宫海超
2023-03-14
问题内容

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

如果我html" target="_blank">声明任何Thread对象,例如:

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

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


问题答案:

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

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

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

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



 类似资料:
  • 问题内容: 我知道常量池的概念以及JVM用于处理字符串文字的字符串常量池。但是我不知道JVM使用哪种类型的内存来存储String常量文字。堆栈还是堆?由于它的文字不与任何实例相关联,因此我假定它将存储在堆栈中。但是,如果没有任何实例引用该文字,则必须通过GC运行来收集文字(如果我错了,请纠正我),那么如果将其存储在堆栈中,该如何处理? 问题答案: 从技术上来说,答案都不是。根据Java虚拟机规范,

  • 根据Java, 字符串存储在两个地方。字符串字面池和堆内存根据其创建。我需要知道,当字符串赋值到另一个字符串时,新创建的字符串将存储在哪里? 我对堆和字符串池中的字符串类型都进行了赋值操作。我得到了这样的结果。 但是当, 如果我这么做 同样地, 现在 以上是我在IDE上得到的输出。根据该输出,strNew的一个新引用对象在字符串池中创建,strNew的一个新引用对象在堆中创建。对吗?

  • 我有一个应用程序的体系结构:view->viewmodel->repository->Datasource 我的DataSource正在消费一个webservice然后接收Soap对象,我想将其转换为自定义Pojo对象。因此,通过使用RxJava,我通过以下流程调用datasource方法: 视图模型 存储库 数据源 然后我想知道应该在哪里转换datasource调用中接收到的SoapObject

  • 我正在为我的数据库管理使用空间,而我在处理实时数据时,对使用什么感到困惑。目前,为了管理实时数据,我使用了,我对此非常满意。我感到困惑的是,我也可以使用来执行相同的操作。

  • 问题内容: 抱歉,如果这个问题很愚蠢,但是我无法用Java语法来解决问题。. 我了解了C / C ++,我知道View是一个很好的类。.但是我不明白View.OnClickListener()是否是方法。 我怀疑它是否会返回对象? 我认为View是一个具有静态OnClickListener成员对象的类。同样,这对我来说没有意义。. 有人可以解释这段代码在做什么吗? 那么这段代码是怎么回事? 是对x

  • 我读了比尔·文纳的《Java虚拟机内部》一书,这本书在第5章中详细探讨了JVM堆栈框架的组成。(这本书的这一章也恰好在这里正式出版:https://www.artima.com/insidejvm/ed2/jvm8.html)除了这本书,我还相对地研究了一些JVM的运行时数据区域,尤其是它们的堆栈和堆。 在实例方法的堆栈框架中,局部变量部分构成一个单词数组,其中包含方法参数(或参数)、局部变量和该