自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 ThreadLocalMap与内存泄漏

内存溢出:就是栈递归导致内存不够用 常见的OOM内存泄漏:垃圾回收器本来要回收的资源一直得不到释放,造成浪费堆积,长时间后导致内存溢出。

2025-08-07 11:17:49 425

原创 线程池的核心参数及过程

核心线程数慢了之后放入等待队列,队列满了放到最大线程数,这时是new 一个线程,最大线程数满了之后会启动就拒绝策略,满了报错、忽视、将执行任务的线程交给提交任务的线程处理,丢弃队列里最旧的再执行一次。阻塞队列:会一直不断地从队列里尝试取出任务,如果取不出来会一直阻塞,从而保证核心线程数的线程一直存活。最大线程数指的是核心线程数和队列已满时new的线程的数量总和,不包括阻塞队列里的任务数量。核心线程数、最大线程数、阻塞队列,线程工厂、拒绝策略,线程的存活时间、时间的单位。

2025-08-07 11:16:53 498

原创 jvm 工具调优

底层实现Integer.valueof() 逻辑:初始化一个缓存池-128,127,之间创建对象时,值相同的直接取,不同new Integer ,因此不在范围内的每次创建都会生产一个新的对象。String.intern 如果字符串常量池里有,返回的是字符串常量池的地址,如果没有返回的是堆的,但常量池存的是堆的地址。第一次创建发现字符串常量池没有,放到字符串常量池,后续创建字符串时判断字符串常量池有吗,相当于缓存池,不用在堆上重新创建。1.7,1.8 常量池存堆对象的地址,返回值对象与堆对象引用相同。

2025-08-07 11:16:12 277

原创 Jvm 调优实战

老年代空间分配担保机制: 判断剩余老年代空间小于历次晋升老年代 先FULL gc 在yong Gc 在full Gc 老年代回收次数比年轻代多。查看线程堆内存各空间总大小、已使用的大小、Gc 总次数、总时间,并且可以每隔几秒查一次,实时更新。用户线程每次到达安全点,都会查看标志位是否是1 ,是1就能安全地进行Gc 源码里用断言判断查看。查看线程哪个方法占用Cpu高 top 线程id-> H-> jstack 定位方法栈信息。cpu jstack 命令 查看线程的状态,及线程信息。

2025-08-07 11:15:40 310

原创 垃圾收集器G1 ZGC

会优先收集消耗时间比较短的,也就是region 区域存活对象比较少的,垃圾可能较多的(对象越多 能回收的垃圾越少 性价比越低),会STW,保证单位时间内回收垃圾最多。重新标记分配 标记整理算法 对象移动 转发表记录旧地址与新地址的映射,实际转移到新地址,指针上依然存旧地址,通过读屏障,读到旧地址做转换。写屏障并发标记时把新生成的对象标记为黑色,下次直接取 不用重新GCroots,这里的下次指的重新标记。读屏障的作用 1对象地址被移动时保证指针地址指向对象最新地址 2发现产生新垃圾,修改染色指针标记。

2025-08-07 11:14:32 370

原创 垃圾收集器与三色标记法

3 会造成并发失败 就是并发时 如果有大对象进入老年代,老年代放不下 直接STW 交给serival old 效率很差,为防止并发失败,当老年代大小达到92% 不会满时就触发full GC 数值个通过参数可调。增量更新(重新标记)针对开始没有后来新增的引用先存起来,执行完并发标记后对新增的引用重新Gcroot,之前黑色对象可能会变为灰色对象 这时STW 不会出现之前的问题。错标:并发标记阶段,已经扫描过的对象的所有引用被销毁,本应回收掉因为已经被标色导致本轮无法回收,只能等下一轮回收,称为“浮动垃圾”

2025-08-07 11:13:09 419

原创 深入理解JVM引擎

编译时先查缓存是否有提前编译的,有直接执行,没有热点方法计数器+1,判断计数器总值是否大于阈值,默认是10000此,可调,达到视热点数据。如果没有发生方法逃逸,对象头不用存gc分代年龄,空间小,放到栈上不用进行gc(栈上分配),随方法结束。1.行内联 把方法的调用直接转化成代码执行 减少栈帧的分配 内联有方法大小的限制,方法太大不内联。可调整参数是否开启方法逃逸分析,是否允许标量替换,默认开启,jvm已帮我们优化到最优。方法计数器较粗,只能记录方法,优化为回边计数器,记录循环代码,颗粒度更细。

2025-08-07 11:12:27 398

原创 JAVA+JUC

泛型擦除指的是运行时编译会把类型转化为Object,运行时不区分具体类型,指在编译时检查。

2025-06-25 20:56:04 708

原创 spring 微服务

所谓的链路追踪就是观察服务与服务之间的先后调用关系,减少查日志等操作,主要是通过传播唯一标识trace-id ,service-id,parent-id ,发送返回的时间戳来时间的,是已有技术的继承,相当于一个高端的排查问题的工具。3 当一个服务调另一个服务是会注入该类型的接口,并声明服务名,调用时会根据服务名拿到对应的ip和端 口,通过实例类型,找到具体的实现类,被调用者执行完业务返回。当项目启动后,消费者会订阅配置中心,配置中心通过推送的方式推给消费者的本地缓存,放到bean的属性中。

