Live2D

JVM基础

JVM组成部分

flowchart LR A["javac Math.java"] B["java Math.class"] subgraph C["JVM虚拟机"] direction TB subgraph D["运行时数据区-内存模型"] direction TB 堆 栈(线程) 本地方法 方法区-原空间 程序计数器 end E["类装载子系统"] F["字节码执行引擎"] E -->D F -->D end A-->B-->E

java运行

  1. 使用javac命令将.java文件编译成.class文件
  2. 使用java命令执行.class文件
  3. 执行时类装载子系统将类资源加载到内存模型中
  4. 字节码执行引擎运行内存数据

内存模型

当new一个对象时便会将对象放入堆中。
分为年轻代和老年代,新生代又包含Eden区和Survivor(s0+s1)区。默认内存比例为Eden:s0:s1:老年代=8:1:1:20。

当调用方法时,栈会为每个方法开辟方法独有的内存空间放入方法自身的局部变量,这块空间称为栈帧。主要存储局部变量、操作数栈、动态链接、方法出口
方法变量:方法局部变量,对象变量时会存对象在堆中的地址,方便调用
操作数栈:数据的加、减、乘、除等一些操作时,存放数据使用。操作时将数据压入压出
动态链接:存放方法的入口,调用方法时可以去方法区找
方法出口:记录调用方法时的位置,当调用方法执行完成后,主方法可以知道已经执行到哪里,并执行后续方法
方法执行完毕后会销毁所分配的内存空间,即出栈。由于java方法调用链关系,栈是先进后出

本地方法

存储本地方法,Thread类中private native void start0()方法即为本地方法。

方法区

储存常量、静态变量、类信息
当静态变量为类变量时,静态变量存储对应类在堆中的地址。
类信息是指类的.class数据信息

程序计数器

记录当前执行的代码行位置(也有些时记录即将执行的代码行位置,不同JVM有差异),执行时由字节码执行引擎更改。
当A线程执行时有更高级别的B线程执行,A线程将挂起,B线程执行完后可以通过程序计数器确认A线程应该执行的代码位置。

posted @ 2025-02-28 19:25  芜湖~起飞~  阅读(35)  评论(0)    收藏  举报