堆栈,方法区
堆:
堆存放的就是我们创建的一个个实例变量。
被所有线程共享
栈
每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象)
每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
方法区
又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的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
如对本文有疑问, 点击进行留言回复!!
《CTF特训营》web部分读书笔记(二)跨站脚本攻击(XSS)
国密SM1\ SM2\ SM3\ SM4\ SSF33算法和国际RSA算法的对应关系
网友评论