java
文章平均质量分 82
成知节
Simple life, Deep mind;
Keep studying, Open mind;
Curiosity, Modest, Kind and Benefits others!
展开
-
注解实现(基于Spring AOP)
通过Pointcut获取MethodMatcherMethodMatcher实现matches方法在Spring AOP中,Pointcut和。用于确定某个类是否应被AOP代理影响。方法在这个接口中定义,用于判断给定的类是否应用切面。接口用于判断类中的哪些方法应该被AOP框架拦截。在这个接口中定义了和方法。如果方法返回false,那么将会被调用,用来做静态的匹配检查;如果返回true,那么在静态检查通过后,还会进行一次运行时的检查,也就是调用方法。原创 2023-07-17 23:10:02 · 290 阅读 · 0 评论 -
Java为什么成员变量赋值给局部变量 avoid getfield opcode
而让一个局部变量来承接一下,只需要第一次获取一次,之后都把这个堆上的数据,“缓存”到局部变量表里面,也就是搞到栈里面去。具体到 getfield 这个命令来说,它干的事儿就是获取指定对象的成员变量,然后把这个成员变量的值、或者引用放入操作数栈顶。这个是Doug Lea流行起来的. 这个是机器指令级别的代码优化方式. 为什么说是机器指令级别的优化呢?aload_ 的操作,比起 getfield 来说,是一个更加轻量级的操作。确实是减少了生成的字节码,理论上这就是一种极端的字节码层面的优化。原创 2023-01-16 16:01:18 · 640 阅读 · 3 评论 -
极简CAS
1. 乐观锁 2. compare and then swap else 自旋Atomic的核心操作就是CAS(compare and set,利用CMPXCHG指令实现,它是一个原子指令),该指令有三个操作数,变量的内存值V(value的缩写),变量的当前预期值E(exception的缩写),变量想要更新的值U(update的缩写),当内存值和当前预期值相同时,将变量的更新值覆盖内存值,执行伪代码如下。if(V == E){V = Ureturn true}else{...原创 2020-12-24 13:33:35 · 80 阅读 · 0 评论 -
LongAddr思想
最小化锁方案降低锁粒度分割数据进行并发操作思想和分段加锁类似它是把value进行分组,分别操作,最后汇总对于普通类型的Long和Double变量,JVM允许将64位的读操作和写操作拆成两个32位的操作AtomicLong核心数据value分离成一个数组,每个线程访问时,通过hash等算法,映射到其中一个数字进行计数。最终的计数结果则为这个数组的求和累加。其中热点数据value会被分离成多个单元的cell,每个cell独自维护内部的值,当前对象的实际值由cell累计合成。这样,热点就得到.原创 2020-12-24 13:31:10 · 604 阅读 · 1 评论 -
# MAC系统多版本jdk安装
# MAC系统多版本jdk安装## 说明jdk 在 macOS 下的安装路径为 /Library/Java/JavaVirtualMachines/;/usr/libexec/java_home 是 macOS 下提供的工具,类似一个简单的 java 版本管理工具,可使用 -h 参数查看使用帮助。1. 第一步官网下载jdk,然后安装2. 配置bash_profile,如果是zsh配置~/.zshrc3. 配置内容```export JAVA_6_HOME=`/usr/libexec/j原创 2020-12-24 09:05:17 · 105 阅读 · 1 评论 -
springboot自动重启
记一次springboot自动重启问题排查思维过程先说结论springboot有个插件dev-tool, 这个插件会自动检测classpath, 如果有代码变更会重启发布有可能引起重新启动服务, 我们的情况正好是往classpath中写入csv,zip等文件引起的.所以,尽量不要把classpath下当做临时文件的输出目录,在服务器单独开辟独立空间,统一管理.起因一个研发小哥哥使用spr...原创 2019-12-07 12:19:08 · 1712 阅读 · 1 评论 -
SimpleDateFormat并发问题解决方案
SimpleDateFormat经常被声明为static,在并发环境下公用一个实例,由于它不是线程安全的会产生两种问题:1.日期并不是预想的日期,乱七八糟的任何日期都可能出现。 2. 一定几率下抛异常。所以有人就每次调用格式化都重新new一个SimpleDateFormat实例,这种方式会存在性能问题,因为其实例化是“expensive”的。所以最优的解决方案是采用ThreadLocal方...原创 2015-10-21 13:51:29 · 2147 阅读 · 3 评论