IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:Garbage Collection

共 5 篇相关文章

IT 累计浏览 3,641

JAVA虚拟机简介

这篇讲的是Java虚拟机(JVM)的基础全景。文章开门见山,帮读者厘清“JVM”这个词的多层含义:它既是一套定义行为的规范,又是如HotSpot这样的具体实现,同时也是程序运行时的一个独立实例。这种分层解读,有助于跳出“JVM就是一个黑盒”的模糊认知。 接着,文章厘清了开发者日常接触的“三件套”:JVM负责执行字节码,JRE包含了JVM和核心类库,而JDK则在JRE之上增添了开发工具。理清它们的包含关系,是理解Java技术体系的第一步。 文章后半部分聚焦JVM内部,通过图解展示了其基本结构,重点剖析了类加载子系统。它详细拆解了Bootstrap、Extension、App和Custom这四层类加载器的职责与分工,特别是指出了启动类加载器由C++实现、无法被Java程序直接引用的特殊性。 对于刚接触Java底层原理的开发者而言,这篇文章像一份清晰的地图,系统性地梳理了从宏观概念到核心模块的关键知识点,为后续深入探索内存模型、垃圾回收等打下了扎实的基础。

IT 累计浏览 3,180

JVM内存分配与回收策略

这篇讲的是JVM中对象内存分配的“潜规则”,作者从最基础的规则出发,通过具体的代码示例和GC日志,带你看清内存分配的真实行为。 文章核心围绕三个关键策略展开:一是对象优先在Eden区分配,当Eden空间不足时就会触发Minor GC;二是大对象会绕过新生代,直接被“安置”在老年代,这可以通过`-XX:PretenureSizeThreshold`参数来控制;三是长期存活的对象会从新生代“晋升”到老年代,其阈值由`-XX:MaxTenuringThreshold`决定。 作者并没有停留在理论描述,而是为每个规则都准备了可运行的代码和对应的GC输出日志。比如,通过对比设置`MaxTenuringThreshold`为1和15时不同的GC结果,你能直观地看到对象年龄计数器如何影响晋升行为。这种用实验数据说话的方式,让这些抽象的内存管理机制变得非常具体和可验证。

IT 累计浏览 3,140

浅谈PHP5中垃圾回收算法(Garbage Collection)的演化

这篇讲的是PHP5垃圾回收机制如何从基础的引用计数,进化到能有效处理循环引用的成熟算法。文章清晰地勾勒了这条技术演进路径。 作者首先指出了PHP早期完全依赖“引用计数”进行内存回收的局限性——它无法解决对象之间循环引用导致的内存泄漏问题。这是PHP在长期运行中可能出现内存无限增长的关键症结。接着,文章的核心转向了PHP5.3版本引入的“循环回收算法”。这个新算法并非取代引用计数,而是作为一个巧妙的补充。它通过在特定时机遍历并检查复杂的数据结构,能够发现那些引用计数不为零但实际已无用的循环引用结构,并将其释放。 文章没有停留在理论层面,而是结合了PHP的变量容器(zval)和根缓冲区(root buffer)的实现细节,让读者能理解新算法是如何与现有机制协同工作的。这种演化体现了PHP语言在稳定性和性能优化上的务实思考。了解这段历史,能帮助开发者更深刻地理解PHP的内存管理行为,并在编写涉及复杂数据结构的代码时,对潜在的内存问题有更清醒的认识。

IT 累计浏览 4,262

深入理解PHP原理之Session Gc的一个小概率Notice

这篇讲的是在Ubuntu系统下使用apt安装的PHP时,可能遇到的一个小概率但令人困惑的PHP Notice。错误提示指向`/var/lib/php5`目录的`opendir`操作因权限被拒绝而失败。 问题的根源在于,PHP的Session垃圾回收机制会定期尝试清理过期的Session文件。当这个操作由Web服务器进程(如www-data)触发时,它可能没有足够的权限去访问由PHP自身(通常以root身份运行)创建的Session存储目录。这是一个典型的系统服务与Web服务器用户之间的权限不匹配问题。 解决方法很直接:修改该目录的权限,允许Web服务器用户读写。具体命令是`sudo chown -R www-data:www-data /var/lib/php5`。修复后,垃圾回收便能正常进行,烦人的Notice也随之消失。这个案例提醒我们,即使是自动化的系统任务,也需要细致的权限配置才能保证功能的完整与稳定。

IT 累计浏览 4,680

GC与JS内存泄露

这篇讲的是JavaScript开发者必须面对的两个核心内存话题:自动的垃圾回收机制(GC)与令人头疼的内存泄漏。 作者从内存管理的基本原理出发,对比了两者关键差异:GC是引擎(如V8)默默无闻的管家,通过标记-清除或复制算法自动回收不再使用的对象,解放开发者;而内存泄漏则是代码中的“疏忽”或“陷阱”,导致本该被回收的对象因意外引用而持续占用内存,最终拖垮应用性能。 文章没有停留在概念层面,而是深入剖析了几个常见的泄漏“案发现场”。比如,闭包可能无意间捕获了外部的大变量;未被清除的定时器或事件监听器持续引用着不再需要的DOM元素;甚至在现代框架中,全局状态管理不当也会引发组件实例无法销毁。作者强调,这些问题往往隐蔽而渐进,需要借助Chrome DevTools的内存快照进行“现场勘查”,通过对比不同操作前后的堆内存变化来定位元凶。 解决的思路也很清晰:保持引用链的简洁,在组件销毁时务必清理所有副作用(如`removeEventListener`、`clearInterval`),并善用WeakMap/WeakSet等弱引用结构。最终,理解GC的规律是为了更好地规避泄漏,写出更健壮的应用。