文章目录
- 一、谈谈你对java的理解
- 二、平台无关性
- 三、JVM如何加载class文件
一、谈谈你对java的理解
- 平台无关性,一次编译多处运行
- GC 垃圾回收机制
- 语言特性 泛型、反射、lambda
- 面向对象 继承 封装 多态
- 类库
- 异常处理
二、平台无关性
- 编译时 javac编译成class字节码
- 运行时 java运行class文件
- javap jdk自带的反编译器
cd src
javac com/my/Demo.java
java com.my.Demo
javap -c com.my.Demo # -c 是jdk自带的反解析工具。它的作用就是根据class字节码文件,反解析出当前类对应的code区(汇编指令)、本地变量表、异常表和代码行偏移量映射表、常量池等等信息
java源码首先被编译成字节码,再由不同平台的JVM进行解析,java语言在不同的平台商运行时不需要进行重新编译,java虚拟机在执行字节码的时候,把字节码转换成具体平台上的机器指令
为什么JVM不直接将源码解析成机器码去执行(先编译成class文件)?
- 准备工作:每次执行都需要各种检查
- 兼容性:也可以将别的语言解析成字节码
三、JVM如何加载class文件
Java虚拟机
Jvm是个内存的处理机
- class loader:依据特定格式,加载class文件到内存
- Execution Engine:对命令进行解析
- Native Interface:融合不同开发语言的原生库为java所用
- Runtime Data Area: jvm 内存空间结构模型