并发编程有3个源头性问题:缓存导致的可见性问题,编译优化导致的有序性问题,以及线程切换导致的原子性问题。解决可见性问题和有序性问题的方法是按需禁用缓存和编译优化,Java的内...
并发编程有3个源头性问题:缓存导致的可见性问题,编译优化导致的有序性问题,以及线程切换导致的原子性问题。解决可见性问题和有序性问题的方法是按需禁用缓存和编译优化,Java的内...
为什么要有 Java内存模型? 并发编程的3个源头问题分别是: 可见性,由缓存导致的可见性问题 有序性,由编译优化导致的有序性问题 原子性,由线程切换导致的原子性问题 Jav...
操作系统使用信号量解决并发问题,Java选择使用管程(Monitor)解决并发问题。信号量和管程是等价的,可以使用信号量实现管程,也可以使用管程实现信号量。 管程就是指管理共...
HashMap 是一种 KV 形式的数据结构,允许有一个 key 为 null,value 允许为 null。HashMap 的存储,使用的是哈希表,将 key 通过 Has...
fail-fast 快速失败,是指在遍历集合时,检查遍历过程中集合的modCount是否改变,如果改变就会抛出java.util.ConcurrentModification...
将Array转为List: 使用 Arrays.asList(),转化后的 List 不能 add(),否则会报 java.lang.UnsupportedOperation...
跟JVM内存相关的几个核心参数
新生代满了会触发 Young GC,老年代满了会触发 Old GC。GC时会回收对象,那么具体是什么样的对象会被垃圾回收器回收呢? 可达性分析算法,判断是否被 GC Root...
我们都知道以 .java 结尾的 Java 源文件,经过编译之后会变成 .class 结尾的字节码文件。JVM 通过类加载器来加载字节码文件,然后再执行程序。 什么时候加载一...
图解JVM类加载机制和双亲委派模型一文中讲述了 Java 类加载的过程,它包含加载、验证、准备、解析、初始化、使用、卸载这 7 个步骤。在准备阶段,JVM会将类加载到内存中,...
GC流程是每一个Java开发人员都应该掌握的内容。你知道什么时候触发Minor GC?什么时候触发Minor GC ?Old GC 的过程又是怎么样的? 看图,看图,看图。跟...
CMS 垃圾回收器进行垃圾回收的时候会分成 4 个阶段:初始标记、并发标记、重新标记、并发清理。其中初始标记阶段会「Stop the world」,并且回收被 GC Root...