![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 80
一年春又来
这个作者很懒,什么都没留下…
展开
-
Java-12a.Spring 中通过 TaskDecorator 配置默认异步线程池
在Spring框架中,TaskDecorator 是一个接口,它可以用来自定义由 ThreadPoolTaskExecutor 或其他任务执行器管理的任务的装饰行为。这通常用于在执行任务之前和之后添加某些上下文相关的行为,比如设置线程上下文或者清理资源。例如,在执行异步操作时,你可能需要将主线程的一些上下文信息(比如用户身份验证令牌或请求上下文信息)传递给执行异步操作的线程。TaskDecorator 就可以在这种场景下发挥作用。原创 2024-01-29 16:03:59 · 655 阅读 · 1 评论 -
Java-12.Spring 中通过 ThreadPoolTaskExecutor 和 AsyncConfigurerSupport 配置默认异步线程池
虽然在 SpringBoot 2.7.x 中已经有关于异步线程池的默认配置,但如果还是要自定义的需求,仍然值得学习了解一下。例如:想要在多线程池中添加 traceId;使用来代替默认的。原创 2024-01-29 16:03:20 · 503 阅读 · 0 评论 -
Jvm-08a.类加载器
如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到最顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去完成加载。对于任意一个类,都必须由加载它的类加载器和这个类本身一起共同确立其在Java虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类名称空间。[[双亲委派模型.png]]通俗的讲就是比较两个类是否"原创 2023-05-17 15:22:09 · 572 阅读 · 1 评论 -
Java8-LocalDateTime记录
Java8-LocalDateTime记录文中都使用的时区都是东8区,也就是北京时间。这是为了防止服务器设置时区错误时导致时间不对,如果您是其他时区,请自行修改。LocalDateTime获取毫秒数//获取秒数Long second = LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8"));//获取毫秒数Long milliSec...原创 2019-08-28 09:53:32 · 523 阅读 · 1 评论 -
Unsafe类的使用
Unsafe可用来直接访问系统内存资源并自主管理,在提升Java运行效率、增强Java语言底层操作能力方面起了很大的作用——可以认为,Unsafe类是Java中留下的后门,提供了一些低层次操作,如直接内存访问、线程调度等。...原创 2022-06-30 16:32:41 · 823 阅读 · 1 评论 -
JDK 11统一日志管理
可使用-Xlog选项,启用统一日志管理。Xlog选项支持的参数如下:-Xlog:使用info级别启用JVM日志-Xlog:help:打印Xlog帮助文档-Xlog:disable:关闭所有日志记录并清除日志记录框架的所有配置,包括警告和错误的默认配置-Xlog[:option]:按照命令行上出现的顺序应用多个参数。同一输出的多个参数按其给定顺序覆盖。option的格式为:其中:what:指定level和tag的组合,格式: 。除非用 指定了通配符,否则只有匹配了指定tag的日志消息才会被匹配。outpu原创 2022-06-24 14:35:44 · 1194 阅读 · 0 评论 -
JVM参数选项
title: “JVM JDK8的JVM参数”date: 2022-03-16T17:08:55+08:00draft: true本文参数基于JDK 8整理收集器参数及默认值备注Serial-XX:+UseSerialGC虚拟机在Client模式下的默认值,开启后,使用 Serial + Serial Old 的组合ParNew-XX:+UseParNewGC开启后,使用ParNew + Serial Old的组合-XX:ParallelGCThre.原创 2022-03-16 17:21:17 · 846 阅读 · 0 评论 -
JVM 垃圾收集器
title: “JVM 垃圾收集器”date: 2022-03-11T16:45:21+08:00draft: false文章目录引言术语垃圾收集器介绍Serial 收集器(新生代)ParNew收集器(新生代)Parallel Scavenge收集器(新生代)Serial Old 收集器(老年代)Parallel Old 收集器(老年代)CMS 收集器(老年代)G1 收集器G1 收集器 VS CMS收集器链接引言下面这张图是 Java 中比较主流的基于分代收集理论的垃圾收集器,以及它们能够作用.原创 2022-03-16 16:14:43 · 1078 阅读 · 0 评论 -
JVM 垃圾回收算法
title: “JVM 垃圾回收算法”date: 2022-03-01T17:19:01+08:00draft: true0 概述基础垃圾算法:标记-清除、标记-整理、复制综合垃圾回收算法:分代收集算法、增量算法1 标记-清除(Mark-Sweep)标记需要回收的对象清理掉要回收的对象缺点:垃圾回收之后会存在内存碎片2 标记-整理(Mark-Compact)标记需要回收的对象把所有的存活对象压缩的内存的一端清理掉边界外的所有空间这个算法可以避免.原创 2022-03-11 16:41:43 · 932 阅读 · 0 评论 -
JVM 垃圾回收算法
0 概述基础垃圾算法:标记-清除、标记-整理、复制综合垃圾回收算法:分代收集算法、增量算法1 标记-清除(Mark-Sweep)标记需要回收的对象清理掉要回收的对象缺点:垃圾回收之后会存在内存碎片2 标记-整理(Mark-Compact)标记需要回收的对象把所有的存活对象压缩的内存的一端清理掉边界外的所有空间这个算法可以避免标记-清除算法会产生的内存碎片3 复制(Copy)把内存分为两块,每次只使用一块把当前使用的内存中的存活对象复制到未原创 2022-03-03 22:55:59 · 207 阅读 · 0 评论 -
JVM 垃圾回收
概述什么场景下该使用什么垃圾回收策略?垃圾回收发生在哪些区域?对象在什么时候能够被回收?什么场景下该使用什么垃圾回收策略?场景一:在对内存要求苛刻的场景:想办法提高对象的回收效率,多回收掉一些对象,腾出更多内存;场景二:在CPU 使用率高的场景下:降低高并发垃圾回收的频率,让 CPU 更多地去执行你的业务而不是垃圾回收;TODO 垃圾回收策略垃圾回收发生在哪些区域?JVM 内存结构如下图所示:虚拟机栈、本地方法栈、程序计数器是线程隔离的,这 3 个区域与线程的生命原创 2022-03-01 16:55:56 · 238 阅读 · 0 评论 -
Spring Cloud Ribbon 的负载均衡
负载均衡介绍将请求或者说流量,以期望的规则分摊到多个操作单元上进行执行。通过它可以实现横向扩展(scale out),将冗余的作用发挥为高可用。另外,还可以物尽其用,提升资源使用率。概念客户端负载均衡基于客户端做负载均衡,有一个前提是需要在客户端本地维护一个服务的机器列表,同时在本地指定一个LB策略,然后输出一个服务。服务列表并不是一成不变的,机器列表需要通过注册中心动态更新机器列表。服务端负载均衡大型应用通常是客户端+服务端负载均衡搭配使用技术选型红色框表示客户端模式,灰色框原创 2021-09-28 11:28:04 · 331 阅读 · 0 评论 -
内置故障排查工具-jinfo
title: 内置故障排查工具-jinfodate: 2021-08-10 11:20:40tags:JVMJava监控工具jinfo作用jinfo全称Java Configuration Info,主要用来查看与调整JVM参数。TIPS此命令是实验性的,不受支持,对于JDK 9及更高版本,部分功能可使用 jhsdb jinfo 代替,也可用jcmd代替。部分JDK版本的jinfo命令对Windows支持比较有限,参数较少。本文为了更加接近生产环境,都是基于类Unix操作系.原创 2021-08-10 11:23:32 · 247 阅读 · 0 评论 -
编译器优化
上一篇文章文章目录1.3 编译器优化1.3.1 字节码是如何运行的?1.3.2 Hotspot 的即时编译器 C11.3.3 Htospot 的即时编译器 C21.3.4 分层编译1.3.5 分层编译- JVM参数配置示例1.3.6 如何找到热点代码?思路?1.3.7 Hotspot 内置的两类计数器1.3.8 方法调用计数器流程1.3.9 回边计数器流程1.3 编译器优化1.3.1 字节码是如何运行的?解释执行:由解释器一行一行翻译执行优势在于没有编译的等待时间性能相对差一些编译原创 2021-08-09 23:53:11 · 266 阅读 · 0 评论 -
内置监控工具 - jstat
title: 内置监控工具 - jstatdate: 2021-08-05 09:52:54tags:JVMJava监控工具内置监控工具 - jstat作用jstat全称JVM Statistics Monitoring Tool,用于监控JVM的各种运行状态。TIPS此命令是实验性的,不受支持。参考文档:Java 8:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.htmlJava 1.原创 2021-08-05 09:54:57 · 214 阅读 · 0 评论 -
线程池ThreadPoolExecutor
title: 线程池ThreadPoolExecutordate: 2021-08-04 22:01:38tags:Java线程池多线程前言线程就是一个放线程的池子。使用线程池的好处:重用已存在的线程,从而减少对象创建和销毁的开销。控制并发,从而提高资源利用率,有效避免过多的资源竞争,提升性能功能强大,有定时执行、定期执行、单线程执行、并发控制等等从某种意义上讲,线程池是特殊的对象池。这篇文章commons-pool对象池(2)—实现一个线程池就介绍了怎么用 comm.原创 2021-08-04 23:26:50 · 101 阅读 · 0 评论 -
对象池 commons-pool2
title: 对象池 commons-pool2date: 2021-08-01 13:48:21tags:Java池化技术1 前言池化技术是性能调优的重要措施,池化的思想是把对象放到池子里面,当要使用的时候从池子里面拿对象,用完之后在放回池子里面。这样可以降低资源分配和释放资源的开销,从而提升性能。在实际的项目中,我们每天都会接触到池化技术,例如:对象池:通过复用对象,减少对象创建、垃圾回收的开销线程池:通过复用线程来提升性能连接池:如数据库连接池、Redis连接池、HTT.原创 2021-08-01 16:46:55 · 2233 阅读 · 0 评论 -
分布式事务
title: 分布式事务date: 2021-07-24 16:38:011 概述CAP原理ACID原理与BASE原理基于XA协议的两阶段提交事务补偿机制基于本地消息表的最终一致方案基于MQ消息队列的最终一致方案2 CAP原理2.1 简介在分布式系统中,我们经常听到CAP原理这个词,它是什么意思呢?其实和C、A、P这3个字母有关,C、A、P分别是这3个词的首字母。下面我们就看一下这3个词分别是什么意思?C - Consistent ,一致性。具体是指,.原创 2021-08-01 13:36:40 · 121 阅读 · 0 评论 -
分布式全局ID
title: 分布式全局IDdate: 2021-07-18 17:22:17tags:分布式分布式全局ID1 前言在分库分表的过程中,因为拆分的实体表的ID有可能是重复的,正式由于这个问题才会有分布式全局ID这个方案的出现。2 概要分库分表的系统中,由于id引发的问题它是由于什么原因导致的?它会对业务系统引发什么问题?分布式ID的解决方案使用UUID作为id实现主键全局ID唯一性保证通过统一ID序列表,实现全局ID雪花算法作为全局ID多种方案的比较3.原创 2021-07-24 16:35:23 · 149 阅读 · 0 评论 -
JVM之对象的创建过程
title: JVM之对象的创建过程date: 2021-07-09 17:11:23tags: JVM1 前言Java是一门面向对象的编程语言,Java程序运行过程中无时无刻都有对象被创建出来。在语言层面上,创建对象通常(例外:复制、反序列化)仅仅是一个new关键字而已,而在虚拟机中,对象(文中讨论的对象限于普通Java对象,不包括数组和Class对象等)的创建又是怎样一个过程呢?常量池中定位类的符号引用检查符号引用所代表的类是否已被加载,解析和初始化过。如果没有,那必须先执行.原创 2021-07-10 12:14:26 · 524 阅读 · 1 评论 -
编译JDK
title: 编译JDKdate: 2021-07-06 11:06:55categories: Java虚拟机tags:jdkjvm1 macOS 编译 OpenJDK目标:编译 OpenJDK171.1 准备编译环境首先去应用商店安装 xcode.app安装 JDK16(比要编译的JDK低一个版本,如要编译的openjdk17,那就安装jdk16)brew install freetype ccache1.2 开始编译1.2.1 bash configureba.原创 2021-07-06 19:10:51 · 272 阅读 · 1 评论 -
基于Zookeeper的瞬时节点实现分布式锁
Zookeeper 的数据结构详细内容见官网实现原理线程A、B、C、D在zookeeper中的节点序号分别是1、2、3、4。节点序号最小的线程A 获得锁线程B 监听序号是1的节点(设置了一个观察器,监听节点1),线程C监听序号是2的节点,以此类推。线程A执行完任务后,序号为1的节点消失,线程B得到通知,线程B执行任务后,序号为2的节点消失,后续线程以此类推代码实现ZkLock@Slf4jpublic class ZkLock implements AutoCloseab原创 2021-05-16 11:51:55 · 226 阅读 · 0 评论 -
JVM 类加载过程(2)
文章目录1.3 类加载机制1.3.1 编译1.3.2 加载1.3.3 链接1.3.3.1 验证1.3.3.2 准备1.3.3.3 解析1.3.4 初始化1.3.5 使用1.3.6 卸载1.3.7 小节1.3 类加载机制1.3.1 编译javac JVMTest1.java结果产生了两个 class 文件,如下所示:JVMTest1.class//// Source code recreated from a .class file by IntelliJ IDEA// (powered原创 2021-02-24 22:25:19 · 534 阅读 · 0 评论 -
设计模式学习记录
记录在学习设计模式过程中的点滴工厂模式抽象工厂模式原创 2021-01-29 14:06:20 · 123 阅读 · 0 评论 -
JVM 内存结构简单分析(1)
文章目录JVM 内存结构简单分析内存结构堆虚拟机栈本地方法栈程序计数器方法区JVM 内存结构简单分析内存结构线程共享:堆,方法区线程隔离:虚拟机栈,本地方法栈,程序计数器堆堆又做了细分如下图所示:JDK8 之前堆分为新生代、老年代和持久代(也叫永久代),其中新生代中又有伊甸园和存活区,而存活区又分为 “From survivor” 和 “To survivor”。JDK8 之后,持久代被废弃,由元空间代替,而元空间并不是堆内存的一部分,元空间是本地内存。虚拟机栈虚拟机栈是线程独享原创 2021-02-23 22:17:04 · 338 阅读 · 1 评论 -
JUC原子类之AtomicReference
转载自https://www.cnblogs.com/skywang12345/p/3514623.htmlAtomicReference介绍和函数列表AtomicReference是作用是对"对象"进行原子操作。// 使用 null 初始值创建新的 AtomicReference。AtomicReference()// 使用给定的初始值创建新的 AtomicReference。AtomicReference(V initialValue)// 如果当前值 == 预期值,则以原子方式将该.转载 2021-02-03 19:50:46 · 273 阅读 · 0 评论 -
AtomicLongArray 介绍
转载自https://www.cnblogs.com/skywang12345/p/3514604.htmlAtomicLongArray函数列表// 创建给定长度的新 AtomicLongArray。AtomicLongArray(int length)// 创建与给定数组具有相同长度的新 AtomicLongArray,并从给定数组复制其所有元素。AtomicLongArray(long[] array)// 以原子方式将给定值添加到索引 i 的元素。long addAndGet(i.转载 2021-01-21 13:38:55 · 391 阅读 · 0 评论 -
AtomicLong原子类方法介绍
// 构造函数AtomicLong()// 创建值为initialValue的AtomicLong对象AtomicLong(long initialValue)// 以原子方式设置当前值为newValue。final void set(long newValue) // 获取当前值final long get() // 以原子方式将当前值减 1,并返回减1后的值。等价于“--num”final long decrementAndGet() // 以原子方式将当前值减 1,并返回减1前的值原创 2020-12-22 18:09:00 · 445 阅读 · 1 评论 -
Java 反射工具类
package com.awifi.capacity.stats.smarthome.common.util;import lombok.extern.slf4j.Slf4j;import java.lang.reflect.*;/** * 反射的 Utils 函数集合 * 提供访问私有变量, 获取泛型类型 Class, 提取集合中元素属性等 Utils 函数 * * @author fengxuechao * @date 2020/7/15 */@Slf4jpublic abs原创 2020-07-15 17:11:07 · 207 阅读 · 0 评论 -
文件上传与魔数
问题的出现今天在测试图片上传的时候,工作电脑中没有现成的图片(其实是懒得找),又不想去网上下载就把word文档改了后缀名(.jpeg)上传,没想到上传失败。心里头非常纳闷,第一反应是代码有BUG,打开项目的过程中,不对。我把文件后缀名重新改回在上传文件,可以正常上传了。定位问题由此,问题已经定位了,是我的这个不正常行为引起的。但为什么会出现这个问题,打开搜索引擎一通猛搜。原来是有一个叫做...原创 2019-11-27 10:51:40 · 630 阅读 · 0 评论