JAVA程序运行原理
2019-12-30 本文已影响0人
任性一把
JAVA程序运行原理
- 编写 .java 源文件
- 编译成 .class 文件
- 运行分配 JVM 数据区
JVM 运行时的数据区
线程独占:每个线程独有的空间,跟随线程的生命周期创建销毁
线程共享:所有线程共享的内存数据,跟随虚拟机和GC创建销毁
方法区
JVM 用来存储加载的类信息,常量,静态变量,编译后的代码。
虚拟机规范的逻辑区域,具体实现根据不同虚拟机控制。
堆内存
JVM启动时创建,用来存储对象实例。垃圾回收器主要管理的区域,内存超出会报错。
虚拟机栈
由多个栈帧组成,线程独占,一个方法对应一个栈帧。
栈帧包含:局部变量表,操作数栈,动态链接,方法返回地址,附加信息等,默认内存1M,超出报错
本地方法栈
类似虚拟机栈,主要为执行Native方法,区别与虚拟机栈是执行JAVA方法。
程序计数器
记录当前线程字节码的位置,存储字节码指令地址。Native方法时,计数器值为空。多线程切换由程序计数器控制执行到哪里了。
查看 class 文件内容
- 源代码由 javac 命令编译成 class 文件
- 通过 javap 查看 class 文件内容
javac Demo.java // 编译
javap -v Demo.class > demo.txt // 输出内容到demo.txt 文件