Stack and Heap

JVM  分配内存进入以下区域

1: Heap

2:Stack

3:Code

4:Static

jvm有效的管理分配到这几个内存区域。

Code  section  代码区 包含这个 字节码文件 (byte code)

Stack  section  (栈区域)  包含  方法(methods) ,局部变量 (Local variables) 和 引用变量( reference variables)

Heap  section (堆区域)包含 对象    (也许会包含引用变量(下面的例子中有提到))

Static  section  (静态区域)  包含  静态数据/  方法   (Static  数据 和 方法  为 类的方法,隶属于类)


实例变量   和   局部变量   的区别:

实例变量  声明在一个类的内部,而不是在方法的内部,就是在方法的外部,且不能带静态 static 修饰符。

以下例子中: 
其中  num 为实例变量, 如果 前面带有static  那就是 类变量  全局变量  隶属于 类。

class Student{
 
int num; // num is  instance variable
 
public void showData{}

}

局部变量是声明在方法的内部,包含方法的参数,统称为 局部变量。

以下例子中  a 和  x都是局部变量。

public void sum(int a){
 
int x = int a +  3;
 
// a , x are local variables
 
}
}


记住以下几点( Points to Remember:

1:当一个方法被调用时, a  frame 是被创建在 栈顶。

2:一旦方法完成执行,控制流返回正在调用的方法,stack 中 frame 被 清空(flushed)

3:局部变量是在栈中创建。

4:实例变量在堆中创建, 是对象的一部分,实例变量 依附于对象。

5:引用变量是在栈中创建。


思考: 如果一个对象的实例变量 引用了 另外一个对象 会怎样?

public static void main(String args[]){
 
A parent = new A();
 
//more code
 
}
 
class A{
 
B child = new B();
 
int e;
 
//more code
 
}
 
class B{
 
int c;
 
int d;
 
//more code
 
}


在这个例子中, 引用变量 B   child  将在堆中创建,指向它对应 heap 堆中的对象,

下面的图显示了 这个引用关系:



child   为 引用变量 指向 堆中的 用B类创建的 child对象, 其中 parent在方法中 为局部变量,存放在栈中。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值