`
express_wind
  • 浏览: 29575 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

QLExpress脚本语言技术讲解(7)-------QlExpress的对象缓存优化

阅读更多

(注:相关代码请参考 com.ql.util.express.instruction.OperateDataCacheManager类,

QLExpress 源代码下载地址:http://code.taobao.org/p/QLExpress/src/ )

 

 

几乎所有的动态脚本语言在运行期都需要频繁的创建对象,并且强烈依赖语言的底层垃圾回收(java中称作GC ,可以参考这篇 《Java GC 》http://bruce-ko.iteye.com/blog/420262 )。

 

在多线程运行的情况下,cpu和内存的消耗很有可能被这个过程消耗殆尽。

近期,QlExpress在这方面做了较大的优化,在实际使用过程中,也确实效果明显。

 

 

本篇将具体介绍QlExpress创建对象过程的优化实现原理,也欢迎广大技术码农共同交流探讨。

 

public class OperateDataCacheManager {
	
	private static ThreadLocal<IOperateDataCache> m_OperateDataObjectCache = 
		new ThreadLocal<IOperateDataCache>(){
		protected IOperateDataCache initialValue() {
	        return new OperateDataCacheImpl(30);
	    }
	};

        //获取ThreadLocal成员变量
	public static IOperateDataCache getOperateDataCache(){
		return m_OperateDataObjectCache.get();
	}

//其他代码逻辑

}
 

ThreadLocal成员变量可以保证多线程情况下数据的独立性、安全性,并且尽量保持高并发性,工作原理可以参考

 《理解ThreadLocal 》 http://blog.csdn.net/qjyong/article/details/2158097

 

 

 


 

 

具体方案请看上图的数据结构示意图,(点击可以看大图)

 

在原来每次需要

new OperateDataField(Object aFieldObject,String aFieldName)       的时候,

每一次转而调用

OperateDataCacheManager.fetchOperateDataField(Object aFieldObject,String aFieldName),

这个时候会从缓冲区域获取到一个OperateDataField,成员变量被赋值。

而每次脚本运行完资源回收的时候,会把 OperateDataField【0..field】全部显示置为null,使所有的外部链接对象被java虚拟机马上释放。

 

注意:如果超过len长度, fetchOperateDataField 会直接调用new OperateDataField(Object aFieldObject,String aFieldName)返回,回收内存也就只能等jvm定期去gc了。

 

通常,我们的web应用服务器都会使用线程池来作为多线程并发的管理。

常驻内存的线程使用类似qlExpress的内存缓冲区管理方式, 减少频繁对象创建 可以很大程度上的带来的 CPU开销,内存被重复利用,也会稳定很多。

经过优化的方案在我们实际使用中也确实看到了效果,cpu 的load减少了近一倍。

 

 

  • 大小: 45.3 KB
分享到:
评论

相关推荐

    脚本技术script56--2006(CHM) 下载

    《脚本技术Script56--2006》是一本专注于脚本编程的电子书籍,以CHM(Compiled Help Manual)格式提供下载。这个压缩包包含了一本完整的Script56年度指南,它深入探讨了2006年时的脚本技术,特别是JavaScript和相关...

    shell脚本语言使用简介---培训指南

    简单明了的shell脚本语言讲义,让你轻松了解shell语言。

    QLExpress is a powerful, lightweight, dynamic language for.zip

    QLExpress是一种强大、轻量级且动态的编程语言,它为开发者提供了高效的代码编写和执行环境。QLExpress的设计目标是简化编程过程,提高开发效率,同时保持灵活性和可扩展性。这种语言通常适用于快速开发、脚本编写...

    Linux-定期清内存缓存-shell脚本

    ### Linux-定期清内存缓存-shell脚本 #### 背景与意义 在Linux系统中,内存资源的管理非常重要。随着系统运行时间的增长,内存中的缓存数据可能会占用大量空间,导致可用内存减少,从而影响系统的性能。为了确保...

    游戏脚本-猩红收割者-弗拉基米尔2.zip

    "游戏脚本-猩红收割者-弗拉基米尔2.zip"这个压缩包很可能包含了某个游戏——可能是电子游戏或者角色扮演游戏——中的角色“猩红收割者”(Vladimir)的相关脚本代码。弗拉基米尔这个名字通常与吸血鬼或暗黑角色相...

    Microsoft SQL Server 2008技术内幕 T-SQL 查询 索引优化章节 示例数据库脚本

    Microsoft SQL Server 2008技术内幕 T-SQL 查询 一书中,第四章,索引优化章节的示例数据库脚本。

    QLExpress.rar

    由阿里的电商业务规则、表达式(布尔组合)、特殊数学公式计算(高精度)、语法分析、脚本二次定制等强需求而设计的一门动态脚本引擎解析工具。 在阿里集团有很强的影响力,同时为了自身不断优化、发扬开源贡献精神...

    brother_ql:适用于Brother QL系列标签打印机的光栅语言协议的Python软件包(QL-500,QL-550,QL-560,QL-570,QL-700,QL-710W,QL-720NW,QL-800,QL-810W ,QL-820NWB,QL-1050,QL-1060N等)

    使用/ dev / usb / lp0设备句柄) 声称支持以下打印机(✓表示经过作者或贡献者验证的打印机): QL-500(✓),QL-550(✓),QL-560(✓),QL-570(✓),QL-580N,QL-650TD,QL-700(✓),QL-710W(✓), QL-...

    史上最详细批处理脚本(BAT)教程-精华版

    **批处理**(Batch Scripting),是一种计算机编程语言,它允许用户创建一系列预定义命令的脚本文件,以实现自动化任务的执行。在Windows操作系统中,这种脚本通常被称为**批处理脚本**,其文件扩展名为`.bat`或`....

    magic-script是一款基于JVM的脚本语言,目前主要是为magic-api项目设计

    magic-script是一款基于JVM的脚本语言,目前主要是为magic-api项目设计。magic-api,接口快速开发框架,通过Web页面配置,自动映射为HTTP接口;spider-flow,新一代爬虫平台,以图形化方式定义爬虫流程,不写代码...

    漏洞验证脚本ssl-deacth-alert&#40;cve-2016-8610&#41;

    仅供学习。勿用商业。谢谢合作。漏洞验证脚本ssl-deacth-alert&#40;cve-2016-8610&#41;

    windows7系统清理IE缓存的脚本

    ### Windows 7系统清理IE缓存的Batch脚本解析及应用 #### 一、脚本概述 在Windows 7操作系统中,Internet Explorer (IE) 浏览器是默认的浏览器之一。用户在浏览网页时,IE会将部分数据缓存在本地以加快网页加载...

    网页javascript脚本语言提取器

    7. **相关技术**: - DOM(文档对象模型):JavaScript操作HTML文档的主要接口,允许修改页面内容。 - Babel:一个转换JavaScript的工具,用于将ES6+的新特性转换为向后兼容的版本。 - Linting工具:如ESLint,...

    WINCC全局脚本-使用手册-中文版.zip

    标题"WINCC全局脚本-使用手册-中文版.zip"表明这是一个关于SIMATIC WinCC(西门子的一种人机界面软件)的资源,具体来说是关于全局脚本的使用手册,且该手册是中文版本。这意味着手册将详细解释如何在WinCC项目中...

    游戏脚本-虚空恐惧-科加斯.zip

    本文将深入探讨“游戏脚本-虚空恐惧-科加斯.zip”所涉及的游戏脚本语言及其在游戏设计中的应用。 首先,我们要理解什么是游戏脚本。游戏脚本是用于控制游戏行为、事件序列和逻辑的编程代码,通常使用专门的脚本语言...

    SQL常用优化脚本,优化SQL语句

    以下是从给定文件中提取并解析的关键SQL优化脚本,涵盖数据库缓存管理、资源状态监控、空间使用情况统计、索引优化以及数据库检查与修复等方面。 #### 1. 缓存对象查询与管理 - **查询数据库ID**:`select db_id('...

    VBS脚本编程教程--非常适合初学者

    - **定义**:VBS(Visual Basic Script Edition)是微软推出的一种轻量级脚本语言,基于Visual Basic语言的一个子集。它直接由Windows系统解释执行,无需编译成二进制文件。 - **优点**: - 高效、易学,适用于自动...

    (一)网络脚本语言基础

    通过以上知识点的梳理,我们可以了解到,Fine Packet Builder 结合 Jython 脚本语言不仅为网络协议的学习提供了实践平台,还大大降低了网络技术的入门门槛,使初学者能够在实践中加深对网络原理的理解。同时,详细的...

    magic-script是一款基于JVM的脚本语言.zip

    magic-script是一款基于JVM的脚本语言.zipmagic-script是一款基于JVM的脚本语言.zipmagic-script是一款基于JVM的脚本语言.zipmagic-script是一款基于JVM的脚本语言.zipmagic-script是一款基于JVM的脚本语言.zip

Global site tag (gtag.js) - Google Analytics