CORBA对象生命周期之实现和内存管理

  根据伺服对象的状态把它们进行分类后,现在基于内存管理来定义Corba对象的分类。显然,这个讨论和伺服对象的生命周期密切相关。这里侧重于分类,所以只是简单地讨论一下内存管理问题,并在下面引入一通用管理模式。

  1. 静态Corba对象

  静态对象是在系统整个生命时期中存在的Corba对象。通常,这些对象是组件入口点例如, Corba命名服务必须提供一根命名上下文,用来创建新的命名层次。这个根命名上下文可归类为静态的,因为它始终存在。从内存管理的角度来看,静态对象的实现是很简单的。通常,静态对象可通过在服务器主线中实例化伺服对象来实现,并把它直接绑定到相关的Corba对象(即早期绑定)。

  2. 瞬态Corba对象

  瞬态Corba对象并不和任何持久的状态相关联-它确实是瞬态的。通常,瞬态Corba对象绑定到有状态伺服对象,即对象的状态仅由伺服对象包含。不幸的是,这意味着瞬态Corba对象的生命周期紧密绑定到伺服对象的生命周期:瞬态Corba对象的创建必然导致伺服对象的立即激活,以实现对象。另一方面,伺服对象的销毁会立即导致相关Corba对象的删除,因为所有的状态都随着伺服对象而消失。

  瞬态对象的一个恰当例子是迭代器,它使用户能反复查看查询的结果集合。迭代器对象并不和任何持久的状态绑定,因为查询结果通常是瞬态的。为瞬态Corba对象找出好的内存管理策略会是很困难的。

  3. 持久Corba对象

  最后,持久Corba对象和其他持久状态相关联,并由数据管理系统来维护。这使用户可以为这些对象的实现应用十分灵活的内存管理策略,因为我们可以使用后期绑定来动态激活和冻结伺服对象。

  4. 伺服对象池模式

  对Corba对象实现的分类,说明了从内存管理的角度来看,不同的对象有不同的需求。伺服对象池模式为伺服对象管理定义了一个通用的框架。它的基本思想是包含一个池管理器,来管理激活伺服对象所在的池。每个伺服对象和一驱逐策略相关联。该策略描述了伺服对象何时被逐出。池管理器有两个角色:保持器和驱逐器。保持器保证对象在需要时存在。例如,瞬态对象不能重新创建,所以它必须保持到客户机对它的请求完成。驱逐器必须保证伺服对象是经常被逐出的,以避免不必要的资源消耗。

(0)

