jvm
文章平均质量分 70
延迟满足
热爱新技术,喜欢研究原理,感受设计之美。
展开
-
Java 必备原理知识
注:这篇博客主要记录一些我觉得作为一个 Java 开发所应该知道的基础知识。有的内容我觉得有些博客已经写的很清晰了,我就会直接复制过来并标明原文链接。final、static、static final修饰的字段赋值的区别static修饰的字段在类加载过程中的准备阶段被初始化为0或null等默认值,而后在初始化阶段(触发类构造器)才会被赋予代码中设定的值,如果没有设定值,那么它的值就为默认值。final修饰的字段在运行时被初始化(可以直接赋值,也可以在实例构造器中赋值),一旦赋值便不可更改;stati原创 2020-06-07 10:32:46 · 376 阅读 · 0 评论 -
堆和栈的区别
原创 2018-09-20 18:41:20 · 138 阅读 · 1 评论 -
Java 中的锁优化
jdk1.6 开始 JVM 对 synchronized 关键字做了大量的锁优化。自旋锁通过 CAS 来自旋直到获取锁,占用 CPU 资源,但不会进行线程状态的切换。适合用于线程竞争不激烈,短任务的场景。线程竞争激烈的情况下,自旋会占有 CPU,从而使系统的吞吐量降低。锁消除JIT 编译器经过逃逸分析后发现并没有线程安全问题,就会做锁消除。锁粗化当 JIT 编译器发现一系列连续的操...原创 2018-10-18 21:40:22 · 172 阅读 · 0 评论 -
从字节码角度理解静态方法和实例方法的调用
微信公众号:Java 知其所以然关注可了解更多的教程。问题或建议,请公众号留言;实例方法的调用代码public class App { public static void main(String[] args) { 原创 2018-10-09 17:27:54 · 472 阅读 · 0 评论 -
Minor GC 和新生代对象的晋升
背景Java 中的对象优先在 Eden 分配,当 Eden 区满时会触发 Minor GC。新生代对象晋升到老年代有多种情况触发 Minor GC 时,Eden 区和一个 Survivor 区中存活的对象大于另一个 Survivor 区的大小,则通过分配担保机制进入老年代。若对象太大, 新生代无法容纳这个对象,直接进入老年代。长期存活的对象将进入老年代。对象的年龄达到 MaxTenur...原创 2019-02-27 10:42:35 · 475 阅读 · 0 评论 -
JDK 1.6 synchronized 的锁优化
背景在 JDK 1.6 中对锁的实现引入了大量的优化。目的减少锁操作的开销。JDK 1.6 以后的锁优化在看下面的内容之间,希望大家对 Mark Word 有个大体的理解。Java 中一个对象在堆中的内存结构是这样的:Mark Word 是这样的:1. 适应性自旋锁自旋锁的思想:让一个线程在请求一个共享数据的锁时执行忙循环(自旋)一段时间,如果在这段时间内能获得锁,就可以避免进...原创 2019-04-20 21:49:53 · 351 阅读 · 0 评论 -
Java 中常说的常量池到底是什么
常量池的划分Class 文件常量池运行时常量池字符串常量池1. Class 文件常量池Class 文件常量池指的是编译生成的 class 字节码文件,其结构中有一项是常量池(Constant Pool Table),用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中存放。什么是字面量和符号引用?字面量是指字符串字面量和声明为 final ...原创 2019-05-11 10:04:51 · 4538 阅读 · 1 评论 -
JVM 的类加载过程
流程图详细分析1. 加载找到 class 文件并加载到方法区中,在堆中创建对应的 Class 对象。2. 链接分为三步:验证、准备、解析。3.初始化执行类的类构造方法 <clinit> 。...原创 2019-09-08 09:35:00 · 135 阅读 · 0 评论