内存概述、Java虚拟机的内存划分

内存
内存是计算机中的重要原件,临时存储区域,作用是运行程序。我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存。Java虚拟机(JVM)要运行程序,必须要对内存进行空间的分配和管理。

Java虚拟机的内存划分
为了提高运算效率,Java虚拟机(JVM)就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
具体划分如下:
在这里插入图片描述
①寄存器:这是最快的保存区域,是处理器内部。然而,寄存器的数量十分有限,所以寄存器是根据需要由编译器分配。我们对此没有直接的控制权,也不可能在自己的程序里找到寄存器存在的任何踪迹。
②栈:仅次于寄存器。存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中(new 出来的对象)。当在一段代码块定义一个变量时,Java就在栈中 为这个变量分配内存空间,当该变量退出该作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。栈中的数据大小和生命周期是可以确定的,当没有引用指向数据时,这个数据就会消失。
③ 堆:存放用new产生的数据。编译器不必知道要从堆里分配多少存储空间,也不必知道存储的数据要在堆里停留多长的时间。在堆里分配存储空间时会花掉更长的时间。在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。

举几个例子:
对象的内存

public class Test02Phone {   
public static void main(String[] args) {     
//创建对象     
Phone p = new Phone();       
//输出成员变量值     
System.out.println("品牌:"+p.brand);//null     
System.out.println("价格:"+p.price);//0     
System.out.println("颜色:"+p.color);//null
System.out.println("‐‐‐‐‐‐‐‐‐‐‐‐");
 //给成员变量赋值     
 p.brand = "锤子";     
 p.price = 2999;     
 p.color = "棕色";       
 //再次输出成员变量值     
 System.out.println("品牌:"+p.brand);//锤子     
 System.out.println("价格:"+p.price);//2999     
 System.out.println("颜色:"+p.color);//棕色     
 System.out.println("‐‐‐‐‐‐‐‐‐‐‐‐");       //调用成员方法     
 p.call("紫霞");     
 p.sendMessage();   } }

在这里插入图片描述
通过上图,我们可以理解,在栈内存中运行的方法,遵循"先进后出,后进先出"的原则。变量p指向堆内存中 的空间,寻找方法信息,去执行该方法。
数组

public static void main(String[] args) {    
int[] arr = new int[3];       
System.out.println(arr);//[I@5f150435    
}

在这里插入图片描述在网上找到的一篇不错的相关文章:https://www.cnblogs.com/protected/p/6419217.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值