相关疑难解决方法(0)

java中的静态分配 - 堆,堆栈和永久生成

我最近一直在阅读java中的内存分配方案,并且由于我从各种来源阅读,因此有很多疑问.我已经收集了我的概念,并且我会要求完成所有要点并对它们进行评论.我开始知道内存分配是特定于JVM的,所以我必须事先说,我的问题是Sun特定的.

  1. 类(由类加载器加载)进入堆上的特殊区域:永久生成
  2. 与类名称,与类关联的对象数组,JVM使用的内部对象(如java/lang/Object)和优化信息等类相关的所有信息都会进入永久生成区域.
  3. 所有静态成员变量再次保留在"永久生成"区域中.
  4. 物体在不同的堆上:年轻一代
  5. 每个类只有一个方法的副本,无论是静态还是非静态方法.该副本放在永久生成区域.对于非静态方法,所有参数和局部变量都进入堆栈 - 只要对该方法进行具体调用,我们就会得到一个与之关联的新堆栈帧.我不确定静态方法的局部变量存储在哪里.他们是永久世代的堆吗?或者只是他们的引用存储在Permanent Generation区域,而实际的副本是在其他地方(Where?)
  6. 我也不确定方法的返回类型存储在何处.
  7. 如果对象(在年轻代中)需要使用静态成员(在永久生成中),则为它们提供对静态成员的引用&&它们被给予足够的存储空间来存储方法的返回类型等.

谢谢你经历这个!

java static memory-management permanent-generation

110
推荐指数
1
解决办法
6万
查看次数

Java中存储的静态方法和静态变量在哪里?

例如:

class A {
    static int i=0;
    static int j;

   static void method() {
       // static k=0; can't use static for local variables only final is permitted
       // static int L;
    }
}
Run Code Online (Sandbox Code Playgroud)

这些变量将存储在Java,堆中还是堆栈内存中?它们是如何存储的?

java jvm

103
推荐指数
6
解决办法
14万
查看次数

如何存储实例方法

可能重复:
内存中的Java/C#方法表示

我想知道我是否在java中有一个对象,它是如何存储实例方法的?对象是否有指向它的实例方法的指针?

例:

public class MyObject {
 private int x;
 private int y;
 [..]
}
Run Code Online (Sandbox Code Playgroud)

如果我计划MyObject在内存中保留很多(例如,对象的一棵大树),如果除了x的getter和yi定义计算总和的实例方法,它会在内存方面产生显着差异吗?

我正在尝试解决问题,我应该添加更多实例方法或使用getter和setter在另一个类中进行计算.

java memory

14
推荐指数
3
解决办法
9298
查看次数