ZGC 即 Z Garbage Collector,是一款由 Oracle 公司开发的低延迟垃圾收集器。 特点 低延迟:能将垃圾回收导致的应用程序停顿时间控制在亚毫秒级别,通常不超过 10ms,对于对响应速度要求极高的应用,如金融交易系统、实时游戏等非常关键。 可扩展性:能适应不同规模的内存和不同数量的处理器核心,无论 […]
ZGC 即 Z Garbage Collector,是一款由 Oracle 公司开发的低延迟垃圾收集器。 特点 低延迟:能将垃圾回收导致的应用程序停顿时间控制在亚毫秒级别,通常不超过 10ms,对于对响应速度要求极高的应用,如金融交易系统、实时游戏等非常关键。 可扩展性:能适应不同规模的内存和不同数量的处理器核心,无论 […]
在生产环境中,使用Executors提供的快捷方法(如newFixedThreadPool、newCachedThreadPool等)创建线程池是不推荐的,主要原因如下: 推荐做法 建议在生产环境中使用ThreadPoolExecutor类手动创建线程池,并根据业务需求进行详细配置。例如: 通过这种方式,可以更精确地控 […]
问题 之前一直用的2021版的IDEA,最新想尝尝鲜,升级到了2024版,升级之后发现代码滚动各种不流畅。 寻找&解决 一开始以为是IDEA内存没给够,直接给了8G,重启之后发现还是不行。 接着又琢磨着是不是插件太多了,毕竟新版idea功能比老版多太多了,默认插件也是多了不少,把能禁用的全都禁用之后,发现还是不 […]
问题背景 问题是,咱们常常说:发生OOM,程序就会挂。 很多情况是:发生OOM了,JVM没有挂。 回顾一下OOM与异常 来看一下 OutOfMemoryError,说到底,OutOfMemoryError 也只是一个java中的异常而已, OutOfMemoryError 属于Error一系非检查异常, 其继承关系如下 […]
什么是内存泄漏? 不再用到的内存,没有及时释放,就叫做内存泄漏。 对于持续运行的服务进程,必须及时释放内存,否则内存占用率越来越高,轻则影响系统性能,重则导致进程崩溃。 ThreadLocal是怎么造成内存泄露的呢? 如果发生了下面的情况: 如果ThreadLocal是null了,也就是要被GC回收了, 但是此时我们的 […]
背景 据Redisson官网的介绍,Redisson是一个Java Redis客户端,与Spring 提供给我们的 RedisTemplate 工具没有本质的区别,可以把它看做是一个功能更强大的客户端(虽然官网上声称Redisson不只是一个Java Redis客户端) 我想我们用到 Redisson 最多的场景一定是 […]
OHCache介绍 缓存框架OHC基于Java语言实现,并以类库的形式供其他Java程序调用,是一种以单机模式运行的堆外缓存。 OHC简介 缓存的分类与实现机制多种多样,包括单机缓存与分布式缓存等等。具体到JVM应用,又可以分为堆内缓存和堆外缓存。 OHC 全称为 off-heap-cache,即堆外缓存,是一款基于J […]
一、介绍 在前面的文章中,我们详细的介绍了 MongoDB 的配置和使用,如果你对 MongoDB 还不是很了解,也没关系,在 MongoDB 中有三个比较重要的名词:数据库、集合、文档! 数据库(Database):和关系型数据库一样,每个数据库中有自己的用户权限,不同的项目组可以使用不同的数据库 集合(Collec […]
前言 RocketMQ是阿里巴巴旗下一款开源的MQ框架,经历过双十一考验、Java编程语言实现,有非常好完整生态系统。RocketMQ作为一款纯java、分布式、队列模型的开源消息中间件,支持事务消息、顺序消息、批量消息、定时消息、消息回溯等,总之就是葛大爷的一句话 核心概念 NameServer:可以理解为是一个注册 […]
背景 前段时间,一个同事小姐姐跟我说她的项目起不来了,让我帮忙看一下,本着助人为乐的精神,这个忙肯定要去帮。 于是,我在她的控制台发现了如下的异常信息: Exception in thread "main" org.springframework.beans.factory.BeanCurrentl […]
MQ消费方式 消费方式就是指消费者如何从MQ中获取到消息,分为两种方式,push(推方式)和pull(拉方式)。 1、push(推方式) push,顾名思义,就是推的意思。就是当MQ收到生产者产生的消息的时候,会主动将消息推送到消费者进行消费,这种模式就叫push,也就是MQ将消息推给到消费者的意思。 push模式 p […]
Timer和ScheduledExecutorService是JDK内置的定时任务方案,而业内还有一个经典的定时任务的设计叫时间轮(Timing Wheel), Netty内部基于时间轮实现了一个HashedWheelTimer来优化百万量级I/O超时的检测,它是一个高性能,低消耗的数据结构,它适合用非准实时,延迟的短 […]
序列化和反序列化 序列化:把对象转换为字节序列的过程称为对象的序列化. 反序列化:把字节序列恢复为对象的过程称为对象的反序列化. 什么时候需要用到序列化和反序列化呢? 当我们只在本地 JVM 里运行下 Java 实例, 这个时候是不需要什么序列化和反序列化的, 但当我们需要将内存中的对象持久化到磁盘, 数据库中时, 当 […]
如果我们有一组类型相同的变量,例如,5位同学的成绩,可以这么写: public class Main { public static void main(String[] args) { // 5位同学的成绩: int n1 = 68; int n2 = 79; int n3 = 91; int n4 = 85; in […]
在Java中,字符和字符串是两个不同的类型。 字符类型 字符类型char是基本数据类型,它是character的缩写。一个char保存一个Unicode字符: char c1 = 'A'; char c2 = '中'; 因为Java在内存中总是使用Unicode表示字符,所以,一 […]
黄沙百战穿金甲,不破楼兰终不还。