嘿,伙计们,我正在复习一些问题,但我真的搞不懂,我看了课本,但我不确定我能在哪里找到答案……
我知道做没有图片的内存图是相当困难的,但请耐心等待。
interface Lovable
public void love();
class Foo implements Lovable
public void love();
// something
public int val()
// return something1
public class Love
public static void main(String args [])
Foo foo = new Foo()
foo.love()
foo.love()
int bar = =foo.val()
System.out.print(v)现在,我看到foo是用new声明的,所以我知道实际的Foo类信息存储在堆中,并且有一个框架指针?它指向堆栈顶部的堆中的内存空间(在foo调用任何方法之前)。那么界面又如何呢?它也会存储在堆中吗?
所以在堆栈的底部是类Love(也包含int bar),一个指向堆中Foo foo的指针,一个用于foo.love()的帧,另一个帧foo.love(),一个用于foo.val()的帧,一个用于打印的帧?
我明白你的意思了吗?还是我真的离得太远了?如果您知道哪里可以获得更多信息,请让我知道。我很感谢你的意见..
发布于 2009-11-11 20:03:17
发布于 2009-11-11 20:34:22
内存布局依赖于JVM,JVM在如何使用内存方面有很大的回旋余地,只要它们维护程序员所考虑的Java对象模型的逻辑视图。Sun JVM有几个“堆”,因为它实现了分代垃圾收集。对象是在eden空间中创建的,eden空间被视为堆栈,因此可以非常快速地创建对象。如果它们存在足够长的时间,对象就会移动到更长的世代,而这些世代的实现更像是普通的动态分配的堆。JVM将类和内部字符串存储在"permspace“堆中。Permspace实际上并不是永久性的:当不再引用类的实例或类加载器时,就会收集类。而且,如上所述,如果Java 6可以确定对对象的引用没有离开块,它将在调用堆栈上分配一个对象。
发布于 2009-11-11 20:05:29
foo引用位于堆栈上。foo指向的对象在堆上(在简单的情况下,它实际上可以优化到堆栈上,但从概念上讲,它在堆上)。
对象的类可以有超类并实现接口。但是,无论字段是在哪个类中声明的,实例字段都保存在堆上相同的内存分配中。
https://stackoverflow.com/questions/1714674
复制相似问题