第一章 走进JAVA
- 概述 应用广泛、结构严谨、跨平台
- JAVA技术体系
- JAVA程序设计语言
- 各种硬件平台的JAVA虚拟机实现
- Class文件格式
- JAVA类库API
- 商业或开源的第三方JAVA类库
- JAVA发展史 JDK1.1 -> JDK 1.2 -> JDK1.3 ....
- JAVA虚拟机家族
- 始祖:Sun Classic/Exact VM
- 武林盟主:HotSpot VM
- 小家碧玉:Moblie/Embedded VM
- 天下第二:BEA JRockit/IBM J9 VM
- 软硬合璧:BEA Liquid VM/Azul VM
- 挑战者:Apache Harmony/Google Android Dalvaik VM
- 没有成功,并非失败:Microsoft JVM以及其他
- 百家争鸣
- 展望JAVA技术的未来
- 无语言倾向
- 新一代即时编译器
- 向Native迈进
- 灵活的胖子HotSpot
- 语言语法持续增强
- 实战:自己编译JDK
- 本章小结 介绍JAVA的过去、现在、未来,和编译JDK12
第二章 JAVA内存区域与内存溢出异常
-
概述
-
运行时数据区域
-
程序计数器
当前线程所执行的字节码的行号指示器,程序控制流的指示器,分支、跳转、循环、异常处理、线程恢复等都需要依赖程序计数器 程序计数器线程独立,各条线程之间计数器互不影响,独立存储,线程私有
-
JAVA虚拟机栈
线程私有 生命周期与线程相同 方法执行时,会创建一个栈帧用于存储局部变量表、操作数栈、动态连接、方法出口等,方法被调用到执行完毕,对应栈帧入栈出栈
-
本地方法栈
与虚拟机栈类似,是为虚拟机使用到的本地方法服务,有的虚拟机将两者合二为一
-
JAVA堆
线程共享的内存区域 几乎所有对象在这里分配内存
-
方法区
线程共享的内存区域 存储被虚拟机加载的类型信息、常量、静态变量、即使编辑的代码缓存等
-
运行时常量池
方法区的一部分,存放常量池表
-
直接内存
不是运行时数据区的一部分,NIO直接分配内存
-
HotSpot虚拟机对象探秘
-
实战:OutOfMemoryException异常
-
本章小结