JVM总结

本文详细介绍了Java源码如何编译成Class文件,并探讨了JVM的内部结构、执行方式和垃圾回收等核心概念。通过分析Person类的源码,展示了编译过程,包括词法分析、语法分析、语义分析和字节码生成。同时,解析了Class文件的结构,使用javap命令验证和反编译,为深入理解JVM打下基础。
摘要由CSDN通过智能技术生成

1、JVM类加载

在这里插入图片描述
Java官网:https://docs.oracle.com/javase/8/
Reference -> Developer Guides -> 定位到:https://docs.oracle.com/javase/8/docs/index.html
JDK 8 is a superset of JRE 8, and contains everything that is in JRE 8, plus tools such as the compilers and det

在这里插入图片描述
(1)源码到类文件
(2)类文件到JVM
(3)JVM各种折腾[内部结构、执行方式、垃圾回收、本地调用等]

1.1 源码到类文件

1.1.1 源码demo

package com.example.jvmcase.basic;
class Person {
 private String name = "yzt";
 private int age;
 private final double salary = 100;
 private static String address;
 private final static String hobby = "Programming";
 private static Object obj = new Object();
 public void say() {
 System.out.println("person say...");
 }
 public static int calc(int op1, int op2) {
 op1 = 3;
 int result = op1 + op2;
 Object obj = new Object();
 return result;
 }
 public static void main(String[] args) {
 calc(1, 2);
 }
}

编译: javac -g:vars Person.java —> Person.class

1.1.2 前期编译

在这里插入图片描述
**Person.java -> 词法分析器 -> tokens流 -> 语法分析器 -> 语法树/抽象语法树 **
-> 语义分析器 -> 注解抽象语法树 -> 字节码生成器 -> Person.class文件

1.1.3 类文件(Class文件)

1.1.3.1 16进制
常量池
在这里插入图片描述
字段表集合
在这里插入图片描述
方法表集合
在这里插入图片描述
1.3.1.2:
The ClassFile Structure
官网: https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html

ClassFile {
 u4 magic;
 u2 minor_version;
 u2 major_version;
 u2 constant_pool_count;
 cp_info constant_pool[constant_pool_count-1];
 u2 access_flags;
 u2 this_class;
 u2 super_class;
 u2 interfaces_count;
 u2 interfaces[interfaces_count];
 u2 fields_count;
 field_info fields[fields_count];
 u2 methods_count;
 method_info methods[methods_count];
 u2 attributes_count;
 attribute_info attributes[attributes_count];
}
1.3.1.3:
JDK自带的命令
javap -h
可以验证一下上述Classfile Structure前面几块内容的正确性
javap -v -p Person.class 进行反编译,查看字节码信息和指令等信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值