Java 技术栈 2020 年度 学习总结

217 阅读3分钟

1. JVM

JVM全称是 Java Virtual Machine ,即 Java虚拟机,是指能执行标准 Java 字节码的虚拟计算机。Java 字节码文件,是指 Java 源代码编译后的中间代码。字节码理论上支持256个操作码,实际目前使用了200个左右。主要有以下 4 类操作码:

  1. 栈操作指令,包括与局部变量交互的指令
  2. 程序流程控制指令
  3. 对象操作指令,包括方法调用指令
  4. 算术运算以及类型转换指令

方法调用的指令:invokestatic,invokespecial,invokevirtua,invokeinterface,invokedynamic

JVM 内存结构包括:

    • 线程栈
      • 栈帧
        • 返回值
        • 局部变量表
        • 操作数栈
    • 年轻代
      • Eden space
      • S0:任何时刻,S0、S1总有一个是空的
      • S1
    • 老年代
  • 非堆(non-heap):本质还是 Heap,只是一般不归 GC 管理

    • 元数据区(Metaspace)
    • compressed class space: 存放 class 信息,和 Metaspace 有交集
    • code cache:存放 JIT 编译器编译后的本地机器代码
  • JVM 自身

JVM 命令行工具:jps/jinfo,jstat,jmap,jstack,jcmd

JVM GC:

收集器串行、并行或并发新/老年代算法目标适用场景
Serial串行新生代复制算法响应速度优先单CPU client 模式
Serial Old串行老年代标记-整理响应速度优先单CPU client 模式,CMS后背预案
ParNew并行新生代复制算法响应速度优先多CPU 配合 CMS Server 模式
Parallel Scarvenge并行新生代复制算法吞吐量优先在后台计算而不需要太多交互的任务
Parallel Old并行老年代标记-整理吞吐量优先在后台计算而不需要太多交互的任务
CMS并发老年代标记-清除响应速度优先集中在互联网站或 B/S 系统服务端上的Java服务
G1并发都有标记-整理+复制响应速度优先面向服务端应用,将来替代CMS

2. NIO

五种 IO 模型:

模型阻塞或非阻塞同步异步场景模拟
阻塞I/O阻塞同步亲自去窗口打饭,打好了才回座位吃
非阻塞I/O非阻塞同步亲自去窗口打饭,打饭师傅会立刻告知是否准备好,准备好则端去吃,无论是否准备好都要回到座位
I/O复用阻塞同步去餐馆坐下吃饭,有专人分配自动响应号牌,专人会轮询的方式检查哪位食客的菜好了,好了会异步调用号牌(发声和光)
信号驱动I/O非阻塞同步在餐馆里手机点餐,叫到自己的号后去去餐
异步I/O非阻塞异步点外卖

3. 并发编程

4. Spring 和 ORM 等框架

5. MySQL 数据库和 SQL

6. 分库分表

7. RPC 和微服务

8. 分布式缓存

9. 分布式消息队列