13.Java 程序执行内存详细分析/栈/堆/方法区/栈帧

简述

  1. Java虚拟机的内存可以分为三个区域:栈stack、堆heap、方法区method area。

栈特点:

栈是一个系统自动分配的连续内存空间。

  1. 栈描述的是方法执行的内存模型,每一个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)。
  2. JVM 为每一个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等)。
  3. 栈是属于线程私有,不能实现线程间的共享。
  4. 栈的存储特性是 “先进后出,后进先出” 。(类似于将子弹填进弹夹,先填进去的后面打出去,后填进去的先打出去)
  5. 栈是系统自动分配的,速度快。栈是一个连续的内存空间。

堆特点:

堆用于存储对象。

  1. 堆用于存储创建好的对象和数组(数组也是对象)。
  2. JVM 只有一个堆,被所有线程共享。
  3. 堆是一个不连续的内存空间,分配灵活,速度慢。

方法区(静态区)

存储类、常量相关的信息。

  1. JVM 只有一个方法区,被所有线程共享。
  2. 方法区实际也是堆,只是用于存储类,常量相关的信息。
  3. 方法区用于存放程序中永恒不变或唯一的内容(如:类信息【class对象】、静态变量、字符串常量等)

注意点

  1. 程序会先执行类,再进行编译。形如 java SxtStu -->> javac SxtStu.java
  2. 用 static 修饰的方法统称为静态方法

内存分配图:

  • 其中方法区位置是放在堆内存中的,下图只是方便区分

内存分析代码案例图:上篇博客 “模拟学生使用电脑” java 程序

posted @ 2021-11-03 23:45  阿jun  阅读(141)  评论(0)    收藏  举报