java内存分布和面向对象
Java内存区域 栈概念: 是线程私有的,它的生命周期与线程相同,每个方法执行的同时都会创建一个栈帧,用于存储局部 变量操作数栈、动态链接、方法出口等信息。 堆概念: 堆是虚拟机所管理的内存中最大的一样区域。堆是被所有线程共享的一块内存区域,在虚拟机启动时 创建。此区域用来存储对象实例。 方法区: 和堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。 对象的创建过程 过程解释: 1.jvm加载器先将.class字节码加载入方法区,运行时调用静态方法main() 2.在对内存开辟main()方法内存空间,执行构造方法。 3.执行构造方法会 4.在堆内存给对象开辟内存空间,并编有内存地址 5.生成的对象的引用(对象地址)传递给对象变量。引用和指针类似是一种存放对象地址的变量。 最后main()程序执行完毕进行弹栈释放,堆内存中的对象会被JVM虚拟机的垃圾回收机制回收。 成员变和局部变量的区别 1.在类中的位置不同 成员变量:在类中方法外 局部变量:在方法定义中或者方法声明上 2.在内存中的位置不同 成员变量:在堆内存 局部变量:在栈内存 3.生命周期不同 成员变量:随着对象的创建而存在,随着对象的消失而消失 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失 4.初始化值不同 成员变量:有默认初始化值 局部变量