Java内存解析
Java数据类型分为基本类型和引用类型,基本数据类型和引用数据类型最大的区别就是:基本数据类型在内存中存储的是具体数值,而引用数据类型在内存中存储的只是一个引用地址,以下对引用数据类型做分析
自定义引用类型类
public class Student {private int age; private String name;public Student(String name,int age) {super();this.age = age;this.name = name;}public Student() {super();}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}}
main方法测试代码:
Student s1 = null; s1 = new Student("joker",21);
内存解析
1.执行代码Student s1;首先会在栈区域创建一个变量用来存放实际new出来的对象的引用地址,如果对象没有被实例化而去调用其属性或者方法则会抛出空指针异常;
2.在堆中分配属性的空间,初始化为null;
3.绑定构造器,为属性分配值;
4.对引用类型变量赋值,将新创建的student对象的引用赋值给s1
分析堆与栈:
Java的堆是一个运行时数据区,类的(对象从中分配空间。它们不需要程序代码来显式的释放。当对象的引用为Null的时候由垃圾回收来负责的,堆的优势是可以动态地分配内存 大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态 分配内存,存取速度较慢。
栈的优势是,存取速度比堆要快,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量数据(int, short, long, byte, float, double, boolean, char)和对象句柄(引用),而堆中存放使用new关键字创建的对象。