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

堆栈或堆中分配变量引用的位置在哪里?

沈博涉
2023-03-14
问题内容

我有个问题

例如,当我在方法内部声明变量时会发生什么。

void myMethod(){
    运送myShip = new Ship();
}

在堆栈或堆中的哪里分配了myShip参考?

我认为是在堆栈中,但由于我在阅读《 J2ME游戏编程》“ Java类已实例化到Java堆”上而感到困惑

所有Java类别?

提前致谢


问题答案:

myShip是对Ship对象的引用,myShip位于方法调用堆栈上,称为“堆栈”。当一个方法被称为一个内存块被推到栈顶时,该内存块有空间容纳所有原语(int,float,boolean等)和该方法的对象引用,其中包括方法参数。堆是分配实际对象的内存的位置。

myShip在堆栈上也是如此,而Ship对象在堆上。

请注意,每个线程都有自己的堆栈,但共享堆。



 类似资料:
  • 我对Java没什么概念。 我浏览了一些链接,发现博客上写着“存储在堆栈上的Java原语”,我觉得这取决于实例变量或局部变量。 经过几个环节,我的结论是, 类变量(原语)作为对象的一部分存储在堆中。 类变量——对象(用户定义)——作为对象的一部分存储在堆中。这对于参考对象和实际对象都是正确的。 方法变量——基元——作为堆栈框架的一部分存储在堆栈上。 方法变量-对象(用户定义)-存储在堆上,但是对堆上

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

  • 问题内容: 我对Java不太了解。 我浏览了几个链接,发现博客上写着“ Java Primitives存储在堆栈上”,我觉得这取决于实例变量或局部变量。 经过几个链接后,我的结论是, 类变量(基元)作为对象包含的对象的一部分存储在堆中。 类变量– object(用户定义)–作为其包含的Object的一部分存储在堆中。对于参考对象和实际对象都是如此。 方法变量-基元-作为该堆栈框架的一部分存储在堆栈

  • 问题内容: 标识符或变量名在Java中存储在哪里?我知道对象会存储在堆中,变量会存储在堆或栈中,具体取决于变量的类型和范围。我们可以调试或编写任何程序来确认它吗? 感谢和问候 问题答案: 字段 名称作为类元数据的一部分存储在以前的PermGen now-Metaspace中。 数组元素 没有名称,只有数字。(提示Patrick McGoohan。) 如果选择了该选项,则 方法和构造函数参数的 名称

  • 我试图了解分配给堆栈和堆的内存量。假设sizeof(char)=1字节,sizeof(void*)=4字节。给定以下代码: 我们被告知分配给堆的内存量是5个字节,我明白这确实是malloc(strlen(str2)=5)中的量。但是,我不明白的是分配给堆栈的内存量是如何达到18个字节的?我想如果他们给我们一个指针大小是4个字节的信息,那么我们有4个字节的指针str1和另外6个字节的数组str2(包

  • 我对麋鹿栈没有太多的经验,我基本上只知道基础。 某些东西,即filebeat获取数据并将其发送到logstash Logstash 处理它并发送它 弹性搜索 Kibana 使用弹性搜索来可视化数据 (我希望这是正确的) 我需要创建一个elk系统,其中来自三个不同项目的数据被传递、存储和可视化。 项目号1。使用MongoDB,我需要将1个表中的所有信息放入kibana 项目2.也使用MongoDB,