avatar
文章
105
标签
46
分类
32
首页
归档
标签
分类
北黄的学习成长路
搜索
首页
归档
标签
分类

北黄的学习成长路

JVM通关指南(三)吃透JVM的垃圾回收机制 - GC
发表于2025-07-13|JVM|JVM
垃圾回收垃圾回收(Garbage Collection, GC)是JVM自动管理内存的机制,负责回收不再使用的对象占用的内存空间。Java开发者不需要手动释放内存,这大大减少了内存泄漏和指针错误的风险。 为什么需要垃圾回收 防止内存泄漏 避免手动内存管理的复杂性 提高开发效率 保证程序稳定性 垃圾回收的基本原理对象存活判断引用计数法(Java未采用)1234567891011121314class Object { int refCount = 0; void addReference() { refCount++; } void removeReference() { refCount--; if (refCount == 0) { // 可以被回收 } }} 可达性分析算法(Java采用)从GC Roots对象开始,向下搜索引用链,不在引用链上的对象被视为可回收。 GC Roots包...
JVM通关指南(二)JVM运行时数据区的深入解析
发表于2025-07-13|JVM|JVM
JVM运行时数据区JVM运行时数据区是Java虚拟机在执行Java程序时使用的内存区域,它被划分为几个不同的部分,每个部分有特定的用途,下面是JVM运行时数据区主要组成部分。 方法区(Method Area) 线程共享的内存区域 存储已被JVM加载的:类信息、常量、静态变量、即时编译器编译后的代码 在HotSpot JVM中也被称为”永久代”(PermGen),但在Java 8中被”元空间”(Metaspace)取代 当方法区无法满足内存分配需求时,抛出OutOfMemoryError异常 Java堆(Java Heap) 线程共享的内存区域 在JVM启动时创建 存储所有对象实例和数组 GC管理的主要区域(“GC堆”) 内存回收角度来看java堆可分为:新生代和老生代。 堆中没有内存可以完成实例分配,并且堆也无法再扩展时,将会抛出OutOfMemoryError异常 程序计数器(Program Counter Register) 线程私有的内存区域 记录当前线程所执行的字节码行号指示器 执行Java方法时记录正在执行的虚拟机字节码指令地址 执行Native方法时值为...
JVM通关指南(一)原来这就是JVM
发表于2025-07-13|JVM|JVM
Hi,JVM的通关指南系列文章可以让大家从0-1认识JVM,从字节码的隐秘舞步,到垃圾回收的时空艺术,从类加载的双亲委派玄机,到JIT编译器的性能黑科技,我们一起穿透JVM的迷雾。本文章将对JVM的内容做一个概述,后续会分别详细分析各知识模块(运行时数据区、内存结构、垃圾回收机制、垃圾收集器、参数配置、JVM可视化工具等)。 JVMJVM:Java Virtual Machine,是Java程序的核心运行环境,主要工作是解释字节码并映射到本地的CPU指令集和OS系统调用,JVM屏蔽了与操作系统平台的相关信息,使Java程序无需进行修改就可以在多种不同平台上运行,即”一次编译,到处运行“。 JDK、JRE 和 JVM的区别JVM:执行编译后的 Java 字节码(.class 文件),实现跨平台特性,一次编写,到处运行。 JRE:为运行 Java 程序提供必要环境(包含 JVM + 基础类库) JDK:提供完整的 Java 开发环境(包含 JRE + 开发工具) 包含关系:JDK ⊃ JRE ⊃ JVM 三者的类比说明JVM 像汽车的发动机(负责执行) JRE 是发动机 + 油...
40亿QQ号,给你1G内存,怎么去重?
发表于2025-07-12
给你40亿个QQ号,要求相同的QQ号码仅保留一个,内存限制为1个G,你会怎么实现? 这其实就是个经典的海量数据去重问题,而且还附带一个让人头疼的条件:内存限制只有1G! 理解题目:从QQ号和内存限制说起我们先来分析一下问题本身。 QQ号其实是一串数字,范围是4字节的无符号正整数,也就是32位,理论上最大值接近43亿。所以,如果单纯存储这40亿个QQ号,需要耗费多少内存呢? 简单计算一下: 14000000000*4 /1024/1024/1024 ≈ 15GB 总共需要15GB的内存,显然远远超过了题目给的1GB限制。这就需要我们换个思路,不能“硬塞”,要想办法巧妙地存储和处理这些QQ号。 所以问题的本质就是“在内存非常有限的情况下,高效实现重复数据的去重”。 解决方案有很多,但是主流的方案有两种: 方案1:使用Bitmap 方案2:使用布隆过滤器 两者各有千秋,但在本题中,我们使用BitMap更加合适。 解决方案:用BitMap的精妙之处化繁为简什么是BitMap?所谓位图(BitMap)其实就是一个bit数组,即每一个位置都是一个bit,其中的取值可以是0或者1。 通俗...
什么是缓存一致性问题,如何解决分布式缓存一致性问题?
发表于2024-08-14|分布式分布式缓存|缓存•Redis•分布式
什么是缓存?将数据源的数据存储到内存中,快速响应请求数据的一种手段。同时缓解了对数据库频繁读写的压力。 什么是分布式缓存?分布式缓存是一种将数据分散到不同的机器上进行存储,方便快速响应请求的一种手段。区别于以往的单机存储,将数据存储在单一的服务器上。 分布式缓存的优点是什么? 提高了单机缓存的容量限制单机缓存受限于一台机器的硬件资源,当数据缓存量庞大时,无法满足容量要求。 解决了单机缓存的单点问题单机缓存由于只有一台机器进行对外提供服务,一旦发生服务器故障或者程序问题,会导致无法争取提供服务,影响可用性。 提高了并发性能单机缓存受限于硬件资源(CPU、内存等)和网络资源(带宽)等,在高并发读写情况下会成为性能瓶颈。 什么是缓存一致性问题?一句话解释就是缓存中的数据和数据存储组件(例如数据库)之间的数据不一致问题。 如何解决缓存一致性问题?旁路缓存模式(Cache Aside) 读:先读取缓存数据,如果缓存中没有就访问数据存储,然后将获取的数据填充到缓存中,再返回。 写:先更新数据存储数据,再更新(删除)缓存。 优点:简单容易实现,适合读多写少的场景。 缺点:写操作时,先更...
1…1011
avatar
北黄
文章
105
标签
46
分类
32
最新文章
AI Agent开发记录
AI Agent开发记录2025-12-17
Agent篇(15):编排治理层 (Layer 7) —— 上帝视角:全链路追踪、成本监控与自动化评估体系
Agent篇(15):编排治理层 (Layer 7) —— 上帝视角:全链路追踪、成本监控与自动化评估体系2025-12-17
Agent篇(14):交互协同层 (Layer 5) —— 人机共舞:异步通信、主动反问与 HITL 最佳实践2025-12-16
百万架构师成长之路(24):【终极实战篇·特别篇】简历的“升维打击”:从秒杀项目看不同级别工程师的自我包装艺术2025-12-15
百万架构师成长之路(23):【终极实战篇·复盘】架构的“胜利之道”:秒杀系统全景复盘与思想沉淀2025-12-15
网站信息
本站总字数 :
442.8k
最后更新时间 :
© 2025 By 北黄
唯一真正的智慧,是知道自己一无所知!
搜索
数据加载中