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

标签:Memory Optimization

共 4 篇相关文章

IT 累计浏览 2,708

JavaScript內存优化

这篇讲的是JavaScript如何从语言底层进行内存优化。作者从作用域、作用域链和闭包这三个基础但关键的机制切入,解释了它们如何影响内存的分配与释放,比如未用`var`声明的变量会意外挂到全局作用域,而闭包则会延长内部变量的生命周期。 文章进一步剖析了V8引擎(Node.js和Chrome的核心)的内存回收策略,包括其分代管理思想(新生代与老生代)以及Scavenge、Mark-Sweep等主要垃圾回收算法。核心观点在于,理解“引用”是判断对象是否存活、能否被回收的根本,这直接决定了优化的方向。 最后,文章将理论落地到实践,推荐了如“善用函数作用域包裹代码”等具体优化技巧,其背后的逻辑正是利用函数作用域来及时终结不再需要的变量引用,避免内存泄漏。对于前端开发者、Node.js服务端开发者而言,理解这些原理是写出高性能、低开销代码的重要一步。

IT 累计浏览 12,362

如何使用1M的内存排序100万个8位数

这篇讲的是如何在仅有1MB内存的约束下,对100万个8位整数进行排序的经典算法难题。问题最初源于Stack Overflow,看似无解——毕竟100万个数直接存储就需要超过1MB的空间。文章介绍了一种巧妙的解法核心:不直接存储排序后的每个数字本身,而是利用它们已排序这一特性,转而记录相邻数字之间的差值。由于这些差值平均很小,理论上可以用大约7位(bit)来表示一个差值,总计约0.875MB,从而在1MB内存内完成编码存储。实现上采用了高效的归并排序,并利用算数编码或哈夫曼编码对差值进行压缩编码。作者还分享了完整的339行实战代码,并提到了其他程序员的不同解题思路,展现了算法在极端约束下化不可能为可能的魅力。

IT 累计浏览 2,698

String的序列化小结

这篇小结探讨了Java中String序列化的两个常见痛点:内存占用与处理效率。作者从日常使用的String出发,指出了容易被忽视的细节。 首先在内存方面,文章通过代码实例演示了,编译时常量拼接与运行时动态拼接、以及反序列化生成的字符串,在JVM中会创建不同的实例。对于系统中大量重复的字符串(如配置信息),反复反序列化会显著增加堆内存开销。作者随后引入了`String.intern()`方法,通过一个直观的Heap Dump对比,展示了使用字符串池进行重用后,内存占用得到大幅优化。 其次在序列化速度上,文章对比了Java默认序列化与`writeUTF`等专门针对字符串的方法。测试表明,对于较长字符串,`writeUTF`在序列化速度和生成数据大小上都具有数量级上的明显优势,这为网络传输和持久化场景提供了更高效的思路。 最后,作者结合自身CS架构中使用Swizzle缓存字节流的实际背景,提出了对高频字符串数据采用专门序列化方案的实践建议,以兼顾性能与协议通用性。文章将底层机制与实际工程问题结合,给出了具体的优化方向。

IT 累计浏览 2,568

共享 lua state 中的数据

这篇讲的是 Lua 开发中一个相当实际的问题:当多个 Lua 虚拟机(state)或同一应用内的不同部分需要共享数据时,开发者面临的困境与常见解决方案。 作者从 Lua 天然的“沙盒”隔离性出发,点明了在多模块或分层架构中,为了性能与数据一致性,共享 state 数据的必要性。文章详细梳理了几种主流的技术路径,包括通过宿主语言(如C++)的胶水层进行中转、利用 Lua 的注册表或弱引用表,以及使用类似 lua_State * 参数直接传递等。每种方案都结合了具体的应用场景,比如跨插件通信或游戏引擎的数据管理,并分析了其在性能开销、实现复杂度与安全性上的权衡。 对于追求极致性能或需要精细控制内存的开发者来说,文中的对比分析和选型建议提供了清晰的思路。最终落脚点是如何根据项目的具体约束(如是否跨语言、是否多线程),选择一个在工程上既优雅又高效的共享策略。