\contentsline {chapter}{List of Figures}{vi} \contentsline {chapter}{Abstract}{viii} \contentsline {chapter}{Acknowledgments}{x} \contentsline {chapter}{\numberline {1}Introduction}{1} \contentsline {section}{\numberline {1.1}Thesis Structure}{2} \contentsline {chapter}{\numberline {2}Garbage Collection}{4} \contentsline {section}{\numberline {2.1}Principle}{4} \contentsline {subsection}{\numberline {2.1.1}Motivation for Garbage Collection}{4} \contentsline {subsection}{\numberline {2.1.2}Definitions}{5} \contentsline {subsection}{\numberline {2.1.3}The Two Phase Abstraction}{6} \contentsline {subsection}{\numberline {2.1.4}Collector Completeness}{6} \contentsline {section}{\numberline {2.2}Garbage Collection Techniques}{7} \contentsline {subsection}{\numberline {2.2.1}Reference Counting}{7} \contentsline {subsubsection}{The Problem with Reference Counting}{9} \contentsline {subsection}{\numberline {2.2.2}Tracing Algorithms}{10} \contentsline {subsubsection}{The Problem with Tracing}{11} \contentsline {subsection}{\numberline {2.2.3}Copy Collection}{12} \contentsline {subsection}{\numberline {2.2.4}Smalltalk Garbage Collection}{13} \contentsline {subsubsection}{Scavenger}{14} \contentsline {subsubsection}{Incremental Garbage Collector}{14} \contentsline {subsubsection}{Compacting Garbage Collector}{15} \contentsline {subsubsection}{Global Garbage Collector}{15} \contentsline {subsection}{\numberline {2.2.5}Java Garbage Collection}{15} \contentsline {subsubsection}{The {\tt finalize} Method}{15} \contentsline {subsubsection}{Running the Collection Mechanism}{16} \contentsline {subsubsection}{Conclusion}{16} \contentsline {chapter}{\numberline {3}Distributed Systems}{17} \contentsline {section}{\numberline {3.1}Remote Procedure Calls}{17} \contentsline {section}{\numberline {3.2}The OMG's Distributed Computing Solution}{19} \contentsline {subsection}{\numberline {3.2.1}Object Management Architecture}{19} \contentsline {subsubsection}{Object Model}{19} \contentsline {subsubsection}{Reference Model}{19} \contentsline {subsection}{\numberline {3.2.2}OMG Interface Definition Language}{21} \contentsline {subsubsection}{Modules}{21} \contentsline {subsubsection}{Interfaces}{21} \contentsline {subsubsection}{Constructed Types}{22} \contentsline {subsubsection}{Template Types}{23} \contentsline {subsubsection}{Array Type}{24} \contentsline {subsection}{\numberline {3.2.3}Limitations of OMG IDL}{24} \contentsline {subsubsection}{Method overloading}{25} \contentsline {subsubsection}{Behavioural Specification}{25} \contentsline {subsubsection}{Exceptions}{27} \contentsline {subsubsection}{Quality of Service}{28} \contentsline {subsubsection}{Object Definition}{30} \contentsline {subsubsection}{Static Non-Blocking Requests}{31} \contentsline {subsection}{\numberline {3.2.4}Evaluation of OMG IDL}{32} \contentsline {subsection}{\numberline {3.2.5}Common Object Request Broker Architecture}{33} \contentsline {subsubsection}{Object Request Broker}{33} \contentsline {subsubsection}{Language Mappings}{34} \contentsline {subsubsection}{Interface Repository}{34} \contentsline {subsubsection}{Stubs And Skeletons}{34} \contentsline {subsubsection}{Dynamic Invocation Interface}{35} \contentsline {subsubsection}{Object Adapter}{35} \contentsline {section}{\numberline {3.3}Microsoft's Distributed Component Object Model}{35} \contentsline {subsection}{\numberline {3.3.1}Component Object Model}{36} \contentsline {subsection}{\numberline {3.3.2}Globally Unique Indentifiers}{36} \contentsline {subsection}{\numberline {3.3.3}Microsoft's Interface Definition Language}{36} \contentsline {section}{\numberline {3.4}Java's Remote Method Invocation}{37} \contentsline {chapter}{\numberline {4}Distributed Garbage Collection}{39} \contentsline {section}{\numberline {4.1}Reference Counting}{39} \contentsline {section}{\numberline {4.2}Reference Listing}{41} \contentsline {section}{\numberline {4.3}Distributed Tracing}{42} \contentsline {section}{\numberline {4.4}DCOM Garbage Collection}{42} \contentsline {section}{\numberline {4.5}The Soul Object Support System}{43} \contentsline {section}{\numberline {4.6}Java's Remote Method Invocation}{44} \contentsline {section}{\numberline {4.7}Garbage Collection in CORBA}{44} \contentsline {chapter}{\numberline {5}Collecting Garbage in a CORBA Environment}{46} \contentsline {section}{\numberline {5.1}The Research Problem}{46} \contentsline {section}{\numberline {5.2}Objectives}{48} \contentsline {section}{\numberline {5.3}Technical Design}{48} \contentsline {subsection}{\numberline {5.3.1}Overview}{48} \contentsline {subsection}{\numberline {5.3.2}A CORBA Garbage Collector}{48} \contentsline {subsection}{\numberline {5.3.3}Designing the Interfaces}{50} \contentsline {subsection}{\numberline {5.3.4}IDL Support For Garbage Collection}{52} \contentsline {section}{\numberline {5.4}Implementing a Collector}{54} \contentsline {subsection}{\numberline {5.4.1}Transparency To The Programmer}{54} \contentsline {subsection}{\numberline {5.4.2}A Collection Scenario}{55} \contentsline {subsubsection}{The Server}{56} \contentsline {subsubsection}{The Client}{56} \contentsline {subsubsection}{The Garbage Collector}{56} \contentsline {subsection}{\numberline {5.4.3}Testing The System}{57} \contentsline {chapter}{\numberline {6}Conclusion}{59} \contentsline {section}{\numberline {6.1}Future Work}{60} \contentsline {chapter}{Appendix\ A\ Sample Program Code}{61} \contentsline {section}{\numberline {A.1}Collector.idl}{61} \contentsline {section}{\numberline {A.2}GarbageCollectorImp.java}{63} \contentsline {section}{\numberline {A.3}AccountImp.java}{66} \contentsline {section}{\numberline {A.4}\_tie\_Account.java}{69} \contentsline {section}{\numberline {A.5}BankImp.java}{73} \contentsline {section}{\numberline {A.6}BankServer.java}{74} \contentsline {section}{\numberline {A.7}Client.java}{76}