## **JAVA 中的堆、栈以及方法区进行相应阐述**

JAVA 中的堆、栈以及方法区进行相应阐述

以下面代码为例:

package Housework.Dome;
						
						public class home_first {
						
							public static void main(String[] args) {
								Rng person = new Rng();
								Rng person2 = new Rng();
								person.setName("老王");
								person.setAge(25);
								//String somebody = person.getName();
								//int sometime = person.getAge();
								Rng person3 = person;
								person3.setName("老张");
								//System.out.println(somebody+sometime);
								System.out.println(person3.getName()+"=="+person3.getAge());
								//person.show();
							}
						}
						class Rng{
							String name;
							int age;
							
							public void setName(String newName) {
								name = newName;
							}
							public String getName() {
								return name;
							}
							public void setAge(int newAge) {
								age = newAge;
							}
							public int getAge() {
								return age;
							}
							public void show() {
								System.out.println(name+"--=="+age);
							}
						}

    1.首先先对栈进行描述:栈即程序运行的区域,效率最高,方法的调用执行,基本数据类型定义(局部变量);
    2.堆:用于存储和引用数据类型的区域;
    3.方法区:所有类的方法都在方法区;

在这里插入图片描述 上图便是 栈、堆、方法区 三者之间的关系

    对栈了解的小白都知道栈的结构先进后出,却不能做出对栈准确具体的理解;栈的进、出站又称为压、弹栈;正如上图中方法区中的main与其他方法两个块一样先后进入栈然后以先入后出的形式依次完成函数(方法)的调用,这就是我们常称的清理内存。
下面以上图为例描述堆‘栈以及方法区三者之间的关系(虚拟关系 脑补):’
    上图分为三个部分;左边为栈区,右上为堆,右下为方法区;在Rng person = new Rng();程序写出的瞬间 计算机会相应给new Rng()在堆中分配一个区域,为简单理解,以Rng person = new Rng();为例,即堆中的黑色方块区即为new Rng()在堆中的分配空间,用于存储和引用数据类型,空间大小计算机会根据new Rng()在堆中的占比进行分配,然后new Rng()会通过从方法区得到的地址(String somebody = person.getName();)转交给栈中等待的Rng person(即Rng person = new Rng();)进行执行,完成所有模块进栈执行程序和出栈释放内存。(以上图为例:假如setName的地址是0x112,通过堆中黑色模块的调用,0x112便成为黑色模块的地址,最后再由黑色模块将地址传达给栈中等待的person,即person的地址也变成了0x112,以一个三角形的两边传递完成程序的调用执行。)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值