
Java
文章平均质量分 88
若明天不见
时白发未生,轻狂尚有
展开
-
结构化并发 ForkJoinPool & StructuredTaskScope
本文主要介绍了JDK21中引入的结构化并发的编程方式,并且分别介绍了ExecutorService、适用于计算密集型的ForkJoinPool及适用于IO密集型的StructuredTaskScopeJava 通过引入结构化并发 API 简化并发编程。结构化并发将在不同线程中运行的相关任务组视为单一工作单元,从而简化错误处理和取消操作、提高可靠性。原创 2023-12-13 10:00:00 · 294 阅读 · 0 评论 -
ZGC 垃圾回收过程
ZGC(Z Garbage Collector)是Java平台上的一种垃圾收集器,它是由Oracle开发的,旨在解决大堆的低延迟垃圾收集问题。ZGC是一种并发的分代垃圾收集器,它主要针对具有大内存需求和低停顿时间要求的应用程序。原创 2023-11-26 16:35:53 · 829 阅读 · 0 评论 -
JVM 堆外内存详解
本文主要介绍JVM 堆外内存详见。Java 进程内存占用除了JVM 运行时数据区,还有直接内存(Direct Memory)区域及 JVM 程序自身也会占用内存。原创 2023-11-22 22:57:33 · 1635 阅读 · 0 评论 -
分代ZGC:Java虚拟机中的低延迟垃圾收集器新纪元
本文主要介绍JDK21中的分代ZGC详解,包括染色指针、内存屏障等核心概念及ZGC JVM参数介绍ZGC(Z Garbage Collector)是Java平台上的一种垃圾收集器,它是由Oracle开发的,旨在解决大堆的低延迟垃圾收集问题。ZGC是一种并发的分代垃圾收集器,它主要针对具有大内存需求和低停顿时间要求的应用程序。原创 2023-10-24 22:59:41 · 1898 阅读 · 2 评论 -
Java Flight Record 详解
本文主要介绍Java Flight Record的核心概念,包括事件及缓冲机制,和JFR诊断、解析及使用实例与其他性能工具相比,JFR 的性能开销非常低,几乎可以忽略不计实时和历史数据记录:使用 JFR,您可以实时记录应用程序的性能数据,例如线程活动、方法执行时间、垃圾收集等。您还可以通过配置持久化设置,将记录的数据保存为 JFR 文件,以供后续分析和排查问题。原创 2023-11-26 16:32:28 · 1626 阅读 · 0 评论 -
Apache Commons Pool2 池化技术
本文主要介绍Apache Commons Pool2池化技术的原理、核心类及池对象状态流程。Apache Commons Pool2是一个用于对象池化的Java库,它提供了一种管理和重用对象实例的机制,旨在改善应用程序的性能和资源利用率。对象池化:Apache Commons Pool2允许您创建和管理一个对象池,该对象池中保存着可重用的对象实例。通过将对象保存在池中而不是频繁地创建和销毁对象,可以减少系统开销,提高性能。原创 2023-10-01 14:15:00 · 734 阅读 · 0 评论 -
parallelStream/ForkJoinPool 详解
本文主要介绍parallelStream底层使用的ForkJoinPool,以及parallelStream的概念及使用注意点parallelStream是一种并行流, 意为处理任务时并行处理。parallelStream底层使用的是ForkJoinPool。ForkJoinPoo是一种工作窃取算法线程池,和分治法的概念一致,**可以充分利用多 CPU 的优势,把一个任务拆分成多个"小任务", 把多个"小任务"放到多个处理器核心上并行执行; 当多个"小任务"执行完成之后, 再将这些执行结果合并起来原创 2022-11-26 11:45:00 · 4002 阅读 · 0 评论 -
Spring Statement 状态机应用实例
本文主要介绍Spring Statement状态机应用实例。在业务系统中,通过应用的方式,将所有的状态、事件、动作都抽离出来,对复杂的状态迁移逻辑进行统一管理,来取代冗长的 if else 判断,能使系统中的复杂问题得以解耦,变得直观、方便操作,使系统更加易于维护和管理。有限状态机的定义及重要概念见https://blog.csdn.net/why_still_confused/article/details/127703487。原创 2022-11-20 11:00:00 · 1030 阅读 · 0 评论 -
G1 垃圾收集器详解
Garbage First(简称G1)收集器开创了收集器面向局部收集的设计思路和基于Region的内存布局形式。本文介绍了G1收集器的核心概念、GC类型及垃圾回收过程为了实现高吞吐、没有内存碎片及收集时间可控等功能,G1引入了一些新的核心概念,如堆内存分区Region,原始快照STAB(Snapshot-At-The-Beginning)、记忆集Remembered Set。G1收集器将Region作为单次回收的最小单元,每次垃圾回收时根据用户设定允许的收集停顿时间,优先处理回收价值收益最大的Region原创 2022-11-13 20:41:12 · 3777 阅读 · 0 评论 -
有限状态机及Spring Statement框架
状态机是(Finite-state machine)的简称,是现实事物运行规则抽象而成的一个数学模型。本文主要介绍状态机的重要概念及具体示例,以及在Java中的Spring-Statement组件的主要概念在业务系统中,通过应用状态机的方式,将所有的状态、事件、动作都抽离出来,对复杂的状态迁移逻辑进行统一管理,来取代冗长的 if else 判断,能使系统中的复杂问题得以解耦,变得直观、方便操作,使系统更加易于维护和管理。原创 2022-11-05 14:41:30 · 1475 阅读 · 0 评论 -
Java8+ 特性知识体系详解
本系列主要介绍Java8以上所有版本特性知识体系详解。转载 2022-09-09 11:00:00 · 416 阅读 · 0 评论 -
分布式ID生成服务
本文的ID生成服务参考自,该分布式服务可用于生成业务主键id或业务uid1. id必须是数字,且不可以重复2. id不可为自增,避免用户猜出业务数量3. id需要支持分布式服务部署4. 不同业务的id也不可能重复...原创 2022-08-30 23:48:00 · 388 阅读 · 0 评论 -
Function 函数式接口及应用
Lambda表达式允许我们將函数作为一个方法的参数传递到方法体中或者將一段代码作为数据。语言设计者们在现存的功能中如何更友好的支持Lambda表达式上做出了大量的思考。因此出现了函数式接口的概念,一个函数接口中只能声明一个单独的函数。使用注解`@FunctionalInterface`标识,并且只包含一个抽象方法的接口是函数式接口。函数式接口主要分为`Supplier`供给型函数、`Consumer`消费型函数、`Runnable`无参无返回型函数和`Function`有参有返回型函数。........原创 2022-06-12 22:17:53 · 1031 阅读 · 0 评论 -
Arthas 命令解析(jvm/thread/stack/heapdump)
Arthas 命令解析(jvm/thread/stack/heapdump)[Arthas](https://arthas.aliyun.com/doc/index.html)是Alibaba开源的Java诊断工具,`Arthas`支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的`Tab`自动补全功能,进一步方便进行问题的定位和诊断。Arthas 3.0使用OGNL表达式求值库,详见[OGNL表达式官网原创 2022-03-12 13:10:14 · 4303 阅读 · 0 评论 -
Arthas 命令解析(watch/tt/sc)
Arthas是Alibaba开源的Java诊断工具,Arthas支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的Tab自动补全功能,进一步方便进行问题的定位和诊断。本文为Arthas watch/tt/sc命令解析。Arthas 3.0使用OGNL表达式求值库,详见OGNL表达式官网原创 2022-02-22 12:45:00 · 3488 阅读 · 0 评论 -
Mysql 客户端常见异常分析
Mysql 客户端常见异常分析`jdbc timeout`包括Transaction Timeout/Statement Timeout/connectTimeout/socketTimeout四种类型,详细解释可见[Jdbc & Mysql timeout分析](https://tillend.blog.csdn.net/article/details/122567848)原创 2022-01-28 12:45:00 · 1580 阅读 · 0 评论 -
shardingsphere 分库分表及配置示例
shardingsphere 分库分表及配置示例。shardingsphere功能列表、配置参考、详细示例及参数配置原创 2021-12-03 11:14:05 · 6999 阅读 · 2 评论 -
Spring AOP 切换接口实现类
此实例为,使用Spring切面,将接口的部分方法替换为其他实例的同名同参方法每一个接口类建立对应一个RPC Client的使用,业务场景为对特定标识用户,使用新的RPC Client的部分方法。AOP 代理Spring AOP 默认将标准JDK动态代理用于 AOP 代理。这使得可以代理任何接口(或一组接口)。Spring AOP 也可以使用CGLIB代理。这对于代理类而不是接口是必需的。如果业务对象未实现接口,则默认情况下使用CGLIB。最好的做法是对接口进行编程,而不是对类进行编程。业务类通常原创 2021-02-07 20:09:59 · 2796 阅读 · 0 评论 -
Spring事件流
ApplicationContext中的事件处理是通过ApplicationEvent类和ApplicationListener接口提供的。如果将实现ApplicationListener接口的bean部署到上下文中,则每次将ApplicationEvent发布到ApplicationContext时,都会通知该bean。本质上,这是标准的观察者模式实现。从 Spring 4.2 开始,事件基础结构得到了显着改进,并提供了annotation-based model以及发布任何任意事件的功能,该对象不一翻译 2021-01-30 21:02:40 · 474 阅读 · 0 评论 -
Java 应用线上问题排查思路、工具小结
前言在线上应急过程中要记住,只有一个总体目标:「尽快恢复服务,消除影响」。不管处于应急的哪个阶段,我们首先必须想到的是恢复问题,恢复问题不一定能够定位问题,也不一定有完美的解决方案,也许是通过经验判断,也许是预设开关等,但都可能让我们达到快速恢复的目的,然后保留部分现场,再去定位问题、解决问题和复盘。一、CPU 利用率高/飙升CPU使用率是衡量系统繁忙程度的重要指标。但是「CPU使用率的安全阈值是相对的,取决于你的系统的IO密集型还是计算密集型」。一般计算密集型应用CPU使用率偏高load偏低,I转载 2020-08-23 21:29:34 · 701 阅读 · 0 评论 -
SpringBoot项目整合Retrofit最佳实践
大家都知道okhttp是一款由square公司开源的java版本http客户端工具。实际上,square公司还开源了基于okhttp进一步封装的retrofit工具,用来支持通过接口的方式发起http请求。如果你的项目中还在直接使用RestTemplate或者okhttp,或者基于它们封装的HttpUtils,那么你可以尝试使用Retrofit。retrofit-spring-boot-starter实现了Retrofit与SpringBoot框架快速整合,并且支持了部分功能增强,从而极大的简化sprin转载 2020-08-16 20:08:35 · 9558 阅读 · 1 评论 -
Guava缓存详解及使用
Guava Cache 是`Google Fuava`中的一个内存缓存模块,用于将数据缓存到JVM内存中。本文主要介绍下Guava缓存的配置详解及相关使用缓存分为本地缓存与分布式缓存。本地缓存为了保证线程安全问题,一般使用`ConcurrentMap`的方式保存在内存之中,而常见的分布式缓存则有`Redis`,`MongoDB`等。原创 2020-07-05 15:17:47 · 24778 阅读 · 1 评论 -
Spring Filter优化日志
Filter chase将处理请求的线程,更名为随机名称,即可知道该HTTP请求对应的线程的所有同步操作的日志,便于排查问题Spring FilterWebFilter,过滤所有url@Component@WebFilter(urlPatterns = "/*", filterName = "controllerFilter")public class ControllerFilter implements Filter { protected Logger logger = Logge原创 2020-06-28 21:21:29 · 303 阅读 · 0 评论 -
Java Stream API与Lambda表达式常用场景
Java Stream API与Lambda表达式常用场景Lambda表达式及方法引用Lambda表达式允许我们將函数作为一个方法的参数传递到方法体中或者將一段代码作为数据,这些概念有过函数式编程经验的会比较熟悉方法引用提供了一种非常有用的语法去直接引用类或对象的方法(或构造函数)。与Lambda表达式结合使用,方法引用使语言结构看起来简洁紧凑。为了更好地理解本节中的内容,可查看Stre...原创 2020-04-16 20:33:07 · 301 阅读 · 0 评论 -
RSS简述 及 Java构造RSS接口
RSS(简易信息聚合)是一种消息来源格式规范,用以聚合经常发布更新数据的网站,例如博客文章、新闻、音频或视频的网摘。RSS文件包含全文或是节录的文字,再加上发布者所订阅之网摘数据和授权的元数据。Java 构造RSS接口原创 2020-03-07 16:17:28 · 3462 阅读 · 0 评论 -
Java 并发编程 Future及CompletionService
Java 并发编程 Future及CompletionService`Future`用于异步结果计算。它提供了一些方法来检查计算是否完成,使用`get`方法将阻塞线程直到结果返回`CompletionService`整合了`Executor`和`BlockingQueue`的功能。将`Callable`任务提交给它去执行,使用`take()`和`poll()`获取最新完成的任务执行结果.原创 2020-01-23 12:21:36 · 381 阅读 · 0 评论 -
Java 线程池作用及类型
线程池的优势、原理及参数解析线程池解决了两个不同的问题:1. 减少线程创建的开销,能提高执行大量异步任务的效率2. 提供了一种限制和管理资源及线程的方法,并且还维护了一些基本的统计信息(如已完成的任务数)线程池的使用对`new Thread()`的优势: 1. 复用存在的线程,减少对象创建、消亡的开销,性能佳。 2. 可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。 3. 提供定时执行、定期执行、单线程、并发数控制等功能。原创 2020-01-20 20:20:43 · 240 阅读 · 0 评论 -
跨域的原理及解决方案
同源策略是Web应用程序安全性模型中的重要概念。根据该策略,Web浏览器允许第一个网页中包含的脚本访问第二个网页中的数据,但前提是两个网页具有相同的来源。来源由URI,主机名和端口号的组合定义。此策略可防止一个页面上的恶意脚本通过该页面的DOM(Document Object Model)获得对另一网页上敏感数据的访问。JSONP由于同源策略,一般来说位于server1.example.com...原创 2019-11-24 20:26:16 · 509 阅读 · 0 评论 -
Java监控工具及JVM常用参数
jdk自带有不少工具,下述为Java故障排除,分析,监视和管理的工具当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就需要对那些“自动化”的技术实施必要的监控和调节原创 2018-12-02 13:17:53 · 625 阅读 · 0 评论 -
Java开发手册笔记(一) 编程规约
命名风格16.各层命名规约e.g. 获取多个对象的方法用 list 做前缀,复数形式结尾如:listObjects常量定义5.固定范围变量值使用Enum如果变量值仅在一个固定范围内变化用 enum 类型来定义。说明:如果存在名称之外的延伸属性应使用 enum 类型,下面正例中的数字就是延伸信息,表示一年中的第几个季节。public enum SeasonEnum { SPRI...原创 2018-12-24 22:09:45 · 311 阅读 · 0 评论 -
Java开发手册笔记(二) 异常日志、单元测试、安全归约
此文为阅读阿里巴巴Java开发手册时,将个人认为重要或值得注意的规范记作学习笔记。此为第二章——异常日志。异常日志异常处理(No.9)方法的返回值可以为 null,不强制返回空集合,或者空对象等,必须添加注释充分说明什么情况下会返回 null 值。说明:本手册明确防止 NPE 是调用者的责任。即使被调用方法返回空集合或者空对象,对调用者来说,也并非高枕无忧,必须考虑到远程调用失败、序列化...原创 2019-01-06 11:26:00 · 340 阅读 · 0 评论 -
Java开发手册笔记(三) MySQL数据库
此文为阅读阿里巴巴Java开发手册时,将个人认为重要或值得注意的规范记作学习笔记。此为第五章——MySQL数据库。建表规约是与否概念的字段(No.1)表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint(1 表示是,0 表示否)。说明:任何字段如果为非负数,必须是 unsigned。注意:POJO 类中的任何布尔类型的变量,都不要加 i...原创 2019-01-06 16:17:01 · 1629 阅读 · 4 评论 -
Java开发手册笔记(四) 工程结构及设计归约
此文为阅读阿里巴巴Java开发手册时,将个人认为重要或值得注意的规范记作学习笔记。此为第六、七章——工程结构及设计归约。工程结构是与否概念的字段(No.1)设计归约是与否概念的字段(No.1)说明:防止 NPE 反例:正例:资料来源:1.阿里巴巴Java开发手册(1.4.0)...原创 2019-01-08 22:14:35 · 473 阅读 · 0 评论 -
ReentrantLock与synchronized
ReentrantLock定义:可重入锁,也叫做递归锁,指的是在同一线程内,外层函数获得锁之后,内层递归函数仍然可以获取到该锁。换一种说法:同一个线程再次进入同步代码时,可以使用自己已获取到的锁。原理:如果获取到了锁对象,就将锁计数器加1,未获取到则会阻塞当前线程。释放锁对象时将锁计数器减1,当锁计数器为0时,离开临界区。作用:防止在同一线程中多次获取锁而导致死锁发生。线程中断响应Ree...原创 2019-01-19 18:37:05 · 437 阅读 · 0 评论 -
微服务框架(八)Spring Boot AOP 日志切面实现
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。 本文为使用Spring Boot AOP 实现日志切面、分离INFO和ERROR级别日志 本系...原创 2018-08-10 19:49:15 · 6558 阅读 · 2 评论 -
Java线程并发中常见的锁
随着互联网的蓬勃发展,越来越多的互联网企业面临着用户量膨胀而带来的并发安全问题。本文着重介绍了在java并发中常见的几种锁机制。1.偏向锁 偏向锁是JDK1.6提出来的一种锁优化的机制。其核心的思想是,如果程序没有竞争,则取消之前已经取得锁的线程同步操作。也就是说,若某一锁被线程获取后,便进入偏向模式,当线程再次请求这个锁时,就无需再进行相关的同步操作了,从而节约了操作时间,转载 2016-07-06 21:06:50 · 1126 阅读 · 0 评论 -
Java 10 局部变量类型推断
在本文中,我们将深入研究Java 10中引入的局部变量类型推断的新特性。我们将讨论使用局部变量类型推断的范围和限制。 此功能是作为JEP:286(JDK增强提案)的一部分提出的。该提案通过支持对局部变量声明和初始化的类型推断以增强Java语言。 有关Java 10发行版的完整概述,请参阅Java 10新特性。Java 10:局部变量类型推断 使用Java 10,您可以...翻译 2018-09-14 22:40:51 · 2269 阅读 · 0 评论 -
Java 克隆对象
今天我们将研究java克隆对象或java中的克隆。 Java Object类附带了原生 clone()方法,该方法返回现有实例的副本。Java克隆对象 要使用java对象clone方法,我们必须实现标记java.lang.Cloneable接口,使它不会在运行时抛出CloneNotSupportedException异常。同时对象克隆是受保护的方法,因此我们必须重写它方能在其他类...翻译 2018-09-06 22:14:18 · 392 阅读 · 0 评论 -
Java Thread Dump
Java线程转储(Thread dump)是JVM中运行中的所有线程的列表。Java Thread Dump Java线程转储十分有助于分析应用程序的瓶颈和死锁情况。 在这里,我们将学习多种方法来为java程序生成线程转储。这些说明适用于类unix操作系统,但在Windows中,步骤可能略有不同。VisualVM Profiler:如果要分析应用程序的缓慢原因,则必须使用...翻译 2018-09-03 21:02:56 · 2847 阅读 · 0 评论 -
Java 基础知识(一)之基础概念
1. Java语言的优点1) Java为纯面向对象语言。万物皆对象。2) 平台无关性。Java语言可以“一次编译,到处运行。”由于Java为解释性语言,编译器会把Java代码变成“中间代码”,然后在JVM上解释这都行。因此Java可以很好的跨平台执行,具有很好的可移植性。3) Java提供了很多内置的类库,通过这些类库,简化了开发人员的程序设计工作,缩短了项目的开原创 2016-05-06 16:37:02 · 1133 阅读 · 0 评论