当前位置: 移动技术网 > IT编程>开发语言>.net > JVM

JVM

2018年10月19日  | 移动技术网IT编程  | 我要评论

堆栈,方法区

 

堆:
    堆存放的就是我们创建的一个个实例变量。
    被所有线程共享
栈    
    每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象)
    每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
方法区
    又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
    方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。
    
Age myage= new Age(26)

代码区:存放类,方法的代码块
堆内存(动态分配):  存放new的对象的实例Age
栈内存:存放对象的引用(局部变量)age
栈内存地址: 是个值,如果是基础类型,就是值,如果是引用,是个整数,这个内存地址指向堆内存对象.   
栈内存对象引用的名称: myage

//测试new对象,内存的执行过程类
public class Age{
    int id;
    Age(int -id){
        this.age = -id;
    }
}

内存执行过程: 
1.栈内存开辟一块内存,名称叫 ,里面存了一个值(内存地址,非堆内存对象的物理地址),
堆内存开辟一块空间,没有名称,是一个Age对象,myage的值(内存地址)指向堆内存new的这个对象,
即通过栈内存地址可以找到堆内存对象。

2.堆内存Age对象初始化,调用自身的构造方法,先在栈内存开辟一块内存,名称叫-id,值为26
(因为new的基础类型,所以只占栈内存的空间,并不会去堆内存开辟一个Integer对象并通过-id指向它),
执行构造方法将-id的值传递给Age对象的id,构造方法调用完,栈内存-id回收(方法执行完,局部对象回收)。
堆内存的Age对象内部开辟一块内存,名称id,值26.

本文地址:https://blog.csdn.net/m0_37840243/article/details/107352136

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网