文章目录

  • 1、JVM内存空间
  • 2、Java程序在JVM的存放过程与运行
  • 2.1、引用数据类型的数组动态初始化
  • 2.2 两个数组内存图
  • 2.3 JVM内存简单的局部变量
  • 2.4 数组的静态初始化
  • 2.5 两个引用指向同一个对象
  • 3、类加载过程
  • 3.1、类加载
  • 3.2、一个对象的内存图
  • 3.3、多个对象内存图


1、JVM内存空间

       为了更好的描述JVM内存空间,Java的开发者、在《Java虚拟机规范》中指出:JVM(运行时数据区)内存共分为JVM栈,堆,方法区,程序计数器,本地方法栈五个部分。

Java空间大战下载 java 空间_Java空间大战下载

  • ①JVM栈(java虚拟机栈,以后说栈指的就是jvm栈):方法的调用是有代价的,方法中有局部变量,各种各样的程序指令,这些东西都需要一个内存空间去存放它们,jvm栈就是用来存放这些方法信息。
           所以每调用一个方法,都会有一个存放着该方法信息的栈帧被压入栈中(方法的进栈),每个方法都有自己独立的栈帧,它们是互不影响的。当方法执行结束,存放方法信息的栈帧就没有价值了,它就被销毁了,这个过程称之为方法出栈。
           局部变量的生命周期:每当调用方法,该方法栈帧进栈,局部变量就生效了。随着方法调用结束,方法出栈,栈帧销毁,局部变量就没有了。jvm栈是给我们自己定义java方法用的。
  • ②本地方法栈:和jvm栈类似,不同的是,它是给本地方法调用使用的。
           本地方法:Java去调用C/C++的方法实现一些跟操作系统相关的功能,这些方法都是本地方法。本地方法不是java代码写的,我们不关系它的实现原理。
  • ③方法区:面向对象详细解释,方法区主要存放类型的相关信息。
  • ④程序计数器:工具人,jvm逐行执行class字节码文件,需要有个指示器,指示当前行数。

2、Java程序在JVM的存放过程与运行

2.1、引用数据类型的数组动态初始化

Java空间大战下载 java 空间_局部变量_02


Java空间大战下载 java 空间_数组_03


Java空间大战下载 java 空间_Java空间大战下载_04


Java空间大战下载 java 空间_局部变量_05

2.2 两个数组内存图

Java空间大战下载 java 空间_数组_06

2.3 JVM内存简单的局部变量

Java空间大战下载 java 空间_局部变量_07

2.4 数组的静态初始化

Java空间大战下载 java 空间_java_08

2.5 两个引用指向同一个对象

Java空间大战下载 java 空间_Java空间大战下载_09

3、类加载过程

3.1、类加载

Java空间大战下载 java 空间_局部变量_10

3.2、一个对象的内存图

Java空间大战下载 java 空间_JVM_11

3.3、多个对象内存图

Java空间大战下载 java 空间_局部变量_12