图解 JVM 内存模型


JVM内存模型:JVM 运行时数据区、程序计数器、虚拟机栈、本地方法栈、堆、Eden区、survivor区、老年代、方法区、永久代、本地内存、直接内存、元空间

使用 Java NIO 手动实现 http 服务器、部署运行


本文介绍了使用Java NIO非阻塞监听技术,结合多路复用和主从Reactor模式,手动实现了一个支持Json格式HTTP请求、响应、静态文件服务、Cookie Session的简易框架。详细讨论了设计思想、功能实现、使用示例,并分享了开发过程中的问题与解决方案。

ThreadLocal 内存泄漏原理解析

杂谈 

本文探讨了ThreadLocal的内存泄漏问题及其解决方案。通过分析ThreadLocal的内存模型,指出其使用弱引用机制可能导致内存泄漏:当ThreadLocal对象被回收后,对应的Entry键会被清除,但值对象仍被线程引用而无法回收。实验验证表明,未调用remove()方法时会出现OutOfMemoryError,而正确调用remove()可避免内存泄漏。值得注意的是,该问题并非必然发生,GC有时仍能回收部分空间。文章强调使用ThreadLocal后必须调用remove()方法的重要性。

使用有限内存对巨型数据文件排序

杂谈 

本文介绍了一个基于分治思想的大文件排序实现方案。在200MB内存限制下,采用分支、归并的办法,使用openJDK13处理1.72GB数据文件。分享了开发过程中遇到的挑战,包括数据丢失和排序错误等调试经历。

在 Windows 上手动编译 JDK


本文记录在 WIndows10 上编译 openJDK13 以及遇到问题、解决的过程

TDD 使用心得

杂谈 

本文分享了在学习《自己动手写Java虚拟机》时实践TDD(测试驱动开发)的心路历程。初期严格遵循TDD流程,测试驱动开发效果良好;随着项目规模扩大,测试代码量激增,开发效率下降,逐渐转向被动测试;到第9章时因前期累积的隐蔽错误导致严重问题,不得不通过对照参考代码才定位到多处拼写错误和逻辑缺陷。最终认识到:在规模较大的项目中,严格遵循TDD虽初期耗时,但能有效预防后期难以定位的深层错误。文章通过具体案例说明,完整的测试覆盖对保证代码质量至关重要,TDD确实能降低系统整体开发时间。

Express4 + MongoDB 服务端搭建


本文介绍了使用Node.js搭建前后端分离后端服务器的基本流程。包括环境安装,项目结构配置等。并说明了如何配置MongoDB连接,使用mongoose进行数据库操作、封装了统一的JSON响应格式等。最后提供了完整的项目代码结构。

Node.js: Electron + vue cli3 项目整合配置


本文记录了使用Electron+Vue搭建桌面程序时遇到的打包配置问题及解决方案。包括处理静态资源的办法、完整的配置代码示例和参考链接。