java面向对象的底层内存分析:
java虚拟机的内存可分为三个区域:栈(stack)、堆(heap)、方法区(method area)。
一、栈的特点如下:
1.栈描述的是方法执行的内存模型。每个方法被调用都创建一个栈帧(存储局部变量、操作数、方法出口等)
2.JVM为每个线程创建一个栈,用于存放该线程执行方法信息(实际参数、局部变量等)
3.栈属于线程私有,不能实现线程间的共享。
4.栈的存储特性是“先进后出,后进先出”,类似于子弹进出弹夹的过程。
5.栈是由系统自动分配,速度快。栈是一个连续的内存空间。
二、堆的特点如下:
1.堆用于存储创建好的对象和数组(数组也是对象),例如代码中创建新对象是会出现new
关键字,new
的出现标志着堆中对象的创建。
2.一个JVM只有一个堆,被所有线程共享。
3.堆是一个不连续的内存空间,分配灵活,速度慢
三、方法区(又叫静态区)特点如下:
1.JVM中只有一个方法区,被所有线程共享。
2.方法区实际也是堆(可以理解成堆中比较特殊的一部分),只是用于储存类、常量相关的信息。
3.用来存放程序中永远不变或者相对唯一的内容(类信息【Class对象】、静态变量、字符串常量等)
(-----------------------------------分割线----------------------------------)
接下来,我们用代码具体拆解和分析一下代码运行的时候,JVM的内存是如何运行的,举例代码如下:
public class SxyStu {
//属性
int id;
String name;
int age;
Computer comp;//计算机
//方法
void study() {
System.out.println(