首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java和内存布局

java和内存布局
EN

Stack Overflow用户
提问于 2009-11-11 19:44:25
回答 3查看 2.3K关注 0票数 0

嘿,伙计们,我正在复习一些问题,但我真的搞不懂,我看了课本,但我不确定我能在哪里找到答案……

我知道做没有图片的内存图是相当困难的,但请耐心等待。

代码语言:javascript
复制
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()的帧,一个用于打印的帧?

我明白你的意思了吗?还是我真的离得太远了?如果您知道哪里可以获得更多信息,请让我知道。我很感谢你的意见..

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-11 20:03:17

通常,are对象存储在由垃圾收集器管理的heap上。

只有latest release of Java 6具有转义分析功能,以便在对象不转义时将其存储在堆栈上。

类信息存储在perm space中。

票数 3
EN

Stack Overflow用户

发布于 2009-11-11 20:34:22

内存布局依赖于JVM,JVM在如何使用内存方面有很大的回旋余地,只要它们维护程序员所考虑的Java对象模型的逻辑视图。Sun JVM有几个“堆”,因为它实现了分代垃圾收集。对象是在eden空间中创建的,eden空间被视为堆栈,因此可以非常快速地创建对象。如果它们存在足够长的时间,对象就会移动到更长的世代,而这些世代的实现更像是普通的动态分配的堆。JVM将类和内部字符串存储在"permspace“堆中。Permspace实际上并不是永久性的:当不再引用类的实例或类加载器时,就会收集类。而且,如上所述,如果Java 6可以确定对对象的引用没有离开块,它将在调用堆栈上分配一个对象。

票数 1
EN

Stack Overflow用户

发布于 2009-11-11 20:05:29

foo引用位于堆栈上。foo指向的对象在堆上(在简单的情况下,它实际上可以优化到堆栈上,但从概念上讲,它在堆上)。

对象的类可以有超类并实现接口。但是,无论字段是在哪个类中声明的,实例字段都保存在堆上相同的内存分配中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1714674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档