![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 75
qq_20846769
这个作者很懒,什么都没留下…
展开
-
锁升级的过程
锁升级的过程锁升级分为两种情况:当偏向锁开关打开时(-XX:+UseBiasedLocking)的升级过程如下(默认打开):无锁 -> 偏向锁 ->轻量级所->重量级锁。具体为:对象首先是无锁状态,当对象第一次被线程获取的时候,虚拟机将会把对象头中的标志位设置为01,即偏向模式。同时使用CAS方式将获取到这个锁的线程id记录到对象的Mark Word中,如果操作成功,持有偏向锁的线程下一次进入这个锁的同步块时,不需要在进行任务同步操作。当有另一个线程去尝试获取这个锁时,偏向原创 2022-01-09 19:20:43 · 893 阅读 · 0 评论 -
JVM的组成
JVM由类加载器、运行时数据区、执行引擎、本地方法接口、垃圾回收系统五部分组成。一、类加载器用来将二进制.class文件加载到内存中,经过加载、链接(校验、准备、解析)、初始化,并在内存中创建一个class类对象,保存着该类在内存中的数据结构。(注意这个class类对象和堆内存中new出来的实例不是一个东西,这个class类对象只有一个,jvm并没有规定这个class类对象在内存中的位置,h...原创 2019-08-28 22:37:56 · 599 阅读 · 0 评论 -
线程上下文类加载器和SPI问题
1、SPI(Service privider interface)服务提供者接口;比如连接数据库的JDBC;Driver、Connect都是接口,具体的实现是由各个厂商完成的。这样会出现一个问题,java.sql.Driver在核心库中,由 启动类加载器加载;而具体实现jar包放在classpth下,由系统加载器AppClassLoader加载,根据双亲委托机制,启动类加载器加载的类无法调用系统...原创 2019-08-26 23:46:03 · 895 阅读 · 0 评论 -
系统类加载器(AppClassLoader)源码分析
可以通过ClassLoader.getSystemClassLoader()方法获取系统类加载器,下面进入到ClassLoader的该方法中查看系统类加载器如何被创建。1、通过initSystemClassLoader()方法来初始化系统类加载器 public static ClassLoader getSystemClassLoader() { initSystemC...转载 2019-08-26 22:43:36 · 1220 阅读 · 1 评论 -
类加载器ClassLoader与命名空间
1、类加载器的双亲委派机制:2、类加载器的命名空间该类加载和其所有父类加载器加载的类组成该类加载器的命名空间。同一命名空间内不会存在全限定名相同的类,同一命名空间内,子类加载器加载的类可以访问父类加载器加载的类;反之,父类加载器加载的类不能访问自类加载器加载的类。例:public class ClassLoaderTest extends ClassLoader{ private...原创 2019-08-22 23:59:14 · 1718 阅读 · 1 评论 -
Class.forName()源码分析
1、class.forName()源码:以JDBC驱动加载为例:1)通过Reflection.getCallerClass()获取调用该方法的类2)获取调用者的类加载器,并使用调用者的类加载器去加载JDBC驱动,并初始化驱动类,在初始化驱动类之前,先初始化DriverManager。3)初始化DriverManager,执行静态块,遍历META-INF/services目录下描述的所有驱动...转载 2019-08-28 00:19:34 · 1127 阅读 · 0 评论 -
.class文件结构分析
1、class文件的结构字节码文件的结构包括:魔数、版本号、常量池、访问标志、类索引以及父类索引或者接口索引信息(集合)、字段(类变量和成员变量)信息(集合)、方法信息(集合)1)魔数:4个字节,java的标志,值为CAFEBABE2)版本号:紧跟魔数之后的4个字节,前两个字节是minor version(次版本号),后两个字节是major version(主版本号)。3)常量池(cons...原创 2019-09-01 11:02:10 · 90 阅读 · 0 评论 -
java方法重载与方法重写
静态解析与动态链接要了解重载与重写,首先需要了解java的动态链接与静态解析。静态解析:有些符号引用在类加载阶段或者第一次使用时,就会转换为直接引用(内存中的地址),这种转换叫做静态解析。动态链接:还有一些符号引用则是在每一次运行期间转换为直接引用,这种转换叫做动态链接(java多态的体现)。在java虚拟机中一共有5个方法调用字节码指令:invokestatic:调用静态方法。inv...原创 2019-09-01 21:29:13 · 133 阅读 · 0 评论