JAVA基础
简介
内存对象
jvm
- 程序计数器(PC)
- 栈(Stack)
- 虚拟机栈(VM stack)
- 本地方法栈(Native stack)
- 堆(Heap)
- 所有对象
- 新生代(Eden/Survior)
- 老年代
- 持久代
- 方法区(Method Area)
- 代码缓存()
- 直接内存(Direct Memory)
jvm系统线程
- 虚拟机线程(VM thread)
- 周期性任务线程
- GC线程
- 编译器线程
- 信号分发线程
GC
- 垃圾回收
- 新的对象和数组被创建并放入老年代。
- Minor垃圾回收将发生在新生代。依旧存活的对象将从 eden 区移到 survivor 区。
- Major垃圾回收一般会导致应用进程暂停,它将在三个区内移动对象。仍然存活的对象将被从新生代移动到老年代。
- 每次进行老年代回收时也会进行永久代回收。它们之中任何一个变满时,都会进行回收。
- 引用计数
- root可达性分析
- 复制
- 标记清除
- 标记整理
类加载器
JVM类通过不同类加载器加载,每个类加载器由其父类加载, bootstrap加载器由虚拟机直接加载
- Bootstrp加载器: 初始加载器;
- Extension加载器: 加载标准Java扩展API类;
- System加载器: 默认类加载器;
- 自定义加载器:
对象头
String
String
- String 是一个finally类, String对象初始化后,将无法修改
StringBuffer
- 线程安全
StringBuilder
- 非线程安全
Collection
Arrays
- 实现AbstractArray
List接口
- ArrayList
- LinkedList
Map接口
- HashMap
- SortedHashMap
Set
- HashSet
Table
- HashTable
Thread
实现方式
- 继承Thread类
- 实现Runnable接口
线程池
- Excutor
线程间同步
synchornized
- moniter
Lock
- ReentrantLock(可重入锁)
- ReadLock(读锁)
- WriteLock(读锁)
Semaphore(信号量)
- 用于多个线程间的并发数控制
- Semaphore(N): 初始化设置信号量值
- acquire(): 获取信号量
- release(): 释放信号量
CountDownLatch(计数器)
- await()
- countDown()
Exchanger(交换者)
- 仅用于2个线程间交换数据
- exhange()
CyclicBarrier(循环屏障)
- 用于一组线程同时等待
- await()
collection
- CopyOnWriteArrayList:
- CopyOnWriteArraySet