harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ge...@apache.org
Subject svn commit: r429030 [2/3] - in /incubator/harmony/standard/site/docs/subcomponents/drlvm: developers_guide.html drl.css getting_started.html index.html
Date Sat, 05 Aug 2006 18:47:09 GMT

Added: incubator/harmony/standard/site/docs/subcomponents/drlvm/developers_guide.html
URL: http://svn.apache.org/viewvc/incubator/harmony/standard/site/docs/subcomponents/drlvm/developers_guide.html?rev=429030&view=auto
==============================================================================
--- incubator/harmony/standard/site/docs/subcomponents/drlvm/developers_guide.html (added)
+++ incubator/harmony/standard/site/docs/subcomponents/drlvm/developers_guide.html Sat Aug  5 11:47:08 2006
@@ -0,0 +1,7618 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+Copyright 1999-2004 The Apache Software Foundation
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+        
+<!-- start the processing -->
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
+
+                                                    <meta name="author" value="Harmony Documentation Team">
+            <meta name="email" value="harmony-dev@incubator.apache.org">
+            
+           
+            
+            
+            
+            
+            
+            <title>Apache Harmony - Developers Guide</title>
+
+                                    <link rel="Stylesheet" type="text/css" href="drl.css" />
+                        
+        </head>
+
+        <body bgcolor="#ffffff" text="#000000" link="#525D76">        
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    <td align='LEFT'>
+                    <table><tr><td>
+                    <td align="left">
+<a href="http://incubator.apache.org/harmony/"><img  src="../../images/harmony-logo.png" alt="Apache Harmony" border="0"/></a>
+</td>
+</td>
+                    </td></tr></table>
+                    </td>
+                    <td align='RIGHT'>
+                    <a href="http://incubator.apache.org/harmony/">
+                    <img src="http://incubator.apache.org/harmony/images/apache-incubator-logo.png"
+                    	alt="Apache Harmony" border="0"/></a>                    
+                    </td>
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="true">
+
+                    <!-- special ACon Logo - leave here for next time -->
+                    <a href="http://www.asia.apachecon.com/">
+                        <img src="http://www.apache.org/ads/ApacheCon/234x60-2006-asia.gif"
+                             border="0" alt="ApacheCon Asia 2006" />
+                    </a>
+
+                   <!-- regular menu -->
+
+                    
+    <!-- ============================================================ -->
+
+                <p><strong>General</strong></p>
+        <ul>
+                    <li>    <a href="../../index.html">Home</a>
+</li>
+            
+            <table>
+                        </table>
+                    <li>    <a href="../../license.html">License</a>
+</li>
+            
+            <table>
+                        </table>
+                    <li>    <a href="../../contribution_policy.html">Contribution Policy</a>
+</li>
+            
+            <table>
+                        </table>
+                    <li>    <a href="../../guidelines.html">Project Guidelines</a>
+</li>
+            
+            <table>
+                        </table>
+                    <li>    <a href="http://www.apache.org/">ASF</a>
+</li>
+            
+            <table>
+                        </table>
+                    <li>    <a href="../../downloads.html">Downloads</a>
+</li>
+            
+            <table>
+                        </table>
+                </ul>
+            <p><strong>Community</strong></p>
+        <ul>
+                    <li>    <a href="../../get-involved.html">Get Involved</a>
+</li>
+            
+            <table>
+                        </table>
+                    <li>    <a href="../../contributors.html">Committers</a>
+</li>
+            
+            <table>
+                        </table>
+                    <li>    <a href="../../mailing.html">Mailing Lists</a>
+</li>
+            
+            <table>
+                        </table>
+                    <li>    <a href="../../documentation/documentation.html">Documentation</a>
+</li>
+            
+            <table>
+                        </table>
+                    <li>    <a href="../../faq.html">FAQ</a>
+</li>
+            
+            <table>
+                        </table>
+                    <li>    <a href="http://wiki.apache.org/harmony">Wiki</a>
+</li>
+            
+            <table>
+                        </table>
+                </ul>
+            <p><strong>Development</strong></p>
+        <ul>
+                    <li>    <a href="../../status.html">How Are We Doing?</a>
+</li>
+            
+            <table>
+                        </table>
+                    <li>    <a href="../../roadmap.html">Road Map / TODO</a>
+</li>
+            
+            <table>
+                        </table>
+                    <li>    <a href="../../svn.html">Source Code</a>
+</li>
+            
+            <table>
+                        </table>
+                    <li>    <a href="http://issues.apache.org/jira/browse/HARMONY">JIRA</a>
+</li>
+            
+            <table>
+                        </table>
+                    <li>    <a href="../../related.html">Other Projects</a>
+</li>
+            
+            <table>
+                        </table>
+                </ul>
+            <p><strong>Subcomponents</strong></p>
+        <ul>
+                    <li>    <a href="../../subcomponents/buildtest/index.html">Build-Test Framework</a>
+</li>
+            
+            <table>
+                        </table>
+                    <li>    <a href="../../subcomponents/classlibrary/index.html">Class Library</a>
+</li>
+            
+            <table>
+                          <tr><td>
+                &nbsp;&nbsp;    <a href="../../subcomponents/classlibrary/status.html">Status</a>
+              </td></tr>
+                        </table>
+                    <li>    <a href="../../subcomponents/drlvm/index.html">DRLVM</a>
+</li>
+            
+            <table>
+                        </table>
+                    <li>    <a href="../../subcomponents/jchevm/index.html">JCHEVM</a>
+</li>
+            
+            <table>
+                        </table>
+                </ul>
+                        </td>
+                    <td width="80%" align="left" valign="top">
+                                        
+                                                                <div>
+<!--
+    Copyright 2005-2006 The Apache Software Foundation or its licensors, as applicable.
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+	Portions, Copyright � 1991-2005 Unicode, Inc. The following applies to Unicode.
+
+	COPYRIGHT AND PERMISSION NOTICE
+    Copyright � 1991-2005 Unicode, Inc. All rights reserved. Distributed under the Terms of Use
+	in http://www.unicode.org/copyright.html.
+    Permission is hereby granted, free of charge, to any person obtaining a copy of the Unicode data files
+	and any associated documentation (the "Data Files") or Unicode software and any associated documentation
+	(the "Software") to deal in the Data Files or Software without restriction, including without limitation
+	the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Data Files or Software,
+	and to permit persons to whom the Data Files or Software are furnished to do so, provided that
+	(a) the above copyright notice(s) and this permission notice appear with all copies of the Data Files or Software,
+	(b) both the above copyright notice(s) and this permission notice appear in associated documentation, and
+	(c) there is clear notice in each modified Data File or in the Software as well as in the documentation associated with
+	the Data File(s) or Software that the data or software has been modified.
+    THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+	INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+	AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED
+	IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER
+	RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+	ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+    Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise
+	to promote the sale, use or other dealings in these Data Files or Software without prior written authorization
+	of the copyright holder.
+    2. Additional terms from the Database:
+    Copyright � 1995-1999 Unicode, Inc. All Rights reserved.
+    Disclaimer
+    The Unicode Character Database is provided as is by Unicode, Inc. No claims are made as to fitness for
+	any particular purpose. No warranties of any kind are expressed or implied. The recipient agrees to determine
+	applicability of information provided. If this file has been purchased on magnetic or optical media from Unicode, Inc.,
+	the sole remedy for any claim will be exchange of defective media within 90 days of receipt.
+    This disclaimer is applicable for all other data files accompanying the Unicode Character Database,
+	some of which have been compiled by the Unicode Consortium, and some of which have been supplied by other sources.
+    Limitations on Rights to Redistribute This Data
+	Recipient is granted the right to make copies in any form for internal distribution and to freely use
+	the information supplied in the creation of products supporting the UnicodeTM Standard.
+	The files in the Unicode Character Database can be redistributed to third parties or other organizations
+	(whether for profit or not) as long as this notice and the disclaimer notice are retained.
+	Information can be extracted from these files and used in documentation or programs, as long as there is
+	an accompanying notice indicating the source.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+   <head>
+      <meta http-equiv="Content-Type" content=
+      "text/html; charset=windows-1252">
+      <title>
+         Virtual Machine Developer&#39;s Guide
+      </title>
+      <link rel="Stylesheet" type="text/css" href="drl.css">
+
+   </head>
+   <body>
+    <p class="title">
+         <a name="Top"></a>Dynamic Runtime Layer Developer's Guide
+    <p class="TOCHeading"><a href="#Revision_History">Revision History</a>
+   </p>
+    <p class="TOCHeading"><a href="#Disclaimer">Disclaimer</a>
+   </p>
+    <p class="TOCHeading">
+         <a href="#About_this_document">1. About this Document</a>
+   </p>
+      <p class="TOC">
+         <a href="#Purpose">1.1 Purpose</a>
+      </p>
+      <p class="TOC">
+         <a href="#Intended_Audience">1.2 Intended Audience</a>
+      </p>
+      <p class="TOC">
+         <a href="#Using_this_document">1.3 Using This Document</a>
+      </p>
+      <p class="TOC">
+         <a href="#Conventions_and_Symbols">1.4 Conventions and Symbols</a>
+      </p>
+      <p class="TOCHeading">
+         <a href="#VM_Architecture">2. VM Architecture</a>
+      </p>
+      <p class="TOC">
+         <a href="#Overview">2.1 Overview</a>
+      </p>
+      <p class="TOC">
+         <a href="#Component_Structure">2.2 About Components</a>
+      </p>
+      <p class="TOC">
+         <a href="#major_components">2.3 Major DRL Components</a>
+      </p>
+      <p class="TOC">
+         <a href="#Data_Structures">2.4 Data Structures</a>
+      </p>
+      <p class="TOC">
+         <a href="#Initialization">2.5 Initialization</a>
+      </p>
+      <p class="TOC">
+         <a href="#Root_Set_Enumeration">2.6 Root Set Enumeration</a>
+      </p>
+      <p class="TOC">
+         <a href="#Finalization">2.7 Finalization</a>
+      </p>
+      <p class="TOCHeading">
+         <a href="#VM_Core">3. VM Core</a>
+      </p>
+      <p class="TOC">
+         <a href="#VMCore_architecture">3.1 Architecture</a>
+      </p>
+      <p class="TOC">
+         <a href="#Class_support">3.2 Class Support</a>
+      </p>
+      <p class="TOC">
+         <a href="#Native_Code_Support">3.3 Native Code Support</a>
+      </p>
+      <p class="TOC">
+         <a href="#Stack_Support">3.4 Stack Support</a>
+      </p>
+      <p class="TOC">
+         <a href="#Thread_Management">3.5 Thread Management</a>
+      </p>
+      <p class="TOC">
+         <a href="#Kernel_Classes">3.6 Kernel Classes</a>
+      </p>
+      <p class="TOC">
+         <a href="#Kernel_Class_Natives">3.7 Kernel Class Natives</a>
+      </p>
+      <p class="TOC">
+         <a href="#VM_Services">3.8 VM Services</a>
+      </p>
+      <p class="TOC">
+         <a href="#Exception_Handling">3.9 Exception Handling</a>
+      </p>
+      <p class="TOC">
+         <a href="#JVMTI_Support">3.10 JVMTI Support</a>
+      </p>
+      <p class="TOC">
+         <a href="#Verifier">3.11 Verifier</a>
+      </p>
+      <p class="TOC">
+         <a href="#Utilities">3.12 Utilities</a>
+      </p>
+      <p class="TOC">
+         <a href="#VM_exported_interfaces">3.13 Public Interfaces</a>
+      </p>
+      <p class="TOCHeading">
+         <a href="#JIT_Compiler">4. JIT Compiler</a>
+      </p>
+      <p class="TOC">
+         <a href="#JIT_architecture">4.1 Architecture</a>
+      </p>
+      <p class="TOC">
+         <a href="#Front-end">4.2 Front-end</a>
+      </p>
+      <p class="TOC">
+         <a href="#Optimizer">4.3 Optimizer</a>
+      </p>
+      <p class="TOC">
+         <a href="#Code_selector">4.4 Code Selector</a>
+      </p>
+      <p class="TOC">
+         <a href="#Back-end">4.5 IA-32 Back-end</a>
+      </p>
+      <p class="TOC">
+         <a href="#JIT_utilities">4.6 Utilities</a>
+      </p>
+      <p class="TOC">
+         <a href="#JIT_interfaces">4.7 Public Interfaces</a>
+      </p>
+      <p class="TOC">
+         <a href="#JET_introduction">4.8 Jitrino.JET</a>
+      </p>
+      <p class="TOCHeading">
+         <a href="#EM">5. Execution Manager</a>
+      </p>
+      <p class="TOC">
+         <a href="#EM_architecture">5.1 Architecture</a>
+      </p>
+      <p class="TOC">
+         <a href="#Recompilation">5.2 Recompilation Model</a>
+      </p>
+      <p class="TOC">
+         <a href="#PC">5.3 Profile Collector</a>
+      </p>
+      <p class="TOC">
+         <a href="#Profiler_thread">5.4 Profiler Thread</a>
+      </p>
+      <p class="TOC">
+         <a href="#EM_interfaces">5.5 Public Interfaces</a>
+      </p>
+      <p class="TOCHeading">
+         <a href="#GC">6. Garbage Collector</a>
+      </p>
+      <p class="TOC">
+         <a href="#GC_Architecture">6.1 Architecture</a>
+      </p>
+      <p class="TOC">
+         <a href="#GC_procedure">6.2 GC Procedure</a>
+      </p>
+      <p class="TOC">
+         <a href="#Object_Allocation">6.3 Object Allocation</a>
+      </p>
+      <p class="TOC">
+         <a href="#GC_Exported_Interfaces">6.4 Public Interfaces</a>
+      </p>
+      <p class="TOCHeading">
+         <a href="#Interpreter">7. Interpreter</a>
+      </p>
+      <p class="TOC">
+         <a href="#Characteristics_of_the_Interpreter">7.1 Characteristics</a>
+      </p>
+      <p class="TOC">
+         <a href="#Interpreter_structure">7.2 Internal Structure</a>
+      </p>
+      <p class="TOC">
+         <a href="#Interpreter_support_VM">7.3 Support Functions</a>
+      </p>
+      <p class="TOCHeading">
+         <a href="#Porting_Layer">8. Porting Layer</a>
+      </p>
+      <p class="TOC">
+         <a href="#Porting_Layer_Characteristics">8.1 Characteristics</a>
+      </p>
+      <p class="TOC">
+         <a href="#Component_Manager">8.2 Component Manager</a>
+      </p>
+      <p class="TOC">
+         <a href="#Portlib_exported">8.3 Public Interfaces</a>
+      </p>
+      <p class="TOCHeading">
+         <a href="#Class_Libraries">9. Class Libraries</a>
+      </p>
+      <p class="TOC">
+         <a href="#CL_characteristics">9.1 Characteristics</a>
+      </p>
+      <p class="TOC">
+         <a href="#CL_packaging_structure">9.2 Packaging Structure</a>
+      </p>
+      <p class="TOCHeading">
+         <a href="#Inter_component_Optimizations">10. Inter-component
+         Optimizations</a>
+      </p>
+      <p class="TOC">
+         <a href="#Fast_subtype_checking">10.1 Fast Subtype Checking</a>
+      </p>
+      <p class="TOC">
+         <a href="#Direct_call_conversion">10.2 Direct-call Conversion</a>
+      </p>
+      <p class="TOC">
+         <a href="#Fast_constant_string">10.3 Fast Constant-string
+         Instantiation</a>
+      </p>
+      <p class="TOC">
+         <a href="#Lazy_exceptions">10.4 Lazy Exceptions</a>
+      </p>
+      <p class="TOCHeading">
+         <a href="#References">11. References</a>
+      </p>
+      <h1>
+         <a name="Revision_History"></a>Revision History
+      </h1>
+      <table width="100%">
+         <tr>
+            <td class="TableHeading" width="25%">
+               Version
+            </td>
+            <td class="TableHeading" width="50%">
+               Version Information
+            </td>
+            <td class="TableHeading">
+               Date
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell" width="25%">
+               Initial version
+            </td>
+            <td class="TableCell">
+               Intel, Nadya Morozova: document created.
+            </td>
+            <td class="TableCell">
+               November 16, 2005
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell" width="25%">
+               Version 1.0
+            </td>
+            <td class="TableCell">
+               Intel, Nadya Morozova: document updated and expanded.
+            </td>
+            <td class="TableCell">
+               March 2, 2006
+            </td>
+         </tr>
+      </table>
+      <h1>
+         <a name="Disclaimer"></a>Disclaimer and Legal Information
+      </h1>
+      <p>
+         Copyright 2005-2006 The Apache Software Foundation or its licensors, as
+         applicable.
+      </p>
+      <p>
+         Licensed under the Apache License, Version 2.0 (the
+         &quot;License&quot;); you may not use this file except in compliance
+         with the License. You may obtain a copy of the License at
+
+         <a href=
+         "http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>
+      </p>
+      <p>
+         Unless required by applicable law or agreed to in writing, software
+         distributed under the License is distributed on an &quot;AS IS&quot;
+         BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+         implied. See the License for the specific language governing
+         permissions and limitations under the License.
+</p>
+      <p> Portions, Copyright &copy; 1991-2005 Unicode, Inc. The following applies to Unicode. <br>
+        <br>
+COPYRIGHT AND PERMISSION NOTICE</p>
+      <p>        Copyright &copy; 1991-2005 Unicode, Inc. All rights reserved. Distributed under the Terms of Use
+        in <a href="http://www.unicode.org/copyright.html"  target="_blank">http://www.unicode.org/copyright.html</a>.
+        Permission is hereby granted, free of charge, to any person obtaining a copy of the Unicode data files
+        and any associated documentation (the &quot;Data Files&quot;) or Unicode software and any associated documentation
+        (the &quot;Software&quot;) to deal in the Data Files or Software without restriction, including without limitation
+        the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Data Files or Software,
+        and to permit persons to whom the Data Files or Software are furnished to do so, provided that
+        (a) the above copyright notice(s) and this permission notice appear with all copies of the Data Files or Software,
+        (b) both the above copyright notice(s) and this permission notice appear in associated documentation, and
+        (c) there is clear notice in each modified Data File or in the Software as well as in the documentation associated with
+        the Data File(s) or Software that the data or software has been modified.</p>
+      <p> THE DATA FILES AND SOFTWARE ARE PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+        INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+        AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED
+        IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER
+        RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+        ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR SOFTWARE.</p>
+      <p> Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise
+        to promote the sale, use or other dealings in these Data Files or Software without prior written authorization
+        of the copyright holder.</p>
+      <p> 2. Additional terms from the Database:</p>
+      <p>Copyright &copy; 1995-1999 Unicode, Inc. All Rights reserved.</p>
+      <p>Disclaimer </p>
+      <p> The Unicode Character Database is provided as is by Unicode, Inc. No claims are made as to fitness for
+        any particular purpose. No warranties of any kind are expressed or implied. The recipient agrees to determine
+        applicability of information provided. If this file has been purchased on magnetic or optical media from Unicode, Inc.,
+        the sole remedy for any claim will be exchange of defective media within 90 days of receipt.
+        This disclaimer is applicable for all other data files accompanying the Unicode Character Database,
+        some of which have been compiled by the Unicode Consortium, and some of which have been supplied by other sources.</p>
+      <p> Limitations on Rights to Redistribute This Data</p>
+      <p> Recipient is granted the right to make copies in any form for internal distribution and to freely use
+        the information supplied in the creation of products supporting the Unicode<sup>TM</sup> Standard.
+        The files in the Unicode Character Database can be redistributed to third parties or other organizations
+        (whether for profit or not) as long as this notice and the disclaimer notice are retained.
+        Information can be extracted from these files and used in documentation or programs, as long as there is
+        an accompanying notice indicating the source. </p>
+      <h1>
+         <a name="About_this_document"></a>1. About This Document
+      </h1>
+      <h2>
+         <a name="Purpose"></a>1.1 Purpose
+      </h2>
+      <p>
+         This document introduces DRL, the dynamic run-time layer, explains
+         basic concepts and terms, and gives an overview of the product&#39;s
+         structure and interfaces for inter-component communication. Special
+         focus is given to the virtual machine, DRLVM. Use this document to
+         focus on the DRLVM implementation specifics and to understand the
+         internal peculiarities of the product.
+</p>
+      <p>The document describes version 1 of the DRL virtual machine donated in March 2006. </p>
+      <h2>
+         <a name="Intended_Audience"></a>1.2 Intended Audience
+      </h2>
+      <p>
+         The target audience for the document includes a wide community of
+         engineers interested in using DRLVM and in working further with the
+         product to contribute to its development.
+      </p>
+      <h2>
+         <a name="Using_this_document"></a>1.3 Using This Document
+      </h2>
+      <p>
+         This document consists of several major parts describing the key
+         processes and components of the DRL virtual machine, as follows:
+      </p>
+      <p>
+         <a href="#VM_Architecture">Part 2. VM Architecture</a> provides an
+         overview of the DRL component-based model and describes the major
+         inter-component processes running inside the virtual machine, such as
+         <a href="#Root_Set_Enumeration">root set enumeration</a> and <a href=
+         "#Finalization">object finalization</a>. The part also comprises a
+         section about <a href="#Data_Structures">data structures</a> used in
+         DRLVM. You can start with this part to learn about major principles of
+         VM internal operation.
+      </p>
+      <p>
+         <a href="#VM_Core">Part 3. VM Core</a> gives an in-depth description
+         of the core virtual machine and its subcomponents responsible for
+         various functions of the virtual machine, including <a href=
+         "#Stack_Walking">stack walking</a> and <a href=
+         "#Thread_Management">thread management</a>.
+      </p>
+      <p>
+         <a href="#JIT_Compiler">Part 4. JIT Compiler</a> describes compilation
+         paths and specific features of the DRL just-in-time compiler. Consult
+         this part of the guide for details on optimizations implemented in the
+         DRL JIT compiler and its code generation path.
+      </p>
+      <p>
+         <a href="#EM">Part 5. Execution Manager</a> shows the details of the
+         dynamic profile-guided optimization subsystem. In this part, you can
+         find information on method profiles and recompilation logic.
+      </p>
+      <p>
+         <a href="#GC">Part 6. Garbage Collector</a> focuses on object
+         allocation and garbage collection processes. This part contains a
+         description of the garbage collector component and of its interaction
+         with the VM core.
+      </p>
+      <p>
+         <a href="#Interpreter">Part 7. Interpreter</a> has a description of
+         the interpreter component and its debugging services.
+      </p>
+      <p>
+         <a href="#Porting_Layer">Part 8. Porting Layer</a> gives an overview
+         of platform-dependent functionality used in DRL. The part also
+         includes an overview of the <a href="#Component_Manager">component
+         manager</a>.
+      </p>
+      <p>
+         <a href="#Class_Libraries">Part 9. Class Libraries</a> gives
+         information on the layout and characteristics of the Java<a href=
+         "#*">*</a> class libraries interacting with the DRL virtual machine.
+      </p>
+      <p>
+         <a href="#Inter_component_Optimizations">Part 10. Inter-component
+         Optimizations</a> is devoted to performance-improving operations that
+         involve multiple components.
+      </p>
+      <p>
+         <a href="#References">Part 11. References</a> lists the links to
+         external materials supporting this document. These materials include
+         specifications, manual on programming, and articles on specific
+         issues. You can consult this part of the document for directions on
+         investigating a specific problem or alternative ways of implementing
+         specific features.
+      </p>
+      <p class="backtotop">
+         <a href="#Top">Back to Top</a>
+      </p>
+      <h2>
+         <a name="Conventions_and_Symbols"></a>1.4 Conventions and Symbols
+      </h2>
+      <p>
+         This document uses the <a href="conventions.htm">unified
+         conventions</a> for the DRL documentation kit.
+      </p>
+      <p>
+         The table below provides the definitions of all acronyms used in the
+         document.
+      </p>
+      <table class="normalTable" border="0" cellpadding="0" width="100%">
+         <tr>
+            <td class="TableHeading">
+               Acronym
+            </td>
+            <td class="TableHeading">
+               Definition
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               API
+            </td>
+            <td class="TableCell">
+               Application Program Interface
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               APR
+            </td>
+            <td class="TableCell">
+               Apache Portable Runtime Layer
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               CFG
+            </td>
+            <td class="TableCell">
+               Control Flow Graph
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               CG
+            </td>
+            <td class="TableCell">
+               Code Generator
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               CLI
+            </td>
+            <td class="TableCell">
+               Common Language Interface
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               DFG
+            </td>
+            <td class="TableCell">
+               Data Flow Graph
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell" height="40">
+               DPGO
+            </td>
+            <td class="TableCell" height="40">
+               Dynamic Profile-guided Optimizations
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               DRL
+            </td>
+            <td class="TableCell">
+               Dynamic Run-time Layer
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               DRLVM
+            </td>
+            <td class="TableCell">
+               Dynamic Run-time Layer Virtual Machine
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               EE
+            </td>
+            <td class="TableCell">
+               Execution Engine
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               EM
+            </td>
+            <td class="TableCell">
+               Execution Manager
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               FP
+            </td>
+            <td class="TableCell">
+               Floating Point
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               GC
+            </td>
+            <td class="TableCell">
+               Garbage Collector
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               HIR
+            </td>
+            <td class="TableCell">
+               High-level Intermediate Representation
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               IR
+            </td>
+            <td class="TableCell">
+               Intermediate Representation
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               J2SE<a href="#*">*</a>
+            </td>
+            <td class="TableCell">
+               Java<a href="#*">*</a> 2 Standard Edition
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               JCL
+            </td>
+            <td class="TableCell">
+               Java<a href="#*">*</a> Class Libraries
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               JIT
+            </td>
+            <td class="TableCell">
+               Just-in-time Compiler
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               JNI
+            </td>
+            <td class="TableCell">
+               Java<a href="#*">*</a> Native Interface
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               JVM
+            </td>
+            <td class="TableCell">
+               Java<a href="#*">*</a> Virtual Machine
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               JVMTI
+            </td>
+            <td class="TableCell">
+               JVM Tool Interface
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               LIR
+            </td>
+            <td class="TableCell">
+               Low-level Intermediate Representation
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               LMF
+            </td>
+            <td class="TableCell">
+               Last Managed Frame
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               LOB
+            </td>
+            <td class="TableCell">
+               Large Object Block
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               LOS
+            </td>
+            <td class="TableCell">
+               Large Object Space
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               OS
+            </td>
+            <td class="TableCell">
+               Operating System
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               PC
+            </td>
+            <td class="TableCell">
+               Profile Collector
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               SIMD
+            </td>
+            <td class="TableCell">
+               Single Instruction Multiple Data
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               SOB
+            </td>
+            <td class="TableCell">
+               Single Object Block
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               SSA
+            </td>
+            <td class="TableCell">
+               Single Static Assignment
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               SSE, SSE2
+            </td>
+            <td class="TableCell">
+               Streaming SIMD Extensions (2)
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               STL
+            </td>
+            <td class="TableCell">
+               Standard Template Library
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               TBS
+            </td>
+            <td class="TableCell">
+               Time-based Sampling
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               TLS
+            </td>
+            <td class="TableCell">
+               Thread Local Storage
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               TM
+            </td>
+            <td class="TableCell">
+               Thread Manager
+            </td>
+         </tr>
+         <tr>
+            <td class="TableCell">
+               VM
+            </td>
+            <td class="TableCell">
+               Virtual Machine, same as JVM in current document
+            </td>
+         </tr>
+      </table>
+      <p class="backtotop">
+         <a href="#Top">Back to Top</a>
+      </p>
+      <h1>
+         <a name="VM_Architecture"></a>2. VM Architecture
+      </h1>
+      <h2>
+         <a name="Overview"></a>2.1 Overview
+      </h2>
+      <p>
+         The Dynamic Runtime Layer (DRL) is a clean-room implementation of the
+         Java<a href="#*">*</a> 2 Platform, Standard Edition (J2SE<a href=
+         "#*">*</a>) 1.5.0. This Java<a href="#*">*</a> run-time environment
+         consists of the virtual machine (DRLVM), and a set of Java<a href=
+         "#*">*</a> class libraries (JCL). The product is released in open
+         source. The virtual machine is written in C++ code and a small amount
+         of assembly code. This document focuses on the virtual machine, and
+         gives a short overview of the class libraries supporting it.
+      </p>
+      <p>
+         Key features of DRL include the following:
+      </p>
+      <ul>
+         <li>
+            <i>Modularity</i>: Functionality is grouped into a limited number
+            of coarse-grained modules with well defined interfaces.
+
+         <li>
+            <i>Pluggability</i>: Module implementations can be replaced at
+            compile time or run time. Multiple implementations of a given
+            module are possible.
+
+         <li>
+            <i>Consistency</i>: Interfaces are consistent across platforms.
+
+         <li>
+            <i>Performance</i>: Interfaces fully enable implementation of
+            modules optimized for specific target platforms.
+
+      </ul>
+      <h2>
+         <a name="Component_Structure"></a>2.2 About Components
+      </h2>
+      <p>
+         The DRL virtual machine reconciles high performance with the extensive
+         use of well-defined interfaces between its components.
+      </p>
+      <h3><a name="CompInterfInst"></a>
+         2.2.1 Components, Interfaces, and Instances
+      </h3>
+      <p>
+         A <em>component</em> corresponds to one static or dynamic library, and
+         several libraries linked statically or dynamically at run time make up
+         the managed run-time environment. For details on components linking,
+         see section <a href="#linking_models">2.2.2 Linking Models</a>.
+      </p>
+      <p>
+         DRLVM components communicate via functional interfaces. An
+         <em>interface</em> is a pointer to a table of function pointers to
+         pure C methods. Interfaces have string names, which unambiguously
+         identify their function table layout. Each component exposes the
+         <em>default interface</em> to communicate with the <a href=
+         "#Component_Manager">component manager</a>, and one or more interfaces
+         for communication with other components.
+      </p>
+      <p class="note">
+         Note
+      </p>
+      <p class="notetext">
+         In the current version, only the <a href="#EM">execution manager</a> uses the component
+         manager. Other components will migrate to this new model in further
+         releases.
+      </p>
+      <p>
+         DRL can also operate with co-existing component instances, as requires
+         the Invocation API [<a href="#Invoc_api_ref">7</a>]. An
+         <em>instance</em> of a component contains a pointer to its default
+         interface and
+         component-specific data. The <a href="#Porting_Layer">porting layer</a>
+         always has exactly one instance. This allows a compiler to in-line
+         calls to the porting layer functions. Other components have the same
+         number of instances as the VM core does.
+      </p>
+      <p class="class">
+         Background
+      </p>
+      <p class="notetext">
+         In Java<a href="#*">*</a> programming, components, interfaces, and
+         instances can be described in terms of classes, interfaces and
+         objects. A VM component encapsulates common features, attributes, and
+         properties of virtual machines, and maps to a Java<a href="#*">*</a>
+         class. VM interfaces are tables of methods implemented and exposed by
+         the class. If several virtual machines exist in the same address
+         space, they all expose the same interfaces. These VM instances are
+         instances of the VM class, or objects.<br>
+          The <a href="#Component_Manager">component manager</a> enables
+         explicit creation of component instances by exposing the
+         <code>CreateNewInstance()</code> function, which corresponds to the
+         Java<a href="#*">*</a> operator <code>new()</code>. Components with
+         only one instance correspond to static class methods in Java<a href=
+         "#*">*</a>. All components are initialized at load time.
+      </p>
+      <p>
+         Subsequent sections define each component and provide information on
+         public interfaces, dependencies and other component specifics.
+      </p>
+      <h3>
+         <a name="linking_models"></a>2.2.2 Linking Models
+      </h3>
+      <p>
+         Libraries corresponding to different DRL components are linked by one
+         of the following models:
+      </p>
+      <ul>
+         <li>
+            Unconditionally required components, such as the porting layer, are
+            plugged at the source level and linked statically to the main
+            executable. The same applies to the code that loads other
+            components, see section <a href="#Component_Manager">8.2 Component
+            Manager</a>.
+
+         <li>
+            Components required by the VM configuration, such as a specific
+            garbage collector or a JIT compiler, are loaded at run time based
+            on the configuration settings. For example, the virtual machine on
+            a multiprocessor system can load a more complex garbage collector
+            that takes advantage of parallel processing.
+
+         <li>
+            Third-party components shipped as dynamic libraries, such as the
+            <a href="#Memory_Management">memory manager</a>, are also loaded at run time.
+
+      </ul>
+      <p class="backtotop">
+         <a href="#Top">Back to Top</a>
+      </p>
+      <h2>
+         <a name="major_components"></a>2.3 Major DRL Components
+      </h2>
+      <p>
+         Figure 1 below displays the major DRL components and their interfaces.
+      </p>
+      <p align="center">
+         <img src="images/DRL_structure.gif" alt="Major DRL Components" border=
+         "0">
+      </p>
+      <p class="special">
+         <a name="FigureDRLComponents"></a>Figure 1. Major DRL Components
+      </p>
+      <p>
+         Figure 1 demonstrates the DRL Java<a href="#*">*</a> virtual machine
+         major components, and the class libraries that support the machine.
+         These components are responsible for the following functions:
+      </p>
+      <ul>
+         <li>
+            <a href="#Class_Libraries">Class libraries</a> include a set of
+            classes and interfaces that constitute the application programming
+            interface (API) for the Java<a href="#*">*</a> run-time
+            environment. The Java<a href="#*">*</a> class libraries (JCL)
+            complement the virtual machine to make up the Dynamic Runtime
+            Layer.
+            <p>
+               The other components listed below make part of the DRL virtual
+               machine.
+            </p>
+
+         <li>
+            <a href="#VM_Core">VM core</a> with its subcomponents concentrates
+            most JVM control functions.
+
+         <li>
+            <i>Execution engine</i> is the generic term for components that
+            execute bytecode or prepare it for execution. DRLVM
+            currently features the following execution engines:
+            <ul>
+               <li>
+                  The <a href="#JIT_Compiler">Jitrino.opt</a> optimizing JIT
+                  compiler, which compiles code keeping reasonable balance
+                  between compilation time and quality of the generated code.
+
+               <li>
+                  The <a href="#JET_introduction">Jitrino.JET</a> just-in-time
+                  compiler aimed to fast bytecode compilation with almost no
+                  optimizations. Jitrino.JET uses the same interfaces and is
+                  packaged in the same dynamic library as the optimizing
+                  compiler.
+
+               <li>
+                  The <a href="#Interpreter">Interpreter</a> for easier
+                  debugging.
+
+            </ul>
+
+        <li>
+            <a href="#EM">Execution manager</a> selects the execution engine
+            for compiling a method, handles profiles and the dynamic
+            recompilation logic.
+
+        <li>
+            <a href="#GC">Garbage collector</a> allocates Java<a href=
+            "#*">*</a> objects in the heap memory and reclaims unreachable
+            objects by using the <a href="#GC_procedure">mark sweep and compaction</a> algorithm.
+
+        <li>
+            <a href="#Porting_Layer">Porting layer</a> hides platform-specific
+            details from other VM components behind a single interface. In the
+            current implementation, the porting layer is based on the Apache
+            Portable Runtime layer [<a href="#APR_ref">14</a>].
+
+      </ul>
+      <p>
+         Depending on the configuration, you can use multiple execution engine
+         components, for example, an interpreter and optimizing JIT.
+         Simultaneous use of multiple JIT compilers can provide different
+         trade-offs between compilation time and code quality.
+      </p>
+      <p class="backtotop">
+         <a href="#Top">Back to Top</a>
+      </p>
+      <h2>
+         <a name="Data_Structures"></a>2.4 Data Structures
+      </h2>
+      <p>
+         This section provides an overview of data structures in DRLVM, typical
+         examples of data structures, and the exposed data layout of public
+         data structures.
+      </p>
+      <p>
+         In DRLVM, all data structures are divided into the following groups:
+      </p>
+      <ul>
+         <li>
+            <i>Private</i> data structures can only be used inside a specific DRLVM component.
+			Other components can only access such data structures via exported component interfaces.
+         <li>
+            <i>Public</i> data structures shared across different DRLVM
+            components as listed in this section.
+
+      </ul>
+      <p>
+         For example, when compiling an access operation to an instance field,
+         the JIT calls the public <code>VM_JIT</code> interface function to
+         obtain the offset, and uses the result to generate the appropriate
+         load instruction. Another example is the VM core internal
+         representation of a class object.
+      </p>
+      <h3>
+         <a name="object_layout"></a>2.4.1 Object Layout
+      </h3>
+      <p>
+         DRLVM exports data structures in accordance with the JNI [<a href=
+         "#JNI_ref">5</a>] and JVMTI [<a href="#JVMTI_ref">4</a>] standards. In
+         addition to these structures, DRLVM shares information about an object
+         layout across its components. In particular, the Java Native Interface
+         does not specify the structure of <code>jobject</code>, and DRLVM
+         defines it as illustrated below.
+      </p>
+      <pre>
+typedef struct ManagedObject {
+  VTable *vt;
+  uint32 obj_info;
+  /* Class-specific data */
+} ManagedObject;
+struct _jobject { ManagedObject* object; }
+typedef struct _jobject*  jobject;
+</pre>
+      <p>
+         The <code>jobject</code> structure contains the following elements:
+      </p>
+      <ul>
+         <li>
+            The <code>vt</code> field points to the object virtual-method
+            table.
+            <p>
+               <a name="vtable"></a>Each class has one <i>virtual-method
+               table</i> (VTable) with class-specific information to perform
+               common operations, such as getting pointers to virtual methods.
+               The VTable is shared across all instances of a class. During garbage
+               collection, the VTable supplies such information, as the size of
+               the object and the offset of each reference stored in the
+               instance.
+            </p>
+
+         <li>
+            The <code>obj_info</code> field is used during synchronization and
+            garbage collection. This is a 32-bit value on all supported
+            architectures. This field also stores the hash code of an instance.
+
+      </ul>
+      <p>
+         Class-specific instance fields immediately follow the <code>vt</code>
+         and <code>obj_info</code> fields. Representation of array instances is
+         shared between the garbage collector and the JIT compiler. The VM core
+         determines the specific offsets to store the array length and the
+         first element of the array. This way, the VM core makes these fields
+         available for the garbage collector and the JIT via the VM interface.
+      </p>
+      <dl>
+         <dt>
+            Example
+         </dt>
+         <dd>
+            The excerpt of code below illustrates the usage of an object
+            structure in DRLVM for the <code>GetBooleanField()</code> JNI
+            function.
+         </dd>
+      </dl>
+<pre>
+typedef jobject ObjectHandle;
+
+jboolean JNICALL GetBooleanField(JNIEnv *env,
+                                 jobject obj,
+                                 jfieldID fieldID)
+{
+    Field *f = (Field *) fieldID;
+    /* Initialize the class if the field is accessed */
+    if (!ensure_initialised(env, f-&gt;get_class())) {
+        return 0; /* Error */
+    }
+
+    ObjectHandle h = (ObjectHandle) obj;
+
+    tmn_suspend_disable();       //-- Do not allow GC suspension --v
+    Byte *java_ref = (Byte *)h-&gt;object;
+    jboolean val = *(jboolean *)(java_ref + offset);
+    tmn_suspend_enable();        //--------------------------------^
+
+    return val;
+} // GetBooleanField
+</pre>
+      <h3>
+         <a name="compressed_references"></a>2.4.2 Compressed References
+      </h3>
+      <p>
+         To decrease memory footprint on 64-bit platforms [<a href=
+         "#compres_ref">11</a>], direct object and VTable pointers are
+         compressed in the Java<a href="#*">*</a> heap to 32-bit values.
+      </p>
+      <p>
+         To calculate a direct heap pointer, the system adds the pointer to the
+         heap base to the compressed value from the reference field. Similarly,
+         a direct pointer to an object VTable equals to the compressed value
+         stored in the first 32 bits of the object plus the base VTable
+         pointer. This limits the maximum heap size to 4 GB, but significantly
+         reduces the average object size and the work set size, and improves
+         cache performance.
+      </p>
+      <p>
+         Apart from the basic assumptions about object layout and the VTable
+         cache, all interaction between major DRLVM components is achieved
+         through function calls.
+      </p>
+      <p class="backtotop">
+         <a href="#Top">Back to Top</a>
+      </p>
+      <h2>
+         <a name="Initialization"></a>2.5 Initialization
+      </h2>
+      <p>
+         VM initialization is a sequence of operations performed at the virtual
+         machine start-up before execution of user applications. Currently,
+         DRLVM does not support the invocation API [<a href=
+         "#Invoc_api_ref">7</a>], and initialization follows the sequence
+         described below. The subsection <a href="#destroying_vm">2.5.3
+         Destroying the VM</a> below also describes the virtual machine
+         shutdown sequence.
+      </p>
+      <p>
+         The <code>main(&hellip;)</code> function is responsible for the major
+         stages of initialization sequence and does the following:
+      </p>
+      <ol>
+         <li>
+            Initializes the logger
+
+         <li>
+            Performs the first pass arguments parsing
+
+         <li>
+            Creates a VM instance by calling the <code>create_vm()</code>
+            function
+
+         <li>
+            Runs the user application by calling the <a href=
+            "#vmstarterstart"><code>VMStarter.start()</code></a> method
+
+         <li>
+            Destroys the VM instance by calling the <code>destroy_vm()</code>
+            function
+
+      </ol>
+      <p>
+         The subsequent sections describe these initialization stages in
+         greater detail.
+      </p>
+      <h3><a name="1stPass"></a>
+         2.5.1 First pass Arguments Parsing
+      </h3>
+      <p>
+         At this stage, the VM splits all command-line arguments into the
+         following groups:
+      </p>
+      <ul>
+         <li>
+            <code>&lt;vm-arguments&gt;</code> for initializing the VM instance
+
+         <li>
+            <code>&lt;class-name | -jar jar-file&gt;</code> for the name or
+            class or <code>.jar</code> file
+
+         <li>
+            <code>&lt;java-arguments&gt;</code> for the user application
+
+      </ul>
+      <p>
+         The virtual machine then creates the <code>JavaVMInitArgs</code>
+         structure from <code>&lt;vm-arguments&gt;</code>.
+      </p>
+      <h3><a name="creating_vm"></a>
+         2.5.2 Creating the VM
+      </h3>
+      <p>
+         The <code>create_vm()</code> function is a prototype for
+         <code>JNI_CreateJavaVM()</code> responsible for creating and
+         initializing the virtual machine. This function does the following:
+      </p>
+      <ol>
+         <li value="0">
+            For Linux<a href="#*">*</a> platforms, initializes the threading
+            system.<br>
+             No actions are performed on Windows<a href="#*">*</a> platforms.
+            Other steps apply to both operating systems.
+
+         <li>
+            Attaches the current thread. This is the first step of the
+            three-step procedure of attaching the thread to the VM. See steps
+            15 and 19 for further steps of the attaching procedure.
+              <ol>
+               <li>
+                  Creates synchronization objects.
+
+               <li>
+                  Initializes the <code>VM_thread</code> structure and stores
+                  the structure in the thread local storage.
+
+            </ol>
+
+         <li>
+            Initializes the VM global synchronization locks.
+
+         <li>
+            Creates the component manager.
+
+         <li>
+            Loads the garbage collector and interpreter libraries.
+
+         <li>
+            Initializes basic VM properties, such as <code>java.home</code>,
+            <code>java.library.path</code>, and
+            <code>vm.boot.class.path</code>, according to the location of the
+            VM library.<br>
+             The list of boot class path <code>.jar</code> files is hard-coded
+            into the VM library. Use <code>&ndash;Xbootclasspath</code>
+            command-line options to change the settings.
+
+         <li>
+            Initializes system signal handlers.
+
+         <li>
+            Parses VM arguments.
+
+         <li>
+            Initializes JIT compiler instances.
+
+         <li>
+            Initializes the VM memory allocator.
+
+         <li>
+            Initializes the garbage collector by calling <a href=
+            "#gc_init"><code>gc_init()</code></a>.
+
+         <li>
+            Preloads basic API native code dynamic libraries.
+            <p class="note">
+               Note
+            </p>
+            <p class="notetext">
+               The <code>vm.other_natives_dlls</code> property defines the list
+               of libraries to be loaded.
+            </p>
+
+         <li>
+            Initializes the JNI support VM core component.
+
+         <li>
+            Initializes the JVMTI support functionality, loads agent dynamic
+            libraries. At this step, the <em>primordial phase</em> starts.
+
+         <li>
+            Attaches the current thread and creates the <a href=
+            "#M2nFrame">M2nFrame</a> at the top of the stack (step 2).
+
+         <li>
+            Initializes the bootstrap class loader.
+
+         <li>
+            Preloads the classes required for further VM operation.
+
+         <li>
+            Caches the class handles for the core classes into the VM
+            environment.
+
+         <li>
+            Attaches the current thread (step 3).
+            <ol>
+               <li>
+                  Creates the <code>java.lang.Thread</code> object for the
+                  current thread.
+
+               <li>
+                  Creates the thread group object for the main thread group and
+                  includes the main thread in this group.
+
+               <li>
+                  Sets the system class loader by calling
+                  <code>java.lang.ClassLoader.getSystemClassLoader()</code>.
+
+            </ol>
+
+         <li>
+            Sends the <code>VMStart</code> JVMTI event. This step begins the
+            <em>start phase</em>.
+
+         <li>
+            Sends the <code>ThreadStart</code> JVMTI event for the main thread.
+            Send the <code>VMInit</code> JVMTI event. At this stage, the
+            <em>live phase</em> starts.
+
+         <li>
+            Calls the <a href=
+            "#vmstarterinit"><code>VMStarter.initialize()</code></a> method.
+
+      </ol>
+      <h3>
+         <a name="destroying_vm"></a>2.5.3 Destroying the VM
+      </h3>
+      <p>
+         The <code>destroy_vm()</code> function is a prototype for
+         <code>JNI_DestroyJavaVM()</code> responsible for terminating operation
+         of a VM instance. This function calls the <a href=
+         "#vmstartershutdown"><code>VMStarter.shutdown()</code></a> method.
+      </p>
+      <h3><a name="VMStarter"></a>
+         2.5.4 VMStarter class
+      </h3>
+      <p>
+         This Java<a href="#*">*</a> class supports specific VM core tasks by
+         providing the following methods:
+      </p>
+      <dl>
+         <dt>
+            <a name="vmstarterinit"></a>initialize()
+         </dt>
+         <dd>
+            Called by the <code>create_vm()</code> method, does the following:
+            <ul>
+               <li>
+                  Starts the finalizer and execution manager helper threads
+
+               <li>
+                  Registers the shutdown hook for proper helper threads
+                  shutdown
+
+            </ul>
+         </dd>
+         <dt>
+            <a name="vmstartershutdown"></a>shutdown()
+         </dt>
+         <dd>
+            Called by the <code>destroy_vm()</code> method, does the following:
+
+            <ul>
+               <li>
+                  Waits for non-daemon threads
+
+               <li>
+                  Calls the <code>System.exit()</code> method
+
+            </ul>
+         </dd>
+         <dt>
+            <a name="vmstarterstart"></a>start()
+         </dt>
+         <dd>
+            Runs the user application:
+            <ul>
+               <li>
+                  Initializes the system class loader
+
+               <li>
+                  Loads the main class of the application
+
+               <li>
+                  Obtains the <code>main()</code> method via reflection
+
+               <li>
+                  Starts the thread that invokes the <code>main()</code> method
+                  and caches exceptions from this method
+
+            </ul>
+         </dd>
+      </dl>
+      <p class="backtotop">
+         <a href="#Top">Back to Top</a>
+      </p>
+      <h2>
+         <a name="Root_Set_Enumeration"></a>2.6 Root Set Enumeration
+      </h2>
+      <p>
+         DRLVM automatically manages the Java<a href="#*">*</a> heap by using
+         tracing collection techniques.
+      </p>
+      <h3>
+         2.6.1 About Roots
+      </h3>
+      <p>
+         <em>Root set enumeration</em> is the process of collecting the initial
+         set of references to live objects, the <em>roots</em>. Defining the
+         root set enables the garbage collector to determine a set of all
+         objects directly reachable from the all running threads and to reclaim
+         the rest of the heap memory. The set of all live objects includes
+         objects referred by roots and objects referred by other live objects.
+         This way, the set of all live objects can be constructed by means of
+         transitive closure of the objects referred by the root set.
+      </p>
+      <p>
+         Roots consist of:
+      </p>
+      <ul>
+         <li>
+            Global references, such as static fields of classes, JNI global handles,
+            interned string references
+         <li>
+            Thread-specific references in managed stack frames, local JNI
+            handles, and the per-thread data structures maintained by the VM
+            core
+
+      </ul>
+      <h3>
+         2.6.2 Black-box Method
+      </h3>
+      <p>
+         In DRLVM, the <em>black-box method</em> is designed to accommodate
+         precise enumeration of the set of root references. The GC considers
+         everything outside the Java<a href="#*">*</a> heap as a black box, and
+         has little information about the organization of the virtual machine.
+         The GC relies on the support of the VM core to enumerate the root set.
+         In turn, the VM considers the thread stack as the black box, and uses
+         the services provided by the JIT and interpreter to iterate over the
+         stack frames and enumerate root references in each stack frame.
+      </p>
+      <p>
+         Enumeration of a method stack frame is best described in terms of safe
+         points and GC maps. <a name="GC_map"></a>The <em>GC map</em> is the
+         data structure for finding all live object pointers in the stack
+         frame. Typically, the GC map contains the list of method arguments and
+         local variables of the reference type, as well as spilt over
+         registers, in the form of offsets from the stack pointer. The GC map
+         is associated with a specific point in the method, the <em>safe
+         point</em>. The JIT determines the set of safe points at the method
+         compilation time, and the interpreter does this at run time. This way,
+         call sites and backward branches enter the list. During method
+         compilation, the JIT constructs the GC maps for each safe point. The
+         interpreter does not use stack maps, but keeps track of object
+         references dynamically, at run time. With the black-box method, the VM
+         has little data on the thread it needs to enumerate, only the register
+         context.
+      </p>
+      <p class="backtotop">
+         <a href="#Top">Back to Top</a>
+      </p>
+      <h3>
+         2.6.3 Enumeration Procedure
+      </h3>
+      <p>
+         When the GC decides to do garbage collection, it enumerates all roots
+         as described below.
+      </p>
+      <ol>
+         <li>
+            The garbage collector calls the VM core function
+            <code>vm_enumerate_root_set_all_threads()</code>.
+            <p class="note">
+               Note
+            </p>
+            <p class="notetext">
+               Currently, the DRLVM implementation does not support concurrent
+               garbage collectors.
+            </p>
+
+         <li>The
+            VM core suspends all threads, see section <a href="#Safe_suspension">3.5.4 Safe Suspension</a>.
+         <li>
+            The VM core enumerates all the global and thread-local references in
+            the run-time data structures: the VM enumerates each frame of each
+            thread stack. <br>
+           For each frame produced by the JIT-compiled code, it
+           is necessary to enumerate the roots on that frame and to unwind to
+           the previous frame. For that, the VM calls methods
+           <code>JIT_get_root_set_from_stack_frame()</code> and
+            <code>JIT_unwind_stack_frame()</code>.
+            <ol>
+               <li>
+                  The VM identifies the method that owns the stack frame by looking
+                  up the instruction pointer value in the method code block
+                  tables.
+
+               <li>
+                  The VM passes the instruction pointer and the stack pointer
+                  registers to the JIT compiler.
+
+               <li>
+                  The JIT identifies the safe point and finds the GC map associated
+                  with the code address.
+
+               <li>
+                  The JIT consults the GC map for the safe point, and enumerates
+                  the root set for the frame. For that, the JIT calls the
+                  function <code>gc_add_root_set_entry()</code> for each stack
+                  location, which contains pointers to the Java<a href=
+                  "#*">*</a> heap [<a href="#GC_article_ref">12</a>].<br>
+                   The interpreter uses its own stack frame format and
+                  enumerates all thread stack trace when the interpreter
+                  function <code>interpreter_enumerate_thread()</code> is
+                  called.
+
+            </ol>
+
+         <li>The
+            VM core and the execution engine communicate the roots to the garbage collector
+            by calling the function
+            <code>gc_add_root_set_entry(ManagedObject)</code>.
+
+			 <p class="note">
+               Note
+            </p>
+            <p class="notetext">
+               The parameter points to the root, not to the object the root
+               points to. This enables the garbage collector to update the root
+               in case it has changed object locations during the collection.
+            </p>
+        <li>The
+            VM core returns from
+            <code>vm_enumerate_root_set_all_threads()</code>, so that the
+            garbage collector has all the roots and proceeds to collect objects
+            no longer in use, possibly moving some of the live objects.
+
+        <li>
+            The GC determines the set of reachable objects by tracing the reference
+            graph. In the graph, Java<a href="#*">*</a> objects are vertices
+            and directed edges are connectors between the objects having
+            reference pointers to other objects.
+
+        <li>
+            The GC calls the VM function <code>vm_resume_threads_after()</code>.
+            The VM core resumes all threads, so that the garbage collector can
+            proceed with the allocation request that triggered garbage
+            collection.
+
+
+      </ol>
+      <p class="backtotop">
+         <a href="#Top">Back to Top</a>
+      </p>
+      <h2>
+         <a name="Finalization"></a>2.7 Finalization
+      </h2>
+      <p>
+         <em>Finalization</em> is the process of reclaiming unused system
+         resources after garbage collection. The DRL finalization fully
+         complies with the specification [<a href="#JVM_spec_ref">1</a>]. The
+         VM core and the garbage collector cooperate inside the virtual machine
+         to enable finalizing unreachable objects.
+      </p>
+      <p class="note">
+         Note
+      </p>
+      <p class="notetext">
+         In DRL, the virtual machine tries to follow the reverse finalization
+         order, so that the object created last is the first to be finalized;
+         however, the VM does not guarantee that finalization follows this or
+         any specific order.
+      </p>
+      <h3>
+         2.7.1 Finalization Procedure
+      </h3>
+      <p>
+         As Figure 2 shows, several queues can store references to finalizable
+         objects:
+      </p>
+      <ul>
+         <li>
+            <em>GC live objects queue</em> for marked objects.
+
+         <li>
+            <em>GC buffering queue</em> for unmarked objects. This queue is
+            empty most of the time.
+
+         <li>
+            <em>VM core queue</em> for objects unreachable from the root and
+            scheduled for finalization.
+
+      </ul>
+      <p align="center">
+         <img src="images/final_queques.gif" alt="Object Queues in VM and GC">
+      </p>
+      <p class="special">
+         Figure 2. Finalization Framework
+      </p>
+      <p>
+         The garbage collector uses these queues at different stages of the GC
+         procedure to enumerate the root set and kick off finalization for
+         unreachable objects, as follows.
+      </p>
+      <p class="backtotop">
+         <a href="#Top">Back to Top</a>
+      </p>
+      <ol>
+         <li>
+            <p class="class">
+               Object Allocation
+            </p>
+            <p>
+               During <a href="#Object_Allocation">object allocation</a>, the
+               garbage collector places references to finalizable objects into
+               the live object queue, as shown in Figure 3. Functions
+               <code>gc_alloc()</code> and <code>gc_alloc_fast()</code>
+               register finalizable objects with the queue.
+            </p>
+            <p align="center">
+               <img src="images/final_alloc_all.gif" alt=
+               "Allocation functions and the live objects queue">
+            </p>
+            <p class="special">
+               Figure 3. Allocation of Finalizable Objects
+            </p>
+
+         <li>
+            <p class="class">
+               After Mark Scan
+            </p>
+            <p>
+               After marking all reachable objects, the GC moves the remaining
+               object references to the unmarked objects queue. Figure 4
+               illustrates this procedure: grey squares stand for marked object
+               references, and white square are the unmarked object references.
+            </p>
+            <p align="center">
+               <img src="images/final_unmarked_queue.gif" alt=
+               "Marked Objects moved to Queue 1 and unmarked objects to Queue 2">
+            </p>
+            <p class="special">
+               Figure 4. Unmarked Objects Queue Usage
+            </p>
+
+         <li>
+            <p class="class">
+               Filling in the Finalizable Objects Queue
+            </p>
+            <p>
+               From the buffering queue, the GC transfers unmarked object
+               references to the VM queue, as shown in Figure 5. To place a
+               reference into the queue, the garbage collector calls the
+               <code>vm_finalize_object()</code> function for each reference
+               until the unmarked objects queue is empty.
+            </p>
+            <p align="center">
+               <img src="images/final_final_queue.gif" alt=
+               "Unmarked Objects are moved to Queue 3 of finalizable objects">
+            </p>
+            <p class="special">
+               Figure 5. Finalization Scheduling
+            </p>
+
+         <li>
+            <p class="class">
+               Activating the Finalizer Thread
+            </p>
+            <p>
+               Finally, the GC calls the <code>vm_hint_finalize()</code>
+               function that wakes up finalizer threads. All finalizer threads
+               are pure Java<a href="#*">*</a> threads, see section <a href=
+               "#work_balance">2.7.2 Work Balancing Subsystem</a>.<br>
+                Each active thread takes one object to finalize and does the
+               following:
+            </p>
+            <ol>
+               <li>
+                  Gets references to the object from the VM queue
+
+               <li>
+                  Removes the reference from the queue
+
+               <li>
+                  Calls the <code>finalize()</code> function for the object
+
+            </ol>
+            <p>
+               If the number of active threads is greater than the number of
+               objects, the threads that have nothing to finalize are
+               transferred to the sleep mode, as shown in Figure 6.
+            </p>
+            <p align="center">
+               <img src="images/final_threads.gif" alt=
+               "Active finalizer threads address objects in the finalizable objects queue or sleep">
+            </p>
+            <p class="special">
+               Figure 6. Finalizer Threads
+            </p>
+
+      </ol>
+      <p class="backtotop">
+         <a href="#Top">Back to Top</a>
+      </p>
+      <h3>
+         <a name="work_balance"></a>2.7.2 Work Balancing Subsystem
+      </h3>
+      <p>
+         The work balancing subsystem dynamically adjusts the number of running
+         finalizer threads to prevent an overflow of the Java heap by
+         finalizable objects. This subsystem operates with two kinds of
+         finalizer threads: permanent and temporary. During normal operation
+         with a limited number of finalizable objects, permanent threads can
+         cover all objects scheduled for finalization. When permanent threads
+         are no longer sufficient, the work balancing subsystem activates
+         temporary finalizer threads as needed.
+      </p>
+      <p>
+         The work balancing subsystem operates in the following stages:
+      </p>
+      <dl>
+         <dt>
+            Stage 1: Permanent finalizer threads only
+         </dt>
+         <dd>
+            Object allocation starts. Only permanent finalizer threads run. The
+            garbage collector uses the hint counter variable to track
+            finalizable objects, and increases the value of the hint counter by
+            1 when allocating a finalizable object.
+         </dd>
+         <dt>
+            Stage 2: Temporary finalizer activated
+         </dt>
+         <dd>
+            The number of objects scheduled for finalization increases, and at
+            some point in time, the hint counter value exceeds a certain
+            threshold (currently set to 128). <br>
+           At this stage, the garbage collector calls the
+          <code>vm_hint_finalize()</code> function before performing the
+            requested allocation. This function is also called after each
+            garbage collection. The <code>vm_hint_finalize()</code> function
+            checks whether any objects remain in the queue of objects to
+            finalize. If the queue is not empty, this means that the current
+            quantity of finalizer threads is not enough. In this case, the work
+            balancing subsystem creates additional temporary finalizer threads.
+            The number of created temporary threads corresponds to the number of
+            CPUs.<br>
+             The operation of checking the finalizable objects queue state is performed periodically.
+			 The number of running temporary threads can be greater than
+            suffices, because the optimum number of finalizer threads is
+            unknown.
+            <p class="note">
+               Note
+            </p>
+            <p class="notetext">
+               The work balancing subsystem checks whether the finalization
+               queue is empty, but does not take into account the number of
+               objects in the queue.
+            </p>
+		</dd>
+         <dt>&nbsp;
+
+        </dt>
+         <dt>
+            Stage 3: Temporary finalizer threads destroyed
+         </dt>
+         <dd>
+            At a certain point, excess finalizer threads can appear, so that
+            the number of objects to finalize starts decreasing. When the
+            number of threads becomes two times greater than the optimal number, the
+            finalizable objects queue should be empty, see explanation
+            below.<br>
+             When the finalization queue is empty, temporary threads are
+            destroyed and the work balancing cycle restarts.
+         </dd>
+      </dl>
+      <p class="class">
+         WBS Internals
+      </p>
+      <p>
+         Assuming that N is an indefinite optimum number of finalizer threads,
+         you can make the following conclusions:
+      </p>
+      <ul>
+         <li>
+            Number N-1 finalizer threads is not enough, and all the Java<a
+            href="#*">*</a> heap gets filled with finalizable objects.
+
+         <li>
+            Number N+1 threads is an excess quantity that will cause certain
+            threads to wait.
+
+         <li>
+            N threads is the optimum solution, however, this cannot be achieved
+            if N is unknown.
+
+      </ul>
+      <p>
+         If N is less or equal to the number of permanent finalizer threads, no temporary threads are created.
+		 Otherwise, the number of finalizer threads undergoes the
+         following changes during WBS activity, in the chronological order:
+      </p>
+      <ol>
+         <li type="a">
+         When the hint counter exceeds the pre-set threshold, and the finalization queue is not empty,
+		 the work balance subsystem activates temporary threads as needed.
+
+
+         <li type="a">
+            When the number of temporary threads exceeds N, the number the
+            objects starts decreasing; however, the number of finalizer threads
+            continues to grow. By the time the number of finalizer threads
+            reaches 2N, no objects remain in the queue, because at this time an
+            optimum finalization system could finalize the same quantity of
+            objects as current.
+
+         <li type="a">
+            When the queue is empty, temporary threads are destroyed, as
+            described in stage 3.
+
+      </ol>
+      <p>
+         Figure 7 below demonstrates variations in the number of finalizer
+         threads over time.
+      </p>
+      <p align="center">
+         <img src="images/final_graph.gif" alt=
+         "Number of objects to finalize and of running threads changing dynamically">
+      </p>
+      <p class="special">
+         Figure 7. Variations in Number of Running Finalizer Threads
+      </p>
+      <p>
+         As a result, the number of running finalizer threads in the current
+         work balancing subsystem can vary between 0 and 2N.
+      </p>
+      <p class="note">
+         Note
+      </p>
+      <p class="notetext">
+         The maximum value for 2N is 256 running finalization threads.
+      </p>
+      <p class="backtotop">
+         <a href="#Top">Back to Top</a>
+      </p>
+      <h1>
+         <a name="VM_Core"></a>3. VM Core
+      </h1>
+      <h2>
+         <a name="VMCore_architecture"></a>3.1 Architecture
+      </h2>
+      <p>
+         The core virtual machine is the central part of the overall VM design.
+         The VM core consists of common VM blocks defined by the JVM
+         specification [<a href="#JVM_spec_ref">1</a>] and of elements specific
+         for the DRLVM implementation, as follows:
+      </p>
+      <ul>
+         <li>
+            <a href="#Class_support">Class support</a> encapsulates class
+            loading and resolution, as well as the functional interface to VM
+            internal class representation. This component provides interfaces
+            for class loading and accessing class structures.
+
+         <li>
+            <a href="#Kernel_Classes">Kernel classes</a> component includes a
+            subset of the Java<a href="#*">*</a> class library closely tied
+            with the virtual machine, which mostly includes classes of the
+            <code>java.lang</code> package.
+
+         <li>
+            <a href="#Kernel_Class_Natives">Kernel class native</a> methods
+            link the Java<a href="#*">*</a> kernel classes with other DRLVM
+            components, and are exported as ordinary native methods from the VM
+            executable according to the Java<a href="#*">*</a> Native Interface
+            (JNI) specification [<a href="#JNI_ref">5</a>].
+
+         <li>
+            <a href="#JNI_support">JNI support</a> component supports execution
+            of native methods for Java<a href="#*">*</a> classes, and for the
+            native interface API [<a href="#JNI_ref">5</a>].
+
+         <li>
+            <a href="#JVMTI_Support">JVMTI support</a> enables loading of the
+            debugging agent, and provides functionality for running simple
+            debug scenarios, see the JVM Tool Interface Specification [<a href=
+            "#JVMTI_ref">4</a>].
+
+         <li>
+            <a href="#Stack_Support">Stack support</a> allows stack examination
+            for creating stack traces and performing enumeration of live
+            references.
+
+         <li>
+            <a href="#Exception_Handling">Exception handling</a> is activated
+            when an exception is thrown; this component is responsible calling
+            the appropriate exception handler and, together with the stack
+            support, for the stack walking process.
+
+         <li>
+            <a href="#VM_Services">VM services</a> include run-time,
+            compilation time, and compiled code utilities provided by the VM
+            core for the JIT compiler, and utilities for the garbage collector
+            and for class library natives.
+
+         <li>
+            <a href="#Verifier">Verifier</a> checks the classes to meet safety
+            requirements before class loading.
+
+         <li>
+            <a href="#Thread_Management">Thread management</a> functionality
+            provides threading inside the virtual machine.
+
+         <li>
+            <a href="#Utilities">Utilities</a> are used by the VM core during
+            normal operation.
+
+      </ul>
+      <p>
+         The structure of the virtual machine enables building stable
+         interfaces for inter-block communication as well as public VM
+         interfaces. These interfaces inherit platform independence from the VM
+         specification [<a href="#JVM_spec_ref">1</a>]. Figure 8 shows the VM
+         core overall structure and the internal logic of components
+         interaction. For more details on available interfaces, see <a href=
+         "#VM_exported_interfaces">3.13 Interfaces</a>.
+      </p>
+      <table align="center">
+         <tr>
+            <td>
+               <img border="0" alt="VM Core Components and Interfaces" src=
+               "images/VM_core.gif">
+            </td>
+         </tr>
+         <tr>
+            <td>
+               <p class="special">
+                  <a name="Figure:VM_Core_Components"></a>Figure 8. VM Core
+                  Components
+               </p>
+               <p class="notetext">
+                  Red font indicates external interfaces.
+               </p>
+            </td>
+         </tr>
+      </table>
+      <p class="backtotop">
+         <a href="#Top">Back to Top</a>
+      </p>
+      <h2>
+         <a name="Class_support"></a>3.2 Class Support
+      </h2>
+      <p>
+         The class support component processes classes in accordance with the
+         JVM specification [<a href="#JVM_spec_ref">1</a>], which includes
+         class loading, class preparation, resolution, and initialization
+         operations. This component also contains several groups of functions
+         that other VM components use to get information on loaded classes and
+         other class-related data structures. For example, JVMTI functions
+         <code>RedefineClasses()</code> and <code>GetLoadedClasses()</code> use
+         utility interfaces provided by class support.
+      </p>
+      <p>
+         The class support component has the following major goals:
+      </p>
+      <ul>
+         <li>
+            Load binary class data from <code>.class</code> files and
+            <code>.jar</code> archives from the bootstrap class loader
+
+         <li>
+            Create internal (VM) representations of classes from byte arrays
+
+         <li>
+            Provide access to information on classes, methods, and fields for
+            various VM modules
+
+         <li>
+            Provide instruments for class redefinition and class support
+            related events required for JVMTI
+
+         <li>
+            Communicate with the verifier on verification of methods bytecode
+
+      </ul>
+      <h3>
+         3.2.1 Classification of Class Support Interfaces
+      </h3>
+      <p>
+         Class support functions can be divided into the following groups:
+      </p>
+      <dl>
+         <dt>
+            Class Loading
+         </dt>
+         <dd>
+            Comprises functions for loading classes, searching for loaded
+            classes inside VM structures, and JVMTI class redefinition. The
+            functions obtain bytes from the Java<a href="#*">*</a> class
+            libraries via the descendants of the
+            <code>java.lang.ClassLoader</code> class or from the files and
+            directories listed in the <code>vm.boot.class.path</code> property.
+            These functions also bind loaded classes with the defining class
+            loader and provide information on all loaded classes.
+         </dd>
+      </dl>
+      <dl>
+         <dt>
+            Class Manipulation
+         </dt>
+         <dd>
+            Provides access to class properties, such as the internal (VM) and
+            the external (Java<a href="#*">*</a>) names, access and properties
+            flags, the super-class and the defining class, as well as super
+            interfaces, inner classes, methods, fields, and attributes.<br>
+             Supports <i>class resolution</i> by resolving symbolic references
+            in the run-time constant pool of the class.
+         </dd>
+      </dl>
+      <dl>
+         <dt>
+            Method Manipulation
+         </dt>
+         <dd>
+            Provides access to the properties of methods of a class, such as

[... 5393 lines stripped ...]


Mime
View raw message