13.Java 程序执行内存详细分析/栈/堆/方法区/栈帧
简述
- Java虚拟机的内存可以分为三个区域:栈stack、堆heap、方法区method area。
栈特点:
栈是一个系统自动分配的连续内存空间。
- 栈描述的是方法执行的内存模型,每一个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)。
- JVM 为每一个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等)。
- 栈是属于线程私有,不能实现线程间的共享。
- 栈的存储特性是 “先进后出,后进先出” 。(类似于将子弹填进弹夹,先填进去的后面打出去,后填进去的先打出去)
- 栈是系统自动分配的,速度快。栈是一个连续的内存空间。
堆特点:
堆用于存储对象。
- 堆用于存储创建好的对象和数组(数组也是对象)。
- JVM 只有一个堆,被所有线程共享。
- 堆是一个不连续的内存空间,分配灵活,速度慢。
方法区(静态区)
存储类、常量相关的信息。
- JVM 只有一个方法区,被所有线程共享。
- 方法区实际也是堆,只是用于存储类,常量相关的信息。
- 方法区用于存放程序中永恒不变或唯一的内容(如:类信息【class对象】、静态变量、字符串常量等)
注意点
- 程序会先执行类,再进行编译。形如 java SxtStu -->> javac SxtStu.java
- 用 static 修饰的方法统称为静态方法
内存分配图:
- 其中方法区位置是放在堆内存中的,下图只是方便区分
内存分析代码案例图:上篇博客 “模拟学生使用电脑” java 程序
偷偷向银河要了一把碎星✨只等你闭上眼睛撒入你的梦中。

浙公网安备 33010602011771号