第一章 走进java
1.1 概述
1 跨平台——一次编译,到处运行
2 相对安全的内存管理和访问机制——比C语言不知道高到哪里去
3 热点代码检测+运行编译优化——保证效率
1.2 Java技术体系
JDK=java程序设计语言+java虚拟机+java API类库,JDK 是用于支持java程序开发的最小环境。
JRE=java API类库中的 java SE API 子集+java虚拟机(JVM),JRE 是支持java程序运行的标准环境。
JRE=java API类库中的 java SE API 子集+java虚拟机(JVM),JRE 是支持java程序运行的标准环境。
1.3 Java发展史
这个不想看,跳过。
1.4 Java虚拟机发展史
好多版本,就看一个吧,HotSpot VM
目前使用使用最广的Java虚拟机
1.5.3 多核并进
1.5.4 进一步丰富语法
1.5 展望未来
1.5.1模块化
建立各种功能的标准件的前提。
1.5.2 混合语言
1.5.2 混合语言
多种语言跑在JVM上
1.5.3 多核并进
利用多个CPU核心提供的计算资源来写作完成一个辅助的计算任务——Fork/Join
1.5.4 进一步丰富语法
面向函数方式的编程可能会成为主流。
JDK1.8新增 Lambda 表达式(面字节跳动时问到过)
1.6 实战:自己编译JDK
1.6.1 获取 JDK 源码 http://jdk.java.net/
1.6.2 MacOS Linux 和 Windows
1.6.3 构建编译环境
1.6.4 进行编译。
1.6.5 在IDE工具中进行源码调试
1.6.4 进行编译。
1.6.5 在IDE工具中进行源码调试
有时间慢慢自己搭吧...
附一张HotSpot源码结构
├─agent Serviceability Agent的客户端实现 ├─make 用来build出HotSpot的各种配置文件 ├─src HotSpot VM的源代码 │ ├─cpu CPU相关代码(汇编器、模板解释器、ad文件、部分runtime函数在这里实现) │ ├─os 操作系相关代码 │ ├─os_cpu 操作系统+CPU的组合相关的代码 │ └─share 平台无关的共通代码 │ ├─tools 工具 │ │ ├─hsdis 反汇编插件 │ │ ├─IdealGraphVisualizer 将server编译器的中间代码可视化的工具 │ │ ├─launcher 启动程序“java” │ │ ├─LogCompilation 将-XX:+LogCompilation输出的日志(hotspot.log)整理成更容易阅读的格式的工具 │ │ └─ProjectCreator 生成Visual Studio的project文件的工具 │ └─vm HotSpot VM的核心代码 │ ├─adlc 平台描述文件(上面的cpu或os_cpu里的*.ad文件)的编译器 │ ├─asm 汇编器接口 │ ├─c1 client编译器(又称“C1”) │ ├─ci 动态编译器的公共服务/从动态编译器到VM的接口 │ ├─classfile 类文件的处理(包括类加载和系统符号表等) │ ├─code 动态生成的代码的管理 │ ├─compiler 从VM调用动态编译器的接口 │ ├─gc_implementation GC的实现 │ │ ├─concurrentMarkSweep Concurrent Mark Sweep GC的实现 │ │ ├─g1 Garbage-First GC的实现(不使用老的分代式GC框架) │ │ ├─parallelScavenge ParallelScavenge GC的实现(server VM默认,不使用老的分代式GC框架) │ │ ├─parNew ParNew GC的实现 │ │ └─shared GC的共通实现 │ ├─gc_interface GC的接口 │ ├─interpreter 解释器,包括“模板解释器”(官方版在用)和“C++解释器”(官方版不在用) │ ├─libadt 一些抽象数据结构 │ ├─memory 内存管理相关(老的分代式GC框架也在这里) │ ├─oops HotSpot VM的对象系统的实现 │ ├─opto server编译器(又称“C2”或“Opto”) │ ├─prims HotSpot VM的对外接口,包括部分标准库的native部分和JVMTI实现 │ ├─runtime 运行时支持库(包括线程管理、编译器调度、锁、反射等) │ ├─services 主要是用来支持JMX之类的管理功能的接口 │ ├─shark 基于LLVM的JIT编译器(官方版里没有使用) │ └─utilities 一些基本的工具类 └─test 单元测试