堆栈内存基础分析

                                                  堆栈内存基础分析

在 Java 中java虚拟机的内存可以分为三个区域:栈stack、堆heap、方法区method area。Java中将数组元素实例化对象信息等都存储在堆内存中,再通过堆栈空间的内存地址来进行访问和数据的读取。

栈的特点如下:
                  1.栈描述的是方法执行的内存模型,每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)
                  2.JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等)
                  3.栈属于线程私有,不能实现线程间的共享
                  4.栈的储存特性是“先进后出,后进先出”
                  5.栈是有系统自动分配,速度快!栈是一个连续的内存空间!
              堆得特点如下:
                  1.堆用于储存创建好的对象和数组(数组也是对象)
                  2.JVM只有一个堆,被所有线程共享
                  3.栈是一个不连续的内存空间,分配灵活,速度慢
              方法区(又叫静态区)特点如下:
                  1.JVM只有一个方法区被所有线程共享
                  2.方法区实际也是堆,只是用来储存类、常量相关的信息!
                  3.用来存放永远不变或者唯一的内容,(类信息(class对象)、静态常量、字符串常量等)

实例讲解

class Demo{
	String NAMEString;
	int AGE;
	public void tellDemo() {
		System.out.println("姓名:"+NAMEString+",年齡:"+AGE);
	}
}

public class MemoryAnalysis {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Demo demo = new Demo();
		demo.NAMEString = "join";
		demo.AGE = 22;
		demo.tellDemo();
	}
}

在这里,new现在堆内存中开辟出一个空间,所以说在程序中的内存空间都是通过new来完成的。而堆内存中存储的是什么呢?Demo()定义堆空间中的内容。

Demo demo = new Demo();

首先我们要确定的是堆栈内容。堆内存中保存的是堆象的基本信息,栈内存中保存的是堆内存的地址,通过地址找到堆内存,再找到对象内容。简单来说的话,也就是对象名称保存在了栈内存中

demo.NAMEString = "join";
demo.AGE = 22;

当读取信息的时候就是栈里面找到堆内存的地址,然后根据堆内存的地址到堆内存中找对象内容,在对其进行读取。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值