
Java进阶笔记
文章平均质量分 92
Java核心进阶内容精华笔记
pren2016
现任携程旅行网“资深移动开发工程师”,5年Android开发经验
展开
-
【Java进阶笔记】Java泛型原理(类型擦除)
文章目录1. 泛型的概念2. 泛型的使用2.1. 泛型类/接口2.2. 泛型方法2.3. 通配符2.4. 上下边界限定3. 泛型的原理3.1. 类型擦除3.1.1. 未指定上界的泛型类型会以`Object`类型替换3.1.2. 已指定上界的泛型类型会以上界类型替换3.2. 绕过编译时泛型类型检查1. 泛型的概念泛型,即“参数化类型”。就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(类型形参),然后在使用/调用时传入具体的类型(类型实参)。JDK1.5 之后引原创 2021-03-09 10:19:49 · 265 阅读 · 0 评论 -
【Java进阶笔记】ThreadLocal
文章目录1. ThreadLocal1.1. 作用1.2. 使用场景1.3. 示例代码2. ThreadLocal 原理解析2.1. 内部设计2.1.1. 早期方案2.1.2. JAVA 8 方案2.2. ThreadLocal 核心方法源码2.2.1. set 方法2.2.2. get 方法2.2.3. remove方法3. ThreadLocalMap 源码分析3.1. ThreadLocalMap 类的基本结构3.1.1. 成员变量3.1.2. 存储元素3.2. ThreadLocal 内存泄漏3.2原创 2021-03-08 13:57:49 · 473 阅读 · 2 评论 -
【Java进阶笔记】线程池(类比银行业务来理解)
文章目录1. Java 线程池1.1. 线程池的特点1.2. Java 中的线程池类1.3. 线程池的最佳容量2. ThreadPoolExecutor2.1. 线程池状态2.2. 基本原理2.2.1. 构造方法2.2.2. 组成部分2.2.3. 工作流程2.3. 拒绝策略2.3.1. JDK 的4种策略2.3.2. 其他策略2.4. Executors 工厂2.4.1. newFixedThreadPool()2.4.2. newCachedThreadPool()2.4.3. newSingleThre原创 2021-03-08 13:57:27 · 493 阅读 · 0 评论 -
【Java进阶笔记】JVM内存模型(堆、栈、方法区、逃逸分析)
文章目录1. JVM 内存模型1.1. 程序计数器1.2. 虚拟机栈1.2.1. 栈帧1.2.2. 栈内存溢出1.3. 本地方法栈1.4. 堆1.5. 方法区1.5.1. 组成结构1.5.2. 方法区内存溢出2. 逃逸分析2.1. 标量替换2.2. 栈上分配2.3. 同步消除1. JVM 内存模型.java文件会被编译器编译为.class文件,然后由JVM中的类加载器加载各个类的字节码文件,加载完毕后,交由JVM执行。JVM会用一段空间来存储程序执行期间需要的数据和相关信息,这段空间一般称为Runt原创 2021-03-06 22:19:06 · 516 阅读 · 0 评论 -
【Java进阶笔记】垃圾回收器GC(finalize对象复活、强软弱虚引用)
文章目录1. 垃圾回收器 GC1.1. 确定回收对象的方法1.1.1. 引用计数法1.1.2. 可达性分析法1.2. 可作为GC Root的对象1.3. 回收时机1.3.1. finalize方法1.3.2. 对象复活1.4. 垃圾回收方法1.4.1. 标记清除法1.4.2. 复制法1.4.3. 标记整理法1.4.4. 分代收集法1.5. 垃圾收集器1.5.1. Serial 收集器1.5.2. ParNew 收集器1.5.3. Parallel Scavenge 收集器1.5.4. Serial Old原创 2021-03-06 22:37:01 · 663 阅读 · 0 评论 -
【Java进阶笔记】4种常量池
文章目录1. Class文件常量池1.1. 字面量1.2. 符号引用2. 运行时常量池3. 字符串常量池3.1. 创建字符串对象的方式3.1.1. 字面量创建3.1.2. 构造方法创建3.2. intern 方法4. 包装类对象常量池1. Class文件常量池class文件是一组二进制字节流,class文件常量池在编译阶段就已经确定。class文件常量池主要存放两大常量:字面量和符号引用。class JavaBean{ private int value = 1; public S原创 2021-03-06 22:42:08 · 351 阅读 · 1 评论 -
【Java进阶笔记】编译期处理(java语法糖)
文章目录1. 语法糖1.1. 默认构造方法1.2. 自动拆装箱1.3. 泛型取值1.4. 可变参数1.5. foreach 循环1.6. switch 字符串1.7. switch 枚举1.8. 枚举1.9. try-with-resources1.10. 方法重写时的桥接方法1.11. 匿名内部类1. 语法糖语法糖,指java编译器把 .java 源码文件编译为 .class 字节码文件的过程中,自动生成和转换的一些代码,主要是为了减轻程序员的负担,算是java编译器给我们的一个额外福利(给糖吃)原创 2021-03-06 22:57:34 · 666 阅读 · 0 评论 -
【Java进阶笔记】字符串与StringTable(字符串常量池)
文章目录1. 字符串1.1. 字符串的创建(JDK8)1.1.1. char[]数组创建1.1.2. byte[]数组创建1.1.3. int[]数组创建1.1.4. 从已有字符串创建1.1.5. 字面量创建1.1.6. 拼接创建1.2. JDK 9 的变化1.2.1. 内存结构的变化1.2.2. 拼接方式的变化1.2.3. 默认的拼接策略2. StringTable2.1. 家养与野生2.2. StringTable 的存储位置2.3. intern() 方法2.3.1. StringTable 中已存在原创 2021-03-06 22:53:14 · 657 阅读 · 0 评论 -
【Java进阶笔记】字节码与类加载(带你读懂字节码)
文章目录1. 类文件结构1.1. 魔数1.2. 文件版本1.3. 常量池1.4. 访问标识与继承信息1.5. 字段信息1.6. 方法信息1.7. 属性信息2. 字节码指令2.1. 入门2.2. Javap 工具2.3. 方法执行流程2.4. 条件判断指令2.5. 循环控制指令2.6. 为什么 `x=x++` 无效2.7. 构造方法2.7.1. \()V 方法2.7.2. \()V 方法2.8. 方法调用2.9. 异常处理2.9.1. try-catch-finally2.9.2. finally 出现 re原创 2021-03-06 23:00:07 · 699 阅读 · 0 评论 -
【Java进阶笔记】运行期优化(即时编译、反射优化)
文章目录1. 即时编译1.1. 分层编译1.2. 方法内联2. 反射优化1. 即时编译1.1. 分层编译JVM 的执行状态分为5个层次:0层,解释执行(Interpreter)。1层,使用 C1 即时编译器编译执行(不带profiling)。2层,使佣 C1 即时编译器编译执行(带基本的profiling)。3层,使用 C1 即时编译器编译执行(带完全的profiling)。4层,使用 C2 即时编译器编译执行。profiling 是指在运行过程中收集一些程序执行状态的数据, 例原创 2021-03-06 23:02:50 · 387 阅读 · 0 评论 -
【Java进阶笔记】java并发(进程、线程、协程)
文章目录1. 基本概念1.1. 进程与线程1.1.1. 二者概念1.1.2. 二者区别1.2. 并行与并发2. 线程2.1. 线程运行的原理2.1.1. 栈与栈帧2.1.2. 线程上下文切换2.2. 创建线程2.2.1. 直接创建 Thread2.2.2. 结合 Runnable2.2.3. 结合 FutureTask2.3. 常见方法2.3.1. start() 与 run()2.3.2. sleep() 与 yield()2.3.3. join()2.3.4. interrupt()2.4. 终止线程-原创 2021-03-06 23:07:47 · 285 阅读 · 0 评论 -
【Java进阶笔记】Java内存模型(内存一致性、volatile原理)
文章目录1. 硬件内存模型1.1. 数据加载1.1.1. 处理流程1.1.2. 缓存行1.2. 执行流程2. Java 内存模型2.1. 内存划分2.1.1. 内存模型2.1.2. 模型类比2.2. 主内存与工作内存之间的交互操作2.2.1. 个交互协议2.2.2. 个基本规则2.3. 一致性2.3.1. 原子性2.3.2. 可见性2.3.3. 有序性2.4. 有序性原则2.4.1. happens-Before 原则2.4.2. as-if-serial 语义3. volatile 关键字3.1. 总线嗅原创 2021-03-06 23:10:14 · 492 阅读 · 0 评论 -
【Java进阶笔记】synchronized原理(悲观锁和乐观锁)
文章目录1. 悲观锁(阻塞)1.1. 临界区与竞态条件1.1.1. 临界区1.1.2. 竞态条件1.1.3. 原子性1.2. synchronized 概念1.2.1. synchronized 修饰方法1.2.2. 变量的线程安全分析1.2.3. 常见的线程安全类1.3. Monitor(管程)1.3.1. Java 对象头1.3.2. Monitor1.4. synchronized 原理1.4.1. 轻量级锁1.4.2. 重量级锁1.4.3. 偏向锁1.4.4. 自旋优化1.4.5. 同步消除1.5.原创 2021-03-06 23:11:17 · 540 阅读 · 0 评论