对象的内存模型
-
声明对象Person p;
-
创建对象p=new Person();
栈内存:在方法中定义的变量(基本类型和引用类型)。超过变量的作用域时,自动释放变量的内存。
堆内存:new创建的对象(包括数组),由Java的自动垃圾收集机制来清除
栈内存与堆内存的区别:
栈stack——连续的内存区域,大小固定,编译时确定所需空间大小,效率高
堆heap——不连续的内存区域,运行时确定所需空间大小(支持面向对象的多态性,如:运行时才能确定是哪个类的对象),效率低,但灵活
附:
虚拟机内存结构:
类文件:java文件编译后产生的字节码文件
类加载器:虚拟机调用类加载到虚拟机的内存里面
方法区:存类信息(类名、类修饰符、类属性及属性的数量、方法)、常量池、静态数据。
栈:存基本数据类型、引用数据类型的变量名、引用类型的对象、局部变量
堆:存产生的真实对象、数组、动态分布内存
本地方法栈:提供本地方法调用
程序计数器:控制程序指令线程
执行引擎:内存中调用数据信息
本地方法接口:调用本地方法栈、调用本地方法库。
转载于:https://blog.51cto.com/12170190/1868603