我对Java没有太多的了解。
我浏览了几个链接,发现博客上写着"Java原语存储在堆栈上“,我觉得这取决于实例变量或局部变量。
经过几个环节之后,我的结论是,
类变量-原语-作为它所包含的对象的一部分存储在堆中。
类变量- Object (用户定义的)-作为Object的一部分存储在堆中。对于引用对象和实际对象都是如此。
方法变量-原语-作为堆栈框架的一部分存储在堆栈上。
方法变量-对象(用户定义的)-存储在堆上,但是对堆上该区域的引用作为堆栈框架的一部分存储在堆栈上。如果Object中包含另一个对象,引用也可以存储在堆中。
静态方法(实际上是所有方法)以及静态变量都存储在堆中。
如果我的理解有误,请纠正我。谢谢。
发布于 2013-10-16 19:33:06
在JVM中有一些优化,甚至可以使用Stack for Objects,这减少了垃圾收集工作。
类存储在堆的一个特殊部分,但这取决于您使用的JVM。(Permgen f.e.在热点<= 24中)。
一般来说,你不应该考虑数据存储在哪里,而应该更多地考虑语义,比如可见性和生命周期。到目前为止,你在问题中的解释看起来很好。
发布于 2013-10-16 19:57:32
对象存储在堆中。
存储在堆栈中的对象引用。
存储在方法区域中的静态变量。
示例
abc obj=new abc();
abc对象保存在堆中,对象引用存储在堆栈中。
static int i=10;
存储在方法区的I变量。
https://stackoverflow.com/questions/19402207
复制相似问题