4.1Java面向对象内存分析

4.1Java面向对象内存分析

本章街上面向对象的内存分析

Java虚拟机的内存区域

栈区(Stack)

堆区(heap)

方法区(method area)---方法区也在堆中

栈的特点:
  1. 栈描述的是方法执行的内部模型---核心作用

  2. 每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)

    1. 示例图:

  3. JVM为每个线程创建一个栈用于存放该线程执行方法的信息(实际参数、局部变量等)---启动一个程序会调用很多线程

  4. 栈属于线程私有,不能实现线程间共享

  5. 栈的存储特性:

    1. 先进后出,后进先出---弹夹结构

  6. 栈是由系统自动分配,速度快。

  7. 栈是一个连续的内存空间!

如图:


堆的特点:
  1. 存储创建好的对象和数组(数组也是对象)

  2. JVM只有一个堆,被所有线程共享!!!---关键

  3. 堆是一个不连续的内存空间,分配灵活,速度慢!

示例图:


方法区的特点:
  1. JVM只有一个方法区,被所有线程共享!

  2. 方法区实际也是堆,用于存储类、常量相关的信息!

  3. 用来存放程序中 永远是不变或唯一的内容。(类信息(Class对象)、静态变量、字符串常量等)

实例:

//执行文件
//javac file.java
//java file
//static修饰的都叫静态方法(英文意思也是:adj.静态的)

程序执行步骤:

  • 编译好以后的代码首先:将代码加载到空间里面。方法区里面首先要有类的信息

示例图:

 

posted @ 2021-04-02 10:55  俊king  阅读(56)  评论(0)    收藏  举报