随笔分类 -  Java

摘要:偏向锁 偏向 第一个 拿到锁的线程。 即第一个拿到锁的线程,锁会在对象头 Mark Word 中通过 CAS 记录该线程 ID ,该线程以后每次拿锁时都 不需要进行 CAS (指轻量级锁)。 如果该线程正在执行同步代码块时有其他线程在 竞争 (指其他线程尝试 CAS 让 Mark Word 设置自己 阅读全文
posted @ 2019-09-22 21:41 eycuii 阅读(2886) 评论(0) 推荐(0)
摘要:@sun.misc.Contended 介绍 @sun.misc.Contended 是 Java 8 新增的一个注解,对某字段加上该注解则表示该字段会单独占用一个 缓存行 (Cache Line)。 这里的缓存行是指 CPU 缓存(L1、L2、L3)的存储单元,常见的缓存行大小为 64 字节。 ( 阅读全文
posted @ 2019-09-15 23:48 eycuii 阅读(4292) 评论(0) 推荐(0)
摘要:"Understanding Java Memory Management IBM" Java Native Interface (JNI) Objects and Code Java Native Interface code can directly allocate native memory 阅读全文
posted @ 2019-09-08 14:40 eycuii 阅读(341) 评论(0) 推荐(0)
摘要:http://blog.jamesdbloom.com/JVMInternals.html (基于 Java 7) 阅读全文
posted @ 2019-09-08 12:23 eycuii 阅读(123) 评论(0) 推荐(0)
摘要:(Java 普通对象。不包括数组、Class 对象等。) ​ 对象创建过程 类加载 遇到 new 指令时,获取对应的符号引用,并检查该符号引用代表的类是否已被初始化。如果没有就进行类加载。 分配内存 从堆中找到一块空间划分给对象。 分配时,为了避免并发问题,JVM 会通过 CAS + TLAB 来保 阅读全文
posted @ 2019-09-06 19:47 eycuii 阅读(475) 评论(0) 推荐(0)
摘要:Class 常量池 Constant Pool 存在于编译生成的 Class 文件中。用于存在各种字面量、符号引用。 ​ 方法区 方法区在 JVM 启动时创建,里面包含运行时常量池、字符串常量池、静态变量、方法的代码等。 方法区是堆的 逻辑 组成部分,但其实现要看具体 JVM 是存放到哪的,而且也没 阅读全文
posted @ 2019-09-06 12:57 eycuii 阅读(423) 评论(0) 推荐(0)
摘要:switch 支持的类型 在 Java 语言规范里中,有说明 switch 支持的类型有:char、byte、short、int、Character、Byte、Short、Integer、String、enum。 ​ 为什么不支持 long ? 为什么只支持上面几种?int、String 都可以,为 阅读全文
posted @ 2019-09-06 09:07 eycuii 阅读(2780) 评论(1) 推荐(0)
摘要:JVM 何时、如何把 Class 文件加载到内存,形成可以直接使用的 Java 类型,并开始执行代码? ​ 类的生命周期 加载 连接(验证、准备、解析) 初始化 使用 卸载。 注意,加载、验证、准备、初始化顺序是确定的,但是不是按部就班地「执行」,而是按部就班地「开始」。 另外,为了支持 Java 阅读全文
posted @ 2019-09-05 21:30 eycuii 阅读(403) 评论(0) 推荐(0)
摘要:重载 重载可以在 编译期 确定调用的方法。 为什么重载不能根据返回值类型区分? 因为有时候只关心方法的执行,而不去关心返回值。 但其实 JVM 是允许只根据返回值来区分的: 在 Class 文件常量池里,每个方法有它的名称、描述符(参数类型+返回值类型)。 JVM 规范中是允许 Class 文件内存 阅读全文
posted @ 2019-09-04 21:22 eycuii 阅读(1505) 评论(0) 推荐(0)
摘要:Class 常量池 Constant Pool 存在于编译生成的 Class 文件中。用于存在各种字面量、符号引用。 ​ 方法区 方法区在 JVM 启动时创建,里面包含运行时常量池、静态变量、方法的代码等。 方法区是堆的 逻辑 组成部分,但其实现要看具体 JVM 是存放到哪的,而且也没有规定是否需要 阅读全文
posted @ 2019-09-04 18:42 eycuii 阅读(586) 评论(0) 推荐(0)
摘要:静态内部类 如何访问外部类的私有类变量? 通过编译阶段生成的一个访问外部类的 static 的 方法,然后在静态内部类中,通过外部类的类名调用,如 。 ​ 非静态内部类 编译时对内部类构造函数上会默认注入外部类引用,类似: 如何访问外部类的私有变量? 也是用 方法。 创建非静态内部类对象时,为什么会 阅读全文
posted @ 2019-09-04 11:44 eycuii 阅读(164) 评论(0) 推荐(0)