本章街上面向对象的内存分析
Java虚拟机的内存区域
栈区(Stack)
堆区(heap)
方法区(method area)---方法区也在堆中
栈的特点:
-
栈描述的是方法执行的内部模型---核心作用
-
每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)
-
示例图:
-
-
JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等)---启动一个程序会调用很多线程
-
栈属于线程私有,不能实现线程间共享
-
栈的存储特性:
-
先进后出,后进先出---弹夹结构
-
-
栈是由系统自动分配,速度快。
-
栈是一个连续的内存空间!
如图:
堆的特点:
-
存储创建好的对象和数组(数组也是对象)
-
JVM只有一个堆,被所有线程共享!!!---关键
-
堆是一个不连续的内存空间,分配灵活,速度慢!
示例图:
方法区的特点:
-
JVM只有一个方法区,被所有线程共享!
-
方法区实际也是堆,用于存储类、常量相关的信息!
-
用来存放程序中 永远是不变或唯一的内容。(类信息(Class对象)、静态变量、字符串常量等)
实例:
//执行文件
//javac file.java
//java file
//static修饰的都叫静态方法(英文意思也是:adj.静态的)
程序执行步骤:
-
编译好以后的代码首先:将代码加载到空间里面。方法区里面首先要有类的信息
示例图: