`
edison0663
  • 浏览: 79473 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

共享对象与共享资源的一些心得

阅读更多

遵循老大的教导,善于总结。

 

这次分享的一个经验是:“共享对象与共享资源”。

 

大概会围绕这个主题分几点讲:

1 是共享对象,共享资源的普遍场景。

2 相关的实现技巧,方法与模式。

 

+共享对象,共享资源的普遍场景

 

打个比方,我们要解析一个文档,文档中有元素如下 Ea  Eb Ea Ef Eb Ex, 共5个元素。

那么可能我们会 写一个 class E, 然后分别创建5个对象,给予其赋相应值。

但其实5个对象中,存在重复的对象, 那么想到共享这部分资源|对象, 从而避免这部分资源重复开销。

 

以上就是共享对象,及共享资源的一个简单的场景描述。

这类场景最突出的表现在:文档解析。 包括xml解析,html解析,乱七八糟的脚本解析。

一个复杂的html页面,解析出来的结点是非常多的,如果每个结点都是独立对象,带来的开销是恐怖的,特别是在服务器端的表现更是如此,瓶颈直接体现在重复的结点==重复开销==内存拷贝。如果能最大程度的让内存拷贝逼近于0,那么理论上解析耗时是与文档长度成线性关系的(无需多余的内存拷贝工作)。

 

+相关的实现技巧,方法与模式

 

技巧1:枚举

在做html解析的时候,可以对业务需求的标签类型做枚举,类型就是一个值(可以是1个字节,具体看自己业务需求),开销是最小的了。

 

技巧2:标记

做文档解析的时候,解析出来的结点,通常还对应一段文本或字节,简称一堆东东。

那么通常会将其copy到这个结点。重复用到这个结点的,当然不会再拷贝一次,但是这样还是不够极致。

极致的做法是,不copy这堆东东,其实你只需要标记好这个结点记住对应的这堆东东的坐标就ok了。


ps, 讨论:这样的做法更倾向于对结点的读操作远大于写操作,才会体现出高效,原因很简单,这种标记的方法,如果要只支持写,就是做另劈空间,然后标识该节点被写脏了,应拿标记坐标去“另辟的空间”去拿数据。...这里做法多种多样

 

方法与模式:flyweight 和 工厂..这里就不说了,搜一下大把。

以上技巧经过实践,有显著成果,但是有其适用场景,仅供参考,哈哈 ^_^

 

分享到:
评论

相关推荐

    资源共享平台资源共享平台资源共享平台

    资源共享平台是一种重要的信息技术应用,它允许用户上传、分享和下载各种资源,如软件、文档、教程等。在本例中,我们关注的是一个名为"资源共享平台资源共享平台资源共享平台"的平台,该平台可能是由一位使用C#编程...

    精品资源共享课软件

    这个软件平台旨在提供一个高效、便捷的环境,使得教育资源能够广泛传播,促进优质教学内容的共享与交流。 ASP.NET 2.0是微软.NET框架的一个关键组成部分,为Web应用程序的开发提供了丰富的功能和支持。C#是一种现代...

    JSP网上教学资源共享系统(源代码+论文).rar

    JSP通过内置的对象如Request、Response、Session等,实现了与用户的交互,并可以利用Servlet技术进行服务器端的数据处理。 二、系统架构 该网上教学资源共享系统采用典型的三层架构:表现层(View)、业务逻辑层...

    J2SE 学习心得(一些常用知识要点)PART1

    - 线程是进程内的执行单元,多个线程可以共享同一进程的资源,同时执行。线程间的同步和互斥是通过 `synchronized` 关键字来控制,以防止数据竞争。典型的同步模式如生产者-消费者模型,使用 `wait()`、`notify()` ...

    Python实验一 面向对象程序设计实验.doc

    同时,定义了析构函数(`__del__`),用于在对象销毁时清理资源,这里清空了品牌的值。成员函数 `set_brand` 用于修改品牌,`out` 函数用于输出当前对象的品牌和型号。此外,还有一个类方法 `set_brand`,它允许通过...

    高校信息资源共享平台.zip

    【高校信息资源共享平台】是一个基于SSM框架(Spring、SpringMVC、MyBatis)的Java毕业设计项目,旨在实现高等教育机构之间的信息共享与资源利用效率的提升。该项目的实施,能够帮助各高校打破信息孤岛,促进知识的...

    线程的使用心得

    `synchronized`关键字是Java语言提供的一种基本同步机制,用于实现对共享资源的安全访问。它主要有两种用法:作为方法修饰符以及作为代码块的锁。 - **作为方法修饰符**:当一个对象的方法被`synchronized`修饰时,...

    java项目开发心得

    在Java项目开发中,开发心得主要集中在以下几个方面: 1. **知识技术储备**:开发者需要具备广泛的知识技术,包括但不限于Java基础知识、JSP、数据库管理、Servlet、EJB(Enterprise JavaBeans)、开发环境配置和...

    编程培训心得3篇.docx

    即使在没有个人电脑的情况下,通过共享资源进行编程练习,作者也学会了如何解决问题。 - **学习过程**:从基础的SQL语句和session对象开始学习,逐步掌握更复杂的概念。作者在实践中遇到困难,但坚持不懈,逐步解决...

    [心得] AS3游戏中可视对象上限及位图相关的内存消耗实测

    在本文中,我们将深入探讨AS3(ActionScript 3)游戏开发中的一些关键知识点,特别是关于可视对象的上限以及位图内存消耗的实际测试。通过博主的实验,我们可以了解到这些因素如何影响游戏性能和资源管理。 首先,...

    Orale一些心得.doc

    本文主要探讨了Oracle的一些核心要素,包括客户端连接、数据备份、SGA管理以及用户管理和数据字典查询。 首先,Oracle客户端工具SQLPLUSW中的“主机字符串”通常指的是TNSNAMES.ORA配置文件中的服务名或SID,这是...

    Java日记-我的学习心得

    - **缺点**:如果线程间没有妥善管理共享资源,可能会导致数据一致性问题。 #### 五、Java中实现线程的具体步骤 Java中实现线程可以通过继承Thread类或者实现Runnable接口来完成。 1. **继承Thread类**: - 创建...

    图书共享系统升级版2.0

    【图书共享系统升级版2.0】是一款基于ASP.NET和C#技术开发的毕业设计项目,旨在提升图书资源共享的效率和用户体验。系统的核心功能包括用户评论、书籍搜索以及借阅管理,为用户提供更加便捷和丰富的在线图书服务。 ...

    Javascript 面向对象编程小结

    总的来说,这篇博客和提供的资源深入探讨了JavaScript中的面向对象编程,涵盖了类与对象、原型与继承、作用域和`this`的关键概念,以及如何利用这些知识来创建实用的工具和应用。通过理解和实践这些内容,开发者可以...

    Java的一点心得

    - **this关键字与static修饰符**:详细解析了`this`关键字的用法,尤其是在处理方法中成员变量与参数重名情况时的作用,以及`static`修饰符在声明静态变量和方法时的特性,强调了它们在实现类内资源共享和方法调用时...

    swt心得体会

    以下是对SWT学习的一些心得体会。 首先,了解AWT和Swing的绘画机制对理解SWT至关重要。AWT组件分为重量级和轻量级两类。重量级组件在JDK1.0中引入,它们拥有独立的原生窗口,依赖于操作系统进行绘图,而轻量级组件...

    GoF23种经典模式+简单工厂模式讲解还有一篇心得

    在Java中,常用于控制资源的共享,如线程池或数据库连接池。 2. **工厂模式**:提供一个接口来创建对象,但让子类决定实例化哪个类。简单工厂模式是工厂模式的一种变体,适用于创建对象的类相对较少且固定的情况。 ...

    Oracle的初学者入门心得

    SGA:是用于存储数据库信息的内存区,该信息为数据库进程所共享。它包含Oracle例程的一些参数和统计信息。PGA:是用于存储会话信息的内存区,该信息为每个会话所独享。 四、学习资源 学习Oracle需要有丰富的资源,...

    java几种常用的设计模式源码和心得

    - 装饰模式(Decorator):动态地给一个对象添加一些额外的职责,提供比继承更灵活的扩展。 - 外观模式(Facade):为子系统提供一个统一的接口,简化客户端与其交互。 - 享元模式(Flyweight):运用共享技术...

Global site tag (gtag.js) - Google Analytics