OOM

搜索结果

在博客中搜索相关文章

24 篇文章 2

打牌记账-技术文档

本项目针对多人打牌记账场景,提供基于Web的实时同步、多人协作、持久化存储与跨平台访问的数字化记账系统。核心目标包括实时同步、支持最多8人同屏记账、永久保存记录并可查询、界面简洁易用。技术选型采用 Spring Boot + MyBatis‑Plus + MySQL 作为后端,WebSocket 实现低延迟双向通信,前端使用原生 HTML5/CSS3/JavaScript 并通过 Thymeleaf 渲染。系统架构分为客户端层、应用服务层(Controller、Service、Mapper、WebSocket Handler)和数据存储层。关键功能实现:① 房间创建使用 8 位 UUID 码并通过唯一索引防冲突,首位加入者自动设为房主;② 采用乐观锁 SQL 控制房间人数上下限,确保并发安全;③ 用户加入流程包括房间容量检查、同名校验、用户记录创建、人数计数更新及房主设置。整体代码结构清晰,涵盖配置、DTO、实体、Mapper、Service 与工具类,满足快速迭代与可靠运行的需求。

Redis6标准配置文件

本文提供 Redis 6 标准配置文件示例,说明如何通过命令行加载配置、单位写法以及包含其它文件的用法。列出模块加载方式、网络参数(bind、protected‑mode、端口、tcp‑backlog、unix‑socket、连接超时、keepalive)及其安全警示。重点介绍 TLS/SSL 配置,包括启用 tls‑port、证书/私钥文件、客户端证书、DH 参数、CA 证书及客户端认证模式。整体展示各项可选指令的作用与最佳实践。

Elasticsearch7.x实战指南

本文系统阐述了 Elasticsearch 7.x 的核心改动与实战用法。主要包括:TransportClient 被废弃,推荐使用 High‑level REST client;索引类型统一为 _doc,默认分片数降至 1;Lucene 升至 8 版并引入 weak‑and 与 intervals 查询提升相关性与控制;集群协调机制去除 minimum_master_nodes,加入熔断器防止 OOM;默认节点名为主机名、JDK 包体积增大。随后详细演示了索引、映射、文档的增删改查操作,以及 geo_point、动态映射、dynamic_templates 等高级特性和 Query DSL 查询示例,为开发者提供从基础到进阶的完整操作指南。

SpringBoot接口加密解密工具

本文介绍了一个基于 SpringBoot、通过注解实现的接口加密解密工具。工具支持 Base64、DES、3DES、AES、RSA 等对称/非对称算法以及 MD5 加密,只需在接口上添加 @ZxfEncryptResponse 或 @ZxfDecryptRequest 并指定 AlgorithmType 即可完成响应加密或请求解密。使用步骤包括拉取代码、打包成 jar、在项目中引入依赖并在配置文件中配置相应的密钥(DES、3DES、AES、RSA 公私钥),提供了一套可直接使用的密钥示例以及示例代码。项目源码已开源于 Gitee。

深入解析CompletableFuture的设计哲学与实践

本文系统阐述了 Java 8 中 CompletableFuture 的设计哲学与实现细节。首先说明它受函数式编程和 Promise 思想驱动,提供链式、流式 API(thenApply、thenCompose 等)以实现回调与组合。随后解析内部状态机(INCOMPLETE、NORMAL、EXCEPTIONAL)和基于 Treiber 栈的依赖管理,揭示完成、异常传播的核心实现。接着通过电商订单处理案例演示并行检查、价格计算、库存扣减等业务的完整异步流水线,涵盖 thenCombine、allOf、异常处理、超时控制等实用技巧。最后列举条件执行、重试、超时降级等高级模式,展示 CompletableFuture 在高性能、可维护异步服务中的广泛应用。

面试现场【JVM篇】

本文系统梳理了 JVM 面试常见要点,包括运行时内存结构(程序计数器、虚拟机栈、本地方法栈、堆、方法区、直接内存),垃圾回收原理(引用计数、根可达、GC Roots 分类),四种引用类型,分代收集假设与记忆集,标记‑清除、复制、整理三大算法及 STW、Safe‑point、OopMap 的作用。随后简介了 Serial、ParNew、Parallel Scavenge、Parallel Old、CMS、G1 等主流收集器的特点与适用场景,并简述对象栈上分配、内存布局、类加载双亲委派等概念,为面试提供完整参考。