相关推荐

  • CORBA对象生命周期之实现和内存管理

    根据伺服对象的状态把它们进行分类后,现在基于内存管理来定义Corba对象的分类.显然,这个讨论和伺服对象的生命周期密切相关.这里侧重于分类,所以只是简单地讨论一下内存管理问题,并在下面引入一通用管理模式. 1. 静态Corba对象 静态对象是在系统整个生命时期中存在的Corba对象.通常,这些对象是组件入口点例如, Corba命名服务必须提供一根命名上下文,用来创建新的命名层次.这个根命名上下文可归类为静态的,因为它始终存在.从内存管理的角度来看,静态对象的实现是很简单的.通常,静态对象可通过在

  • CORBA对象生命周期

    我们知道,POA规范定义CORBA对象为具有标识.接口和实现的抽象实体.从客户机的角度来看,对象表示为对象引用,对象引用封装了对象接口类型和标识,并包含足够的信息来定位对象的实现.但从服务器的角度来看又怎样呢? 1.伺服对象 POA规范引入了伺服对象(servant)的概念,使抽象的CORBA对象能和实现该对象功能的具体编程语言实体彻底分离.这样从服务器的角度来看, CORBA对象是作为伺服对象实现的.要记住CORBA是与编程语言独立的体系结构.伺服对象可实现为C++或Java类,也可以实现为一

  • Java 详解垃圾回收与对象生命周期

    Java 垃圾回收与对象生命周期详解 Java中的垃圾回收与对象生命周期 1. 垃圾回收 垃圾回收是Java程序设计中内存管理的核心概念,JVM的内存管理机制被称为垃圾回收机制. 一个对象创建后被放置在JVM的堆内存中,当永远不再引用这个对象时,它将被JVM在堆内存中回收.被创建的对象不能再生,同时也没有办法通过程序语句释放它们.即当对象在JVM运行空间中无法通过根集合到达(找到)时,这个对象被称为垃圾对象.根集合是由类中的静态引用域与本地引用域组成的.JVM通过根集合索引对象. 在做Java应

  • 通过实例解析spring对象生命周期

    1.生命周期-@Bean指定初始化和销毁方法 配置时指定初始化及销毁方法: Bean中提供对应的初始化及销毁方法: package com.atguigu.bean; import org.springframework.stereotype.Component; @Component public class Car { public Car(){ System.out.println("car constructor..."); } public void init(){ Syst

  • 谈谈.net对象生命周期(垃圾回收)

    不用程序员操心的堆 -托管堆 程序在计算机上跑着,就难免会占用内存资源来存储在程序运行过程中的数据,我们按照内存资源的存取方式将内存划分为堆内存和栈内存. 栈内存,通常使用的场景是:对存取速度要求较高且数据量不大. 典型的栈内存使用的例子就是函数栈,每一个函数被调用时都会被分配一块内存,这块内存被称为栈内存,以先进后出的方式存取数据,在函数执行过程中不断往函数栈中压入(PUSH)数据(值类型数据:int.float.对象的引用...),函数执行完后又将函数栈中的数据逐个弹出(POP),由于是以操

  • Android中Fragment的生命周期与返回栈的管理

    既然我们已经知道了Fragment很好用,那么我们也需要知道它的工作原理.Fragment只能存在于(作为容器的)Activity中,每一个Fragment都有自己的视图结构,可以像我们之前那样载入布局.Fragment的生命周期更加复杂,因为它有更多的状态,如图: 我们来看一下Fragment完整的生命周期. 在Fragment生命周期开始,onInflate方法被调用.要注意的是,这个方法只在我们直接用标签在布局文件中定义的时候才会被调用.我们可以在这个方法中保存一些在xml布局文件中定义的

  • Hibernate持久化对象生命周期原理解析

    三态的基本概念 1, 临时状态(Transient):也叫自由态,只存在于内存中,而在数据库中没有相应数据.用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫临时对象: 2, 持久化状态(Persistent):与session关联并且在数据库中有相应数据.已经持久化,加入到了Session缓存中.如通过hibernate语句保存的对象.处于此状态的对象叫持久对象: 3, 游离状态(Detached):持久化对象脱离了Session的对象.如Session缓存被清空的

  • Python对象的生命周期源码学习

    目录 思考: 1 C API 2 对象的创建 2.1 两种创建对象的方式 2.2 由类型对象创建实例对象 3 对象的多态性 4 对象的行为 5 引用计数 思考: 当我们输入这个语句的时候,Python内部是如何去创建这个对象的? a = 1.0 对象使用完毕,销毁的时机又是怎么确定的呢? 下面,我们以一个基本类型float为例,来分析对象从创建到销毁这整个生命周期中的行为. 1 C API Python是用C写的,对外提供了API,让用户可以从C环境中与其交互,并且Python内部也大量使用了这

  • Microsoft .Net Remoting系列教程之二:Marshal、Disconnect与生命周期以及跟踪服务

    一.远程对象的激活 在Remoting中有三种激活方式,一般的实现是通过RemotingServices类的静态方法来完成.工作过程事实上是将该远程对象注册到通道中.由于Remoting没有提供与之对应的Unregister方法来注销远程对象,所以如果需要注册/注销指定对象,微软推荐使用Marshal(一般译为编组)和Disconnect配对使用.在<Net Remoting基础篇>中我已经谈到:Marshal()方法是将MarshalByRefObject类对象转化为ObjRef类对象,这个

  • 浅析AngularJS中的生命周期和延迟处理

    这里,我们再讨论一些常用的高级的控制反转容器(Inversion of Control containers):延迟加载(lazy-loading),生命周期管理(lifetime management),以及延迟的创建/处理(deferred creation/resolution).   延迟加载(Lazy-Loading) 所谓延迟加载就是当你需要用到对象时候才对其进行实例化.许多依赖注入系统都会在一开始就创建组件,作为它的可依赖项目.不过有时候,直到在应用中用到它们之前,你都不会想去实例

随机推荐