展开至 1级 节点 展开至 2级 节点 展开至 3级 节点 展开至 4级 节点

Java JVM JVM 内存结构 堆Heap 堆的优势是可以动态地分配内存大小 存取速度较慢 栈Stack 存取速度比堆要快 存放基本类型 数据可以共享 HotSpot 虚拟机对象探秘 垃圾收集策略与算法 判定对象是否存活 引用计数法 很难解决对象之间的循环引用问题 可达性分析法 强引用(Strong Reference) 软引用(Soft Reference) 弱引用(Weak Reference) 虚引用(Phantom Reference) GC Roots 虚拟机栈(栈帧中的本地变量表)中引用的对象; 方法区中静态属性引用的对象; 方法区中常量引用的对象; 本地方法栈方法引用的对象; 回收方法区内存 判定废弃常量 判定无用的类 该类的实例都已经被回收,也就是 Java 堆中不存在该类的任何实例; 加载该类的 ClassLoader 已经被回收; 该类对应的 java.lang.Class 对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法。 标记-清除算法 复制算法 标记-整理算法 分代收集算法 HotSpot 垃圾收集器 CMS Concurrent Mark Sweep 初始标记 并发标记 重新标记 并发清除 优点:并发收集、低停顿 缺点 对 CPU 资源敏感(会和服务器抢资源)。 无法处理浮动垃圾。浮动垃圾是指 Java 业务代码与垃圾收集器并发执行过程中又产生的垃圾,这种垃圾只有等到下一次 GC 的时候再进行清理。 它使用的回收算法 “标记-清除” 算法会导致大量的内存空间碎片产生。 G1 面向服务器应用端的垃圾收集器 针对多核 CPU 以及大容量内存的机器 运作步骤 初始标记(Init Marking,STW) 并发标记(Concurrent Marking) 最终标记(Remark,STW 筛选回收(Clearnup,STW) Serial 收集器 1.3 单线程 Stop The World 新生代采用复制算法 老年代采用标记-整理算法 Serial Old 收集器 ParNew 收集器 Serial 收集器的多线程版 Parallel Scavenge 收集器 跟 ParNew 收集器一样 关注吞吐量 Parallel Old 收集器 内存分配与回收策略 JVM 性能调优 类文件结构 类加载的时机 加载 验证 准备 解析 初始化 使用 卸载 类加载的过程 类加载器 启动类加载器(Bootstrap ClassLoader) <JAVA_HOME>\lib 目录 扩展类加载器(Extension ClassLoader <JAVA_HOME>\lib\ext 应用程序类加载器(Application ClassLoader) classpath 自定义 ClassLoader 双亲委派模型 集合类 线程安全(Thread-safe) Vector HashTable 无论是key还是value都不允许有null值的存在 StringBuffer ConcurrentHashMap ConcurrentLinkedDeque CopyOnWriteArrayList BlockingQueue 非线程安全的集合 ArrayList LinkedList HashMap 对于hash冲突采用链表的方式去解决 hash碰撞 基于key hash查找Entry对象存放到数组的位置 在扩大容量时须要重新计算hash jdk1.8之前并发操作hashmap时为什么会有死循环的问题 HashSet 基于HashMap实现,无容量限制 不保证数据的有序; TreeMap 典型的基于红黑树的Map实现 TreeSet 基于TreeMap实现的 StringBulider LinkedHashMap 线程 线程的几个状态 分支主题 runable new running block destory 创建线程 继承Thread 实现Runable 线程安全 锁 Lock synchronized 线程池 Executors. newFixedThreadPool(5) Executors. newCachedThreadPool() Executors. newSingleThreadExecutor(); JDK各版本新特性 jdk1.5 自动装箱与拆箱 枚举 静态导入 可变参数 内省 泛型 For-Each循环 注解 协变返回类型 jdk1.6 AWT新增加了两个类:Desktop和SystemTray 使用JAXB2来实现对象与XML之间的映射 StAX,一种利用拉模式解析(pull-parsing)XML文档的API 使用Compiler API,动态编译Java源文件 轻量级Http Server API 插入式注解处理API 提供了Console类用以开发控制台程序 对脚本语言的支持如: ruby,groovy, javascript Common Annotations 嵌入式数据库 Derby JDK1.7 对Java集合(Collections)的增强支持,可直接采用[]、{}的形式存入对象 在Switch中可用String 数值可加下划线用作分隔符 支持二进制数字 简化了可变参数方法的调用 调用泛型类的构造方法时 Boolean类型反转 char类型的equals方法 安全的加减乘除 Map集合支持并发请求 JDK1.8 接口的默认方法 Lambda 表达式 函数式接口 使用 :: 关键字来传递方法或者构造函数引用 多重注解 Optional 类 jdk1.9 Java 平台级模块系统 Linking JShell : 交互式 Java REPL 改进的 Javadoc 集合工厂方法 改进的 Stream API 私有接口方法 HTTP/2 多版本兼容 JAR G1是Java 9中的默认GC 轻量级的 JSON API 响应式流(Reactive Streams) API jdk1.10 局部变量类型推断 GC改进和内存管理 线程本地握手(JEP 312) 备用内存设备上的堆分配(JEP 316) 在 OpenJDK 中提供一组默认的根证书颁发机构证书 jdk1.11 HTTP 客户端(标准) ChaCha20 和 Poly1305 密码算法 低开销堆分析 传输层安全性(TLS)1.3 ZGC:可扩展的低延迟垃圾收集器 对象 引用 强引用(Strong Reference) 软引用(Soft Reference) 弱引用(Weak Reference) 虚引用(Phantom Reference) IO nio netty mina InputStream OutputStream BIO 同步阻塞 同步非阻塞 rpc http协议 任何语言 rmi tcp java专属 java的原生序列化 Hessian 基于HTTP协议 采用二进制编解码 protobuf-rpc-pro Protocol Buffers 协议的 基于 Netty 底层的 NIO 技术 Avro 支持HTTP,TCP两种协议 Thrift Dubbo 数据类型 int short long byte char boolean float double 序列化 谷歌Protobuf Kryo FastJson 并发 synchronized CAS AQS ThreadLocal ThreadPoolExecutor 动态代理 java动态代理 cglib动态代理