![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jvm
回首往昔少年
这个作者很懒,什么都没留下…
展开
-
javac编译过程
参考文章(深入理解JVM之Javac编译器详解)编译过程大致可以分为三个步骤:解析和填充符号表过程插入式注解处理器的注解处理过程分析和字节码生成过程这三个步骤所做的工作内容大致如下:这三个步骤之间的关系和交互顺序如下图所示,可以看到如果注解处理器在处理注解期间对语法树进行了修改,编译器将回到解析和填充符号表的过程进行重新处理,直到注解处理器没有再对语法树进行修改为止。...原创 2020-10-11 21:02:42 · 408 阅读 · 0 评论 -
init与clinit区别
参考《深入理解java虚拟机》init和clinit区别①init和clinit方法执行时机不同init是对象构造器方法,也就是说在程序执行 new 一个对象调用该对象类的 constructor 方法时才会执行init方法,而clinit是类构造器方法,也就是在 jvm 进行类加载—–验证—-解析—–初始化中的初始化阶段 jvm 会调用 clinit 方法。②init和clinit方法执行目的不同init is the (or one of the) constructor(s) for th原创 2020-10-11 11:12:50 · 635 阅读 · 0 评论 -
java内存结构、java内存模型、java对象模型
再有人问你Java内存模型是什么,就把这篇文章发给他JVM内存结构 VS Java内存模型 VS Java对象模型原创 2020-10-04 10:15:47 · 112 阅读 · 0 评论 -
伪共享
问题(1)什么是 CPU 缓存行?(2)什么是内存屏障?(3)什么是伪共享?(4)如何避免伪共享?CPU缓存架构CPU 是计算机的心脏,所有运算和程序最终都要由它来执行。主内存(RAM)是数据存放的地方,CPU 和主内存之间有好几级缓存,因为即使直接访问主内存也是非常慢的。如果对一块数据做相同的运算多次,那么在执行运算的时候把它加载到离 CPU 很近的地方就有意义了,比如一个循环计数,你不想每次循环都跑到主内存去取这个数据来增长它吧。越靠近 CPU 的缓存越快也越小。所以 L1 缓存很转载 2020-09-26 17:07:16 · 211 阅读 · 0 评论 -
三大常量池之间的关系及随JDK版本变化
静态常量池常量池主要存放两大常量:「字面量和符号引用」。字面量比较接近于 Java 语言层面的的常量概念,如文本字符串、声明为 final 的常量值等。而符号引用则属于编译原理方面的概念。包括下面三类常量:类和接口的全限定名字段的名称和描述符方法的名称和描述符常量池的好处:常量池是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享。举个例子:字符串常量池,在编译阶段就把所有的字符串文字放到一个常量池中。节省内存空间:常量池中所有相同的字符串常量被合并,只占用一个空间。节省运原创 2020-09-25 09:34:03 · 202 阅读 · 0 评论