我对Java没什么概念。
我浏览了一些链接,发现博客上写着“存储在堆栈上的Java原语”,我觉得这取决于实例变量或局部变量。
经过几个环节,我的结论是,
类变量(原语)作为对象的一部分存储在堆中。
类变量——对象(用户定义)——作为对象的一部分存储在堆中。这对于参考对象和实际对象都是正确的。
方法变量——基元——作为堆栈框架的一部分存储在堆栈上。
方法变量-对象(用户定义)-存储在堆上,但是对堆上该区域的引用作为堆栈框架的一部分存储在堆栈上。如果Object中包含另一个对象,引用也可以存储在堆中。
静态方法(实际上是所有方法)以及静态变量都存储在堆中。
如果我的理解有误,请指正。谢谢。
对象存储在堆中。
存储在堆栈中的对象引用。
静态变量存储在方法区域中。
实例
abc obj=new abc();
abc对象保存在堆中,对象引用存储在堆栈中。
static int i=10;
i方法区域中存储的变量。
"方法变量-对象(用户定义)-存储在堆中,但是..."
错误的首先,方法变量称为局部变量。
让我们考虑一下
public static void main(String[] args) {
List<Integer> model = new ArrayList<Integer>();
变量model
放在堆栈框架中,而不是堆上。使用新建ArrayList生成的引用对象
三件事:
变量模型
- 生成对象
- 对该对象的引用,存储在变量中
它们完全不同,不要把它们弄乱。
JVM中有一些优化甚至可能使用对象堆栈,这减少了垃圾收集工作。
类存储在堆的特殊部分,但这取决于您使用的JVM。(热点中的Permgen f.e.)
一般来说,您不必考虑数据存储在何处,而应该更多地考虑语义,如可见性和某物的寿命。到目前为止,你在问题中的解释看起来不错。
问题内容: 我对Java不太了解。 我浏览了几个链接,发现博客上写着“ Java Primitives存储在堆栈上”,我觉得这取决于实例变量或局部变量。 经过几个链接后,我的结论是, 类变量(基元)作为对象包含的对象的一部分存储在堆中。 类变量– object(用户定义)–作为其包含的Object的一部分存储在堆中。对于参考对象和实际对象都是如此。 方法变量-基元-作为该堆栈框架的一部分存储在堆栈
问题内容: 我只知道非基元(对象)放在堆上,方法在堆栈上,但是基元变量呢? -更新 根据答案,我可以说堆可以有一个新的堆,并且给定对象可以堆吗?假设对象将具有基本变量和引用变量。 问题答案: 本地定义的基元将在堆栈中。但是,如果将原语定义为对象实例的一部分,则该原语将位于堆上。 关于更新: 对象没有自己的堆栈。在我的示例中,实际上是的每个实例的一部分。只要分配了HeapClass的实例(例如),就
问题内容: 标识符或变量名在Java中存储在哪里?我知道对象会存储在堆中,变量会存储在堆或栈中,具体取决于变量的类型和范围。我们可以调试或编写任何程序来确认它吗? 感谢和问候 问题答案: 字段 名称作为类元数据的一部分存储在以前的PermGen now-Metaspace中。 数组元素 没有名称,只有数字。(提示Patrick McGoohan。) 如果选择了该选项,则 方法和构造函数参数的 名称
问题内容: 我有个问题 例如,当我在方法内部声明变量时会发生什么。 在堆栈或堆中的哪里分配了myShip参考? 我认为是在堆栈中,但由于我在阅读《 J2ME游戏编程》“ Java类已实例化到Java堆”上而感到困惑 所有Java类别? 提前致谢 问题答案: 是对对象的引用,位于方法调用堆栈上,称为“堆栈”。当一个方法被称为一个内存块被推到栈顶时,该内存块有空间容纳所有原语(int,float,bo
因此,我知道对堆栈中分配的变量调用会导致无效指针错误。 在ED指针中,在实际指针之前分配8个字节,以保留关于指针大小的信息。因此,我想知道是否在一个结构之前做了一个,然后在该结构上调用free,是否可以释放该结构(当然,这偏离了分配这8个字节是所做的唯一额外的事情的假设)。 我想我的最后一个问题是,堆栈变量分配和堆分配之间是否有真正的区别(就后端对内核的调用而言)。
问题内容: 我在标准Windows命令窗口中有一个正在运行的Java进程。即我已经运行’cmd’并在java -jar中键入… 我需要尽可能获得所有线程的完整堆栈转储。 我记得在Linux下,您可以通过quit命令上的选项将消息发送到JVM。 在此文件中为太阳状态 若要在Windows 95或Windows NT平台上生成堆栈跟踪,请在运行Java程序的窗口中输入键序列,或单击窗口上的“关闭”按钮