
JVM
文章平均质量分 89
BugGuys
--你爱我,我爱你,蜜雪冰城甜蜜蜜--
展开
-
java_计算内存对象大小
现在公司的代码评审越来越严格,技术方案评审上经常会问到对象设计的合理性,对于常驻内存的对象,我们应在设计时考虑到对象占用的内存空间,保证JVM运行时不会频繁GC,确保系统的稳定性和可靠性。.........原创 2022-07-26 17:55:53 · 931 阅读 · 5 评论 -
Spring的后置处理器这么厉害?让流程图告诉你Spring启动时的后置处理器工作流程
探究Spring的后置处理器文章目录探究Spring的后置处理器流程图prepareRefresh剖析obtainFreshBeanFactory刨析prepareBeanFactory刨析invokeBeanFactoryPostProcessors剖析本次我们主要探究invokeBeanFactoryPostProcessors();后面的代码下次再做解析;入口代码refresh()AnnotationConfigApplicationContext applicationContext = n原创 2021-10-21 09:35:28 · 5668 阅读 · 35 评论 -
多图剖析|Spring的循环依赖竟如此复杂
Spring的循环依赖文章目录Spring的循环依赖spring4和5的AOP区别什么是循环依赖Spring容器Spring的三级缓存Spring循环依赖Bean注入IOC全流程1. 创建CircleRefA2. 创建CircleRefB3. CircleRefB获取CircleRefA对象4. CircleRefB注入CircleRefA对象5. CircleRefA注入CircleRefB被AOP代理类循环依赖的全过程情况1:先扫描被代理类情况2:后扫描被代理类Spring Bean无代理是加入IOC原创 2021-10-07 17:31:00 · 4665 阅读 · 24 评论 -
JAVA面试题|JVM剖析与常用的调优总结
JAVA基础篇面试题文章目录JAVA基础篇面试题1. 什么是GC Roots2. JVM调优和参数配置3. 常用的JVM调优参数4. 分析GC日志5. 四种引用强引用软引用弱引用虚引用6. 常见的JVM异常/错误1. 什么是GC RootsGC Roots是一组活跃的引用;常用于判断对象是否被回收的可达性分析法中;可达性分析:通过一系列称为GC Roots的跟对象作为起始节点集,从这些结点开始,根据引用关系向下搜索,搜索过程所走过的路径称为“引用链”,如果某个对象到根节点间没有任何引用链相连,则证明原创 2021-09-24 09:31:54 · 4942 阅读 · 25 评论 -
JAVA面试题|垃圾收集器题目汇总
JAVA基础篇面试题文章目录JAVA基础篇面试题1. 简述四种垃圾回收器串行垃圾回收器(serial)并行垃圾回收器(Parallel)并发垃圾回收器(CMS)G1垃圾回收器2. 配置JVM的垃圾回收器3. 垃圾收集器对应收集区域4. JVM的Client和Server模式是什么5. 垃圾收集器的详细总结Serial收集器ParNew收集器Parallel Scavenge收集器Parallel Old收集器CMS收集器Serial Old收集器G1收集器6. 如何选择垃圾收集器7. github奇门遁原创 2021-09-14 09:05:12 · 5752 阅读 · 27 评论 -
JAVA面试题|线程池相关题目
JAVA基础篇面试题文章目录JAVA基础篇面试题1. Callable接口详解2. 介绍下线程池3. 常见的3种线程池4. 线程池的拒绝策略5. 线程池的配置6. 死锁的概念与产生死锁的主要原因7. 死锁产生的必要条件与解决死锁的方法8. 死锁检测方法1. Callable接口详解作用:Callable接口详解优势:可以获得任务执行返回值;通过与Future的结合,可以实现利用Future来跟踪异步计算的结果。Runnable与Callable的区别Callable规定的方法是call原创 2021-09-06 10:54:16 · 5850 阅读 · 11 评论 -
JAVA面试题|JAVA锁相关面试题总结(一)
JAVA基础篇面试题文章目录JAVA基础篇面试题1. 什么是JMM2. 介绍一下violated3. 写一个单例模式4. 介绍一下CAS5. CAS的问题6. ArrayList线程不安全的替换方案7. 什么是公平锁8. 什么是可重入锁9. 什么是自旋锁10. 什么是独占/共享/互斥锁11. CountDownLatch,CyclicBarrier,Semaphore12. 什么是阻塞队列1. 什么是JMMJMM(Java Memory Model)本身是一种抽象的概念并不真实存在,它描述的是一组规原创 2021-08-23 19:39:55 · 6997 阅读 · 5 评论 -
JVM篇·线程安全与优化
线程安全与优化本文为《深入理解Java虚拟机_JVM高级特性与最佳实践·周志明》学习笔记文章目录线程安全与优化线程安全共享数据分类1. 不可变2. 绝对线程安全3. 相对线程安全4. 线程兼容5. 线程对立线程安全的实现方法1. 互斥同步2. 非阻塞同步3. 无同步方案可重入代码:线程本地存储:线程安全概念:当多个线程同时访问一个对象时,设计者和调用者不考虑这些线程在运行环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那原创 2021-07-27 19:40:47 · 6875 阅读 · 3 评论 -
JVM篇·JVM内存模型与线程
Java内存模型与线程本文为《深入理解Java虚拟机_JVM高级特性与最佳实践·周志明》学习笔记背景知识TPS(每秒事务处理数):代表着1s内服务端平均处理响应的请求总数。在相同的任务下,TPS越高,代表程序线程并发协调有条不紊,效率高;TPS越小,线程之间频繁征用数据,互相阻塞以及死锁,降低并发能力;高速缓存:内存与处理器的桥梁,解决了之间读写速度不一致的问题,同时需要保证缓存一致性(遵守相关协议解决:MSI,MESI,MOSI等)。共享内存多核系统:多路处理器系统每个处理器都有自己的高速原创 2021-07-19 20:30:35 · 6926 阅读 · 4 评论 -
JVM篇·虚拟机字节码执行引擎
虚拟机字节码执行引擎本文为《深入理解Java虚拟机_JVM高级特性与最佳实践·周志明》学习笔记文章目录虚拟机字节码执行引擎运行时栈帧结构局部变量表操作数栈动态连接方法返回地址附加信息方法调用解析5条方法调用字节码非虚方法分派静态分派重载重写场景重载优先级动态分配invokevirtual执行分派步骤单分派&多分派虚拟机对动态分派的实现动态类型语言支持动态类型语言Java的动态类型支持原理反射与MethodHandle对比基于栈的字节码解释执行引擎解释执行基于栈/寄存器的指令集对比运行时栈帧原创 2021-07-14 09:46:18 · 6533 阅读 · 5 评论 -
手动实现自定义类加载器实现热加载
目标实现一个简单的热部署编译功能;流程首先将字节码中的System类重定向到自定义IO流中,由于Sytem.out是类方法,因此我们可以修改class文件中的常量池,将System类符号修改成自定义IO流符号,实现重定向;再通过自定义类加载器,实现每次代码热更时的加载;具体过程自定义类加载器避免类冲突public class MyTestClassLoader extends ClassLoader{ public MyTestClassLoader() { s原创 2021-07-05 11:18:07 · 6791 阅读 · 4 评论 -
JVM篇·关于虚拟机类加载的机制整理
虚拟机类加载机制本文为《深入理解Java虚拟机_第三版 周志明》学习笔记文章目录虚拟机类加载机制类加载时机触发初始化阶段的6种情况:被动引用接口的初始化类加载过程加载验证文件格式验证元数据验证字节码验证符号引用验证准备解析类或接口的解析字段解析方法解析接口方法解析初始化类加载器双亲委派模型启动类加载器扩展类加载器应用程序类加载器类加载机制:JVM把描述类的数据从Class文件加载到内存并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。类加载时机生命周期7阶段:加载原创 2021-06-30 14:10:26 · 6922 阅读 · 8 评论 -
JVM篇·Class文件结构剖析
类文件结构本文为《深入理解Java虚拟机_第三版 周志明》学习笔记Class类文件的结构概念任何一个Class文件都对应着唯一的一个类或接口的定义信息。class文件是一组以8个byte为基础的二进制流,存储的内容几乎全部是程序运行的必要数据。只包含俩种数据类型:“无符号数”和“表”。class文件中不会保存各个方法,字段最终在内存中的布局信息,这些字段,方法的符号引用不经过虚拟机在运行期间转换的话是无法得到真正的内存入口地址。魔术与Class文件的版本每个class文件的前4个字节放的原创 2021-06-21 20:51:14 · 6498 阅读 · 5 评论 -
JVM篇·垃圾收集器与内存分配策略
Java堆内存的整理方法本文为《深入理解Java虚拟机_第三版 周志明》学习笔记引用计数法概念:在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一,当引用失效时,计数值就减一;任何时刻计数器为零的对象就是不可能再被使用的。但当遇到循环引用时就无法正确处理;强引用:引用赋值,只要强引用关系存在,垃圾收集器就永远不会回收掉引用对象。软引用:SoftReference有用但非必须的对象。只要存在着关系,在发生内存溢出异常前,会把这些对象列入回收范围之中进行二次回收,如果回收没有足够原创 2021-06-17 13:48:34 · 6531 阅读 · 3 评论 -
JVM篇·JAVA内存区域与内存泄漏相关剖析
JAVA虚拟机运行时数据区分析本文为《深入理解Java虚拟机_第三版 周志明》学习笔记目录JAVA虚拟机运行时数据区分析程序计数器Java虚拟机栈本地方法栈Java堆方法区运行时常量池直接内存元空间HotSpot虚拟机对象分析对象的创建对象头的模型普通对象(32位)数组对象(32位)Mark Word结构(32位)Mark Word结构(64位)对象的访问定位图片来源程序计数器线程私有较小的内存空间,当前线程所执行的字节码的指示器。每条线程都拥有独立的程序计数器,保证线程之间互不影响。原创 2021-06-07 17:09:02 · 6750 阅读 · 4 评论