java的理解
- 平台无关性:一次编译,到处运行
- GC:垃圾回收,不必像C++一样手动释放堆内存,由JVM自动完成
- 语言特性:泛型、反射、Lambda表达式
- 面向对象:封装、继承、多态
- 类库:Java自带的库,如并发、集合、IO、网络有关等的库
- 异常处理:抛出异常和捕获异常
java如何实现平台无关性
Java源码首先被编译成字节码,Java语言在不同平台上运行时不需进行重新编译。由相应平台上的JVM将字节码转换成具体平台上的机器指令。
为何JVM不直接将源码解析成机器码执行
避免每次执行前都执行各种检查,以及扩展了兼容性即可以将别的语言(Ruby、Scala)解析成字节码去执行
JVM架构
- Class Loader:依据特定格式,加载Class文件到内存
- Execution Engine:对命令进行解析
- Native Interface:融合不同开发语言的原生库为Java所用
- Runtime Data Area:JVM内存空间结构模型
JVM如何加载class文件:
(简要)Class Loader加载符合要求的Class文件到内存中,并通过Execution Engine去解析Class里面的字节码提交给操作系统去执行