我的知识点
来源:互联网 发布:可以编辑照片的软件 编辑:程序博客网 时间:2024/05/18 02:57
本人做Java5年有余,仍像个应届毕业生,知其然不知其所以然,面试多次失败,痛定思痛,决定梳理下自己的知识点。
本章知识点基于JDK 8
- Java知识点总结
- JVM相关知识
- JVM内存结构
- 程序计数器
- Java虚拟机栈
- 本地方法栈
- Java堆
- 方法区
- 运行时常量池
- 直接内存
- 类加载机制
- 垃圾回收机制
- 如何确定回收对象
- 垃圾收集算法
- HotSpot算法实现
- 垃圾收集器
- JVM调优
- JVM内存结构
- 基础
- 集合
- List
- Map
- 反射
- 多线程
- Java内存模型
- 先行发生原则happens-before
- volatile 语义
- synchronized 语义
- final 语义
- Unsafe
- 线程池
- Java内存模型
- 流
- 网络
- 日期
- 异常
- Steam
- JVM相关知识
- 分布式
- CAP理论
- 分布式事务
- 数据库
- ACID
Java知识点总结
JVM相关知识
JVM内存结构
程序计数器
Java虚拟机栈
栈帧
栈帧存储了局部变量表、操作数栈、动态链接、方法出口等信息。
本地方法栈
Java堆
方法区
运行时常量池
直接内存
http://blog.csdn.net/bluetjs/article/details/52874852
类加载机制
http://blog.csdn.net/u013256816/article/details/50829596
垃圾回收机制
如何确定回收对象
- 引用计数器算法
- 可达性分析算法
- 引用类型
- finalize方法
垃圾收集算法
- 标记清楚算法(Mark-Sweep)
- 复制算法(Copying)
- 标记整理算法(Mark-Compact)
HotSpot算法实现
- 枚举根节点
- 安全点
- 安全区域
垃圾收集器
http://blog.csdn.net/tonytfjing/article/details/44278233
http://blog.csdn.net/java2000_wl/article/details/8030172
http://blog.csdn.net/renfufei/article/details/54885190
JVM调优
基础
集合
List
ArrayList和LinkedList的选型?
sdsd
Map
反射
多线程
Java内存模型
先行发生原则(happens-before)
- 程序次序规则:一个线程内,按照代码顺序,书写在前面的操作先行发生于书写在后面的操作。准确地说,应该是控制流的顺序而不是程序代码顺序,因为要考虑分支、循环等结构。
- 锁定规则:一个unLock操作先行发生于后面对同一个锁的lock操作
- volatile变量规则:对一个变量的写操作先行发生于后面对这个变量的读操作
- 传递规则:如果操作A先行发生于操作B,而操作B又先行发生于操作C,则可以得出操作A先行发生于操作C
- 线程启动规则:Thread对象的start()方法先行发生于此线程的每个一个动作
- 线程中断规则:对线程interrupt()方法的调用先行发生于被中断线程的代码检测到中断事件的发生
- 线程终结规则:线程中所有的操作都先行发生于线程的终止检测,我们可以通过Thread.join()方法结束、Thread.isAlive()的返回值手段检测到线程已经终止执行
- 对象终结规则:一个对象的初始化完成先行发生于他的finalize()方法的开始
volatile 语义
volatile提供了两种特性:
1. 保证此变量对所有其他线程的可见性,指当一条线程修改了这个变量的值,新值对于其他线程来说是可以立即得知的。
2. 禁止指令重排序优化。
实现原理:
1. Lock前缀指令会引起处理器缓存回写到内存
2. 一个处理器的缓存回写到内存会导致其他处理器的缓存失效
要使 volatile 变量提供理想的线程安全,必须同时满足下面两个条件:
1. 对变量的写操作不依赖于当前值。
2. 该变量没有包含在具有其他变量的不变式中。
synchronized 语义
synchronized实现同步的基础:java中每一个对象都可以作为锁
1. 普通同步方法,锁是当前实例对象。
2. 静态同步方法,锁是当前类的class对象
3. 同步方法块,锁是Synchronized括号里的对象
1和3的实现方式是monitorenter和monitorexit指令。2的实现方式是方法的签名里有ACC_SYNCHRONIZED标记,实质上还是用的monitorenter和monitorexit实现。
Java对象头
如果对象是数组类型,则虚拟机用3个字宽存储对象头,如果不是,则用2个字宽存储。在32位虚拟机里,一个字宽是4个字节。
Mark Word在不同锁状态下的存储格式:
锁的状态
- 偏向锁
- 轻量锁
- 重量级锁
final 语义
Unsafe
线程池
实现原理:
流
网络
日期
异常
Steam
分布式
CAP理论
分布式事务
http://www.codeceo.com/article/distributed-transaction.html
http://blog.jobbole.com/89140/
http://www.infoq.com/cn/articles/solution-of-distributed-system-transaction-consistency
数据库
ACID
- 原子性(Atomicity)
- 一致性(Consistency)
隔离性(Isolation)
持久性(Durability)
- 我的知识点
- 我的知识点
- Graphviz总结我的知识点
- 被我忽略的知识点
- 我的博客,专注记载,收藏知识点!
- 我没有解决的蜜汁知识点
- 我的Python笔记知识点总结
- 我的“View的事件体系”知识点总结
- 一些我不会的知识点,不值得看
- 11月22日--我总结的零散知识点
- 我的JavaScript成长之路——知识点梳理
- iOS开发——我的知识点记录
- 我的 开发 知识点 集结 (更新中...)
- OC知识点之我理解
- 我只是小小知识点--JMS
- 我个人曾经使用到的有用的超链接----细小知识点
- 我的JAVA学习笔记(记下一些容易忘记的知识点)持续更新
- HTML5 Canvas选择形状的名字与KineticJS,我喜欢的一个知识点!
- 分录借贷规律
- 分布式文件系统的对比
- Ubuntu下部署ES集群
- C++ boost库----share_from_this类的作用和实现原理
- Java 字节流 读取和写入
- 我的知识点
- 关于提示用户打开权限的请求(高德地图定位权限为例)
- orcle数据库中条件判断不起作用解决
- 关于Vue实例的生命周期各状态函数(钩子)说明
- yii初始化控制器的两种方法
- Vim编辑器-批量注释与反注释
- java 常用集合list与Set、Map区别及适用场景总结
- 往新建的泛型集合List<T>中添加对象
- golang的defer详解