php转java重构搭脚手架的时候,因为是从新开始的项目,所以打算直接升jdk版本+spring boot3.0+。查了下jdk17自带的zgc是保障低延迟的,并且为了保障低延迟,需要的额外空间开销比较大,出于以下角度考虑,还是选择了G1 我们的堆往往没那么大,所以内存比较宝贵,尽可能减少额外的内存额外开销 我们对吞吐量的要求明显高于低延迟,单接口…
线上排查:新生代老年代比例错误问题 起因 线上一个应用频繁full gc,排查发现单pod总内存3g的情况下新生代只有200mb,很奇怪,于是到容器里查看jvm参数。 jamp -heap 1,打印 Heap Configuration: MinHeapFreeRatio = 40 MaxHeapFreeRatio = 70 MaxHeapSize…
锁的定义 在计算机程序中锁用于独占资源,获取到锁才可以操作对应的资源。 锁的实现 锁在计算机底层的实现,依赖于CPU提供的CAS指令(compare and swsp),对于一个内存地址,会比较原值以及尝试去修改的值,通过值是否修改成功,来表示是否强占到了这个锁。 JVM中的锁 jvm中,有2个常用的锁 synchronized synchroni…
线上排查:内存异常使用导致full gc频繁
经验总结:内存泄露的原因以及分析
线上排查:内存异常使用导致full gc频繁 问题系统 日常巡检发现,应用线上出现频繁full gc 现象 应用线上出现频繁full gc 排查过程 分析dump 拉dump文件:小插曲:dump时如果指定:live,则在dump前jvm会先进行一次full gc,并且gc log里会打印dump full gc,这种对非内存泄漏导致的线上异常内存…
内存泄露是Javaer听到最多的关于内存的事了,这篇文章就来谈谈这件事。 内存泄露与资源泄露 什么是泄露?泄露在计算机语境下,通常指的是某个资源无法被访问,也无法被释放。 内存泄露一般发生在某个对象的引用丢失,无法再访问到该引用,但是该引用却依旧引用着某个对象,导致这个对象无法回收,最终导致内存溢出OOM。 资源泄露一般发生在连接池,IO流等场景,…
TransmittableThreadLocal解决线程池变量传递以及原理解析
TransmittableThreadLocal解决线程池变量传递以及原理解析 介绍 TransmittableThreadLocal是alibaba提供的一个工具包中的类,主要作用就是解决线程池场景下的变量传递问题。继承自InheritableThreadLocal,我们知道 InheritableThreadLocal解决了主线程与子线程之间的…
改造apollo配置中心客户端支持从Spring读取配置
Java基础:ThreadLocal及其原理
Java:JMH与基准测试
Netty学习:EventLoop事件机制
主要问题 Apollo客户端的配置主要集中在2部分,这就导致割裂了配置,十分不便: ApolloApplicationContextInitializer 在spring-boot环境下,该类中,通过对配置项apollo.bootstrap.enabled的开启,来达到Apollo在spring-boot环境下的autoconfig,其中主要是in…
ThreadLocal的用处 ThreadLocal是一个多线程的辅助工具类,目的是方便开发者维护多线程中的共享变量。我们知道如果我们想要在一个线程中一直访问一个变量或者在线程上下文中保存一个变量,我们要么将该变量声明为static静态,要么就在每一步函数调用中均传入该变量。这两种方式,static方式不能解决每个线程同时分别持有的问题。每一步函数…
介绍 JMH是一套Java基准测试工具,用于对Java执行进行基准测试以及生成测试报告。平时应用于Java一些基础Api或者一些工具类这种离开网络因素的纯系统测试。 使用方式 maven引入: <dependency> <groupId>org.openjdk.jmh</groupId> <artifact…
EventLoop是什么 如果你去百度EventLoop,肯定会百度到很多关于JavaScript,NodeJS的文章,是的,这两种语言的事件机制就依赖于EventLoop,但是EventLoop到底是什么,可以先思考2个问题: 1. 一般情况下,当我们要实现令一个线程不断处理任务,都是选择使用while(true){……}这样的结构,但是往往为了…