欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java引用类型(数组)及JVM的介绍

程序员文章站 2022-03-19 15:55:46
引用类型1)什么是内存?内存就是内存储器所能存储的信息量,也可以理解为一个宿舍楼有很多个宿舍,每个宿舍的大小是1Byte,每个房间上面都有一个门牌号,这个门牌号就是地址。2)什么是引用?引用相当于一个“别名”,也可以理解为一个指针。创建一个引用只是相当于创建了一个很小的变量,这个变量保存了一个整数,这个整数表示内存中的一个地址。针对int[] arr=new int[]{1,2,3};内存布局如下:A:当我们创建new int[]{1,2,3}的时候,相当于创建了一块内存空间来保存三个int。...

引用类型

1)什么是内存?
内存就是内存储器所能存储的信息量,也可以理解为一个宿舍楼有很多个宿舍,每个宿舍的大小是1Byte,每个房间上面都有一个门牌号,这个门牌号就是地址。
2)什么是引用?
引用相当于一个“别名”,也可以理解为一个指针。
创建一个引用只是相当于创建了一个很小的变量,这个变量保存了一个整数,这个整数表示内存中的一个地址。
针对int[] arr=new int[]{1,2,3};内存布局如下:
A:当我们创建new int[]{1,2,3}的时候,相当于创建了一块内存空间来保存三个int。
B:接下来执行int[] arr=new int[]{1,2,3},相当于又创建了一个int[]变量,这个变量是一个引用类型,里面保存了数组的起始地址。
Java引用类型(数组)及JVM的介绍
注:这里我们发现虽然是int[] a=int[] arr;但是千万不能说是a指向了arr,只能是a指向了arr所指向的对象,因为引用不能指向引用,只能指向对象。另外一个引用只能指向一个对象。当两个引用同时指向一个对象是,当通过一个引用来改变对象的值,另一个对象再去访问时也同样会发生改变。
3)出现空指针异常
在Java中null表示“空引用”,也就是一个无效的引用。
int[] arr={1,2,3};
arr=null;
System.out.println(arr[0]);
此时的arr不指向任何的对象,原先的对象{1,2,3}没有引用再去引用,就被JVM的垃圾回收器回收了。程序会报出空指针异常(NullPointerException)。
这里介绍一下JVM的结构:
Java引用类型(数组)及JVM的介绍

JVM stack:java虚拟机栈:重点是存储局部变量表。
程序计数器(PC Register):只是一个很小的空间,保存下一条执行指令的地址。
本地方法栈(Native Method Stack):本地方法栈与虚拟机栈的作用类似,只不过保存的内容是Nation方法的局部变量。
堆(Heap):JVM所管理的最大内存区域,使用new创建的对象都在堆上保存。(存放的一般是对象)
方法区(Methon Area):用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据,方法编译出的字节码就是保存在这个区域。
运行时常量池(Runtime Constant Pool):是方法区的一部分,存放字面量(字符串常量)与符号引用。(从JDK1.7开始,运行时常量池在堆上)
注:局部变量和引用保存在栈上,new出的对象保存在堆上。堆的空间非常大,栈的空间比较小,堆使整个JVM共享一个,栈每个线程具有一份(一个JAVa程序中可能存在多个栈)。

本文地址:https://blog.csdn.net/qq_50563889/article/details/111915884

相关标签: java