2025-06-25 20:39:54 968

原创 RocketMq

常见的使用方式 集群模式 同一个topic 中的某条消息 只能被同一个消费者组的消费者所消费这样设计是为了 messageQueue 与消费者端都记录了消息消费的偏移量,如果一个MessageQueue被多个comsumer 消费会产生锁竞争,offset 会不准,所以在单个MessageQueue,保证只有一个comsumer 线程拿到消息。

2025-06-25 20:37:36 923

原创 互联网未来架构之道DDD领域驱动设计

当出现聚合场景时,领域模型与领域模型间存在协调配合关系,为了保证一致性,常常在应用层进行处理,而应用层负责协调领域模型间的关系时,如果保护领域模型,应用层间调用的先后依赖关系就会错综复杂,难以维护,且有一致性难以保证的风险。如果在一个抽离出来的方法里修改一个对象的值属性,那么,下面又使用来该对象时,抽离出来的方法不需要写被修改对象作为返回值,因为是拿着对象的引用做修改,这是对象内部属性已经改变,直接使用即可。2 数据操作隔离,单独抽离数据操作方法,同时操作上面修改的类,上面有修改属性可以直接使用对象。

2025-06-25 20:36:56 1003

原创 RocketMq 知识梳理

broker 实际存储消息的地方 一般是一主多从的结构,通过选举与raft 算法防止单点故障 内部有多个MessageQueue ,每个MessageQueue 都是有序的,broker 为MessageQueue 提供了负载均衡策略,broker 会按消费者topic的需求分配对应topic的消息。2 生产者会异步执行本地事务,如果本地事务执行成功 会向broker 发送comit 命令 将半事务消息可见,执行失败会发送rollback 命令 删除掉boker的半事务消息。

2025-03-05 00:12:56 778

原创 Spring 自动配置源码详解

作为一个bean 在容器中,如果扫描到的别的bean 不满足类型排除器的条件,就不会放入spring容器中,在spring源码里,这个容器发挥作用必须在初始化前放入,否则拿不到就会失效。getImportGroup 是重写接口的另一个方法,它提供了另一个选择,一旦重写该方法,重写的selectImort方法就不会走,getImportGroup指向的是不同的导入选择器的分组、分批逻辑。两者都是用来扫描配置类信息的 实现的方法是返回配置类的数组名 一般和import 注解 、指定哪个配置类连用。

2025-02-26 22:22:40 1574

原创 Spring 模拟总结2

required (默认) 子事务需要外界事务 如果外界有就融入外界,如果外界没有自己创建一个,必须需要一个,满足主管需要,自己必须有。support 支持 子事务支持外事务,如果外界有就融入,外界没有,自己不加事务,满足外界要求,自己无所谓。Resuorce 是根据bean的名称注入的,集合不是bean 所以拿不到bean的名字。required-new 自己有事务,和外界事务不是一个事务(挂起)按名称注入的找不到会按类型注入,按类型注入找不到唯一的会报错。一个按类型注入,一个按名字注入。

2025-02-25 22:27:16 442

原创 Spring 模拟面试总结

由于该结构对于不同线程是隔离的,在springboot 中该注解是基于Cglib 实现的,Cglib 实现Aop 是基于继承实现的,但线程代码在执行过程中创建,因此代理对象中线程的事务管理也是在代码执行过程中创建的,所以无法进行统一的事务管理。JDK的动态代理是通过接口实现的,具体指实现接口生成代理对象,通过调用代理对象的方法,然后触发反射的逻辑,用反射获取原方法,把原方法的调用抽象成proxy.invoke()方法,然后在该方法前后做增强的实现。该注解的作用是在依赖注入后初始化前标记初始化的方法。

2025-02-24 21:25:38 1868

原创 Spring 源码启动过程

重复?什么和什么重复?spring spi 自动根据依赖装配的实例和注解配置类里自己实例化的类实例 重复解决思路 在配置类实例化的过程中判断是否需要加载,需要加载就加载,不需要加载就不加载如何判断是否需要加载?判断加载是否重复->判断spring容器是否已经存在,如果已经存在了就重复如何判断spring容器中是否已经存在 通过类加载器@Cinfigrtion 里的bean通过条件注解类,用类加载器加载器判断当前类有无重复的核心类的容器,有就不加载容器,没有就加载@Condition。

2025-02-24 08:29:55 776

原创 Linux 配置主机名及映射

在学习Linux中,起初安装Linux,在安装过程中我们可以自定义主机名,但一旦安装过后,是否就不能修改主机名,需要重新安装呢,答案是否定的,我们可以输入vi /etc/hostname 进入文件修改默认的主机名,默认的主机名为localhost.localdomain 我们只需要将其改成默认的名字然后保存,当然保存后命令行前还显示之前的主机名,需要重启才能生效。一 Linux 主机名的配置。二 Linux 域名的映射。

2024-07-03 10:49:55 1201 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除