Java7/8 中的 HashMap 和 ConcurrentHashMap 源码解析

文章系统地解析了 Java7/8 中 HashMap 与 ConcurrentHashMap 的实现细节。HashMap 采用数组+单向链表结构,容量始终为 2ⁿ,使用 loadFactor 与 threshold 控制扩容;put 时先计算 hash、定位桶、遍历链表去重,必要时双倍扩容并重新分配节点;get 通过相同的 hash 与 index 直接查找链表。ConcurrentHashMap 在此基础上引入 Segment(分段锁)实现并发,默认 16 段,每段内部类似 HashMap 并保持线程安全,初始化时将整体容量划分给各段,put 通过高位 hash 确定段并在对应 Segment 加锁后操作。全文重点说明了数组初始化、索引计算、节点插入、扩容机制以及并发控制的实现原理。

JVM对象创建与内存分配机制

JVM在执行new指令时首先检查类是否已加载、解析、初始化,然后在堆中为对象分配内存,采用“指针碰撞”或“空闲列表”方式,并通过CAS或TLAB解决并发冲突。分配后进行零值填充,设置对象头(包含hash、年龄、锁状态、类指针等),最后执行构造函数完成属性赋值。对象大小受对象头、实例字段和8字节对齐填充影响,默认开启指针压缩(UseCompressedOops/UseCompressedClassPointers)以降低内存占用并支持最高32 GB堆。JVM通过逃逸分析和标量替换可将不逃逸对象分配到栈上,减轻GC压力。

Redis实战常见问题与解决方案

Redis在Java项目中常见的穿透、击穿、雪崩等缓存问题,可通过布隆过滤、互斥锁或逻辑过期、随机TTL等手段防御;为保证缓存与库的一致性,采用延迟双删或基于消息队列的最终一致方案;大key导致内存压力时,可拆分分片或使用合适的数据结构;通过配置allkeys‑lru、合理的maxmemory‑policy 以及 Jedis 连接池的 maxTotal、maxIdle、testOnBorrow 等参数,提升内存管理和连接稳定性。整体提供了代码示例和实践要点,帮助开发者在实际使用 Redis 时避免性能瓶颈和数据错误。

实现响应式图片查看器:轻量级lightbox解决方案

本文详述如何使用原生 HTML、CSS 与 JavaScript 构建一个轻量级、响应式的 Lightbox 组件。首先定义包含图片和放大/缩小按钮的 HTML 结构,并通过 CSS 实现全屏居中、半透明背景及圆形按钮的视觉效果。随后编写 JavaScript,实现点击任意图片弹出 Lightbox、滚轮或按钮控制缩放、拖拽移动、双指捏合手势的触摸缩放,以及点击背景或图片恢复默认状态以关闭弹窗。整个方案无需外部库,兼容桌面和移动端,提供平滑动画和良好交互体验。

一次OOM排查实录

线上博客进程日志突止,经排查发现是 Linux OOM Killer 在内存耗尽时强制 kill‑9。根因是 2 GB 机器上跑 3 个未限制堆的 Spring Boot、MySQL 8.0 等,JVM 默认占近 3 GB,MySQL 参数占用大量内存且无 Swap。通过为每个 JVM 设置 -Xms/-Xmx、调小 MySQL 缓冲池、连接数等并新增 2 GB swap,内存使用恢复正常,服务不再被 OOM 杀死。经验:小内存务必限制 JVM、精调 MySQL、配置 swap,必要时迁移数据库或升级机器。

JVM(一)

JVM由类加载器、运行时数据区、执行引擎和本地接口四部分构成。运行时数据区包括程序计数器、虚拟机栈(及本地方法栈)、堆、方法区和运行时常量池。JVM启动先装载JRE、装入JVM动态库、初始化并创建JNIEnv,随后加载并解释class或jar文件,执行引擎将字节码翻译为机器指令。程序计数器负责指令流控制,栈用于方法调用和本地方法。内存划分决定对象、类元数据及常量的存放位置,内存不足时抛出相应异常。类加载经历加载、验证、准备、解析、初始化等阶段。