摘要: 在学习锁优化时, 对象头(Mark Word) 是必不可缺的一环,因为 synchronized 用的锁是存在 对象头 里的。32位的虚拟机上对象头占64位(8字节),64位的虚拟机上对象头占128位(16字节)[^objectHead];而不同的类型,对象头的布局不太一样: 数组类型:Mark W 阅读全文
posted @ 2019-06-02 15:29 CoDeleven 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 整体层次思路:Java采用的是内存共享模型,该模型会遇到内存可见性的问题,而内存可见性通常都是由 重排序 和 写缓冲区 引发的,重排序又分为 处理器重排序 和 编译器重排序 。面对 写缓冲区 的问题,像Java这样的高级语言一般无能为力,所以从 重排序 入手,在重排序里,JVM通过内存屏障提供了一层 阅读全文
posted @ 2019-06-02 15:27 CoDeleven 阅读(278) 评论(0) 推荐(0) 编辑
摘要: happens before 是JMM的核心概念 JMM的设计 程序员对内存模型的使用。程序员希望内存模型简单易用、易于理解,程序员需要一个强内存模型(尽量偏向顺序一致性)编写程序 编译器和处理器对内存模型的实现。编译器和处理器希望内存模型对它们的束缚越小越好,编译器和处理器需要一个弱内存模型(尽量 阅读全文
posted @ 2019-06-02 15:24 CoDeleven 阅读(262) 评论(0) 推荐(0) 编辑
摘要: final的重排序规则 以下面的代码为例,讲解final写和final读的重排序规则 final写的重排序规则 JMM保证写final变量时不被编译器重排序到构造函数外 编译器会在写final域后,构造函数返回前插入StoreStore屏障 假设现在线程A执行init(),线程B执行read()时, 阅读全文
posted @ 2019-06-02 15:20 CoDeleven 阅读(472) 评论(0) 推荐(1) 编辑
摘要: 队列这个数据结构已经很熟悉了,就不多介绍,主要还是根据代码理解Doug Lea大师的一些其他技巧。 入队 如图所示,很多人可能会很疑惑,为什么第一次入队后,TAIL没有指向Node2?答案是为了效率!Σ(っ °Д °;)っ 那这还能叫队列吗?当然,它依然符合先进先出(FIFO)的规则。只是TAIL变 阅读全文
posted @ 2019-06-02 15:11 CoDeleven 阅读(225) 评论(0) 推荐(0) 编辑
摘要: HashMap只是相对线程安全,如果出现数据竞争就抛出fail fast;HashTable则将每个操作都上锁,如果有耗时的操作,那么后续的操作均会被阻塞,大大降低程序的吞吐率。而ConcurrentHashMap正是为了解决这样一个问题而出现的。 ConcurrentHashMap和HashMap 阅读全文
posted @ 2019-06-02 15:03 CoDeleven 阅读(475) 评论(0) 推荐(0) 编辑
摘要: 其中主要是了解下 以及 是支持对象引用原子更新的类,仅仅是支持引用,如果要让对象内的字段支持原子更新,就一定要使用到 。 字段更新类需要特别注意,字段必须是 类型的。 和`AtomicMarkableReference`均是用于解决ABA问题的类(后者不知道有没有,暂时没实践经验)。前者解决字段方面 阅读全文
posted @ 2019-06-02 14:59 CoDeleven 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 背景 在学习Idea的插件开发时,用到了相关的 这个东西,里面的 有一个 方法引起了我的注意,我发现我不知道—— 科普 首先知晓一下几个名词—— 路径 、 绝对路径/相对路径 、 规范路径 然后考虑以下几种路径: 1. c:\temp\file.txt 2. .\file.txt 3. c:\tem 阅读全文
posted @ 2019-04-21 15:07 CoDeleven 阅读(8371) 评论(0) 推荐(3) 编辑