vaniglia 源码学习(三)

一.vaniglia 对象池管理

实例化一个java对象分为以下几步:类加载、链接、初始化、实例化。这也是当我们new 一个对象时JVM完成的工作,对于对象池来说它实现的基础在于分拆了new的步骤。比如vaniglia中利用初始阶段的Class.forName完成加载和链接。之后当用户从对象池中取Object时,利用newInstance实例化。核心代码如下:

1.初始化:

    public ObjectsPool(Class objectsClass) {
        this.objectsClass = objectsClass;
        this.initializeNewObjects = true;
        initialize();//完成pool = new Object[poolInitialSize];
    }

2.获取对象,支持带初始化方法和参数的接口,增加利用反射机制。

复制代码
    public final Object getObject() {
        Object retValue;
        if (poolHead > 0) {
            poolHead--;
            retValue = pool[poolHead];
            pool[poolHead] = null;
        } else {
            if (initializeNewObjects) {
                try {
                    retValue = objectsClass.newInstance();
                } catch (InstantiationException e) {
                    e.printStackTrace();  
                    return null;
                } catch (IllegalAccessException e) {
                    e.printStackTrace(); 
                    return null;
                }
            }
            else {
                return null;
            }
        }
        return retValue;
    }
复制代码

 

posted @   Fredric_2013  阅读(141)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示