- 博客(11)
- 收藏
- 关注
原创 JVM类加载机制
类加载器:引导类加载器:C++实现,负责加载JRE的lib目录下的核心类库,比如rt.jar扩展类加载器:负责加载JRE的lib目录下的ext扩展目录中的jar包应用程序类加载器:负责加载ClassPath路径下的类包自定义加载器:负责加载用户自定义路径下的类包public static void main(String[] args) { System.out.println(String.class.getClassLoader()); System
2021-12-09 14:52:56
106
原创 关于synchronized锁升级的理解
锁升级的过程,一般是 无锁、偏向锁、轻量级锁(自旋锁、无锁)、重量级锁这么几个阶段。首先要知道synchronized同步锁是针对一个对象实例加锁,无锁:其中第一个阶段“无锁”很好理解,表示一个初始状态,对象刚刚被创建出来并且没有被任何线程访问到。无锁->偏向锁:当被synchronized修饰的对象第一次被某线程访问时,会在对象的markword中记录该线程的标识,并更改锁状态标识,如果下次访问的线程还是该线程,则直接放行。如果下次访问的线程不是该线程,则触发锁升级->轻量级锁
2020-08-31 11:37:20
223
原创 关于逃逸分析
首先回顾一下jvm内存分配策略:java虚拟机所管理的内存包括:方法区、虚拟机栈、本地方法栈、推、程序计数器等JVM运行时数据主要存放在堆和栈,此处栈指虚拟机栈。栈中存放了一下基本类型,及对象的引用。对中主要存放对象,既new关键字创建的对象或数组元素等等。但是由于JIT编辑和逃逸分析的影响,对象存在堆中不一定是绝对的。发生逃逸行为分为两种:1.线程逃逸:当一个对象在方法中定义之后,作为参数传递到其他方法中2.方法逃逸:如类变量或实例变量,可以被其他线程访问到如果不存在.
2020-08-27 14:36:10
281
原创 关于对象在内存中的布局
以64位操作系统来说1.对象头:mark word + 类型指针mark word占8字节,其中主要存储自身运行时的信息,比如hashCode,GC分代年龄,锁的信息,synchronized的实现就和这里息息相关。类型指针占4字节,通常64位操作系统的类型指针长度为64bit,既8字节。由于JVM的UseCompressedClassPoint参数(类指针压缩)默认为开启,因此实际占有4字节。2.实例数据:这部分占有的内存大小,就是根据成员变量的数据类型所占有的大小决定,例如byte
2020-08-27 13:38:35
153
原创 关于ThreadPoolExecutor回顾
关于ThreadPoolExecutor的杂谈ThreadPoolExecutor有四种构造方法,用来在创建线程池对象的时候初始化其属性。在源码里发现一个ThreadPoolExecutor对象需要7个必要的属性,既: 构造方法一 构造方法二 构造方法三 构造方法四 int corePoolSize 核心线程数 √ √ √ √ int maximumPoolSize 最大线程数....
2020-08-13 15:36:03
169
原创 spring bean的生命周期回顾
1、扫描2、将扫描到的类信息存入BeanDefinition,并map.put("类名",BeanDefinition)3、遍历这个map的key4、根据遍历到的key,对其value既BeanDefinition中的类信息进行验证5、根据BeanDefinition中的beanClass属性获取到要实例化的class6、根据class去推断构造方法,通过构造方法反射实例化一个...
2020-04-23 11:46:31
123
原创 关于JVM结构和GC工作机制
一、JVM结构1.类装载器 在JVN启动时或者类运行时,将class文件加载到JVM中。2.执行引擎 执行class文件中的字节码指令。3.本地库接口 主要是调用C或C++实现的本地方法及返回结果。4.内存区域 (1)方法区:方法区中存储了类的信息,比如常量池,构造函数,静态变量等。方法区中还有运行时常量池。常量池分为静态...
2019-06-28 14:11:21
214
原创 搭建Apollo配置中心操作记录
最近项目在拆分微服务后,各个服务的配置的管理,发现了很多麻烦,例如:配置散乱格式不标准;本地静态配置修改麻烦;配置缺乏安全审计和版本控制等。因此配置中心的搭建势在必行。Apollo配置中心有三个核心的经过技术选型后,角色采用携程框架部门研发的Apollo作为配置中心,以下是搭建过程。一、获取安装包。https://github.com/ctripcorp/apollo/re...
2019-06-26 19:11:12
354
原创 ThreadLocal源码的个人理解
对于ThreadLocal并不陌生,众所周知ThreadLocal类被用来提供线程内部的局部变量。例如:add这个方法,两个线程分别进行调用,打印的结果是1,2。在访问公共资源时,线程之间会互相影响。 private static int i = 1; public static void main(String[] args) throws Exception { ...
2019-05-14 18:05:19
155
原创 人心浮躁,需要沉淀。
沉淀自己,就是反思自己,总结自己,整理自己,升华自己,凝练自己,甚至于要重新删除自己,清空自己。沉淀自己,就需要安下心来,静心学习,读以前没有时间读的好书,用高尚的东西重新塑造自己;就需要摒弃那些烦人的贪欲,静下心来,做个简单平常的人,珍惜并过好眼前美好的生活;就需要稳下心来,回望自己,总结自己的得失成败,把该忘记的忘记,把该抛弃的抛弃,不再为一些破人破事劳心费力;就需要...
2019-05-14 11:33:14
611
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