You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by na...@apache.org on 2007/03/13 13:17:45 UTC
svn commit: r517663 [7/14] - in /harmony/standard/site: docs/
docs/documentation/ docs/subcomponents/classlibrary/
docs/subcomponents/drlvm/ xdocs/ xdocs/documentation/ xdocs/stylesheets/
xdocs/subcomponents/classlibrary/ xdocs/subcomponents/drlvm/
Modified: harmony/standard/site/docs/subcomponents/drlvm/JVMTI-PopFrame.html
URL: http://svn.apache.org/viewvc/harmony/standard/site/docs/subcomponents/drlvm/JVMTI-PopFrame.html?view=diff&rev=517663&r1=517662&r2=517663
==============================================================================
--- harmony/standard/site/docs/subcomponents/drlvm/JVMTI-PopFrame.html (original)
+++ harmony/standard/site/docs/subcomponents/drlvm/JVMTI-PopFrame.html Tue Mar 13 05:17:43 2007
@@ -1,527 +1,527 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-
-<!--
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You 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.
--->
-
-
-<!-- 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="dev@harmony.apache.org">
-
-
-
-
-
-
-
- <title>Apache Harmony - JVMTI Implementation of Pop Frame</title>
-
-
-
- <link rel="stylesheet" type="text/css" href="../../site.css"/>
- </head>
-
- <body>
- <table width="100%" cellspacing="0">
- <!-- TOP IMAGE -->
- <tr>
- <td align='LEFT'>
- <table><tr><td>
- <td>
-<a href="http://harmony.apache.org/"><img src="../../images/harmony-logo-new.png" alt="Apache Harmony" /></a>
-</td>
-</td>
- </td></tr></table>
- </td>
- <td align='RIGHT'>
- <a href="http://www.apachecon.com/2007/EU/index.html">
- <img src="http://www.apache.org/ads/ApacheCon/2007-europe-234x60.png"
- alt="ApacheCon Europe 2007" /></a>
- </td>
- </tr>
- </table>
- <table width="100%" cellspacing="4">
- <tr><td colspan="2">
- <hr noshade="" size="1"/>
- </td></tr>
-
- <tr>
- <!-- LEFT SIDE NAVIGATION -->
- <td class="menuItem" width="20%" nowrap="true">
-
- <!-- special ACon Logo - leave here for next time
- <a href="http://www.us.apachecon.com/">
- <img src="http://www.apache.org/ads/ApacheCon/2007-europe-125x125.png"
- alt="ApacheCon Europe 2007" />
- </a> -->
-
- <!-- regular menu -->
-
-
- <!-- ============================================================ -->
-
- <p class="menuItem"><strong>General</strong></p>
- <ul>
- <li class="menuItem"> <a href="../../index.html">Home</a>
-</li>
-
-
- <li class="menuItem"> <a href="../../license.html">License</a>
-</li>
-
-
- <li class="menuItem"> <a href="http://apache.org">ASF</a>
-</li>
-
-
- <li class="menuItem"> <a href="../../contribution_policy.html">Contribution Policy</a>
-</li>
-
-
- <li class="menuItem"> <a href="../../downloads.html">Downloads</a>
-</li>
-
-
- <li class="menuItem"> <a href="../../faq.html">FAQ</a>
-</li>
-
-
-
- </ul>
- <p class="menuItem"><strong>Community</strong></p>
- <ul>
- <li class="menuItem"> <a href="../../get-involved.html">Get Involved</a>
-</li>
-
-
- <li class="menuItem"> <a href="../../contributors.html">Who we are</a>
-</li>
-
-
- <li class="menuItem"> <a href="../../mailing.html">Mailing Lists</a>
-</li>
-
-
- <li class="menuItem"> <a href="http://issues.apache.org/jira/browse/HARMONY">Bug Tracker</a>
-</li>
-
-
- <li class="menuItem"> <a href="../../related.html">Other Projects</a>
-</li>
-
-
-
- </ul>
- <p class="menuItem"><strong>Development</strong></p>
- <ul>
- <li class="menuItem"> <a href="../../svn.html">Source Code</a>
-</li>
-
-
- <li class="menuItem"> <a href="../../quickhelp_contributors.html">Getting Started</a>
-</li>
-
-
- <li class="menuItem"> <a href="../../roadmap.html">Project Roadmap</a>
-</li>
-
-
- <li class="menuItem"> <a href="../../issue_resolution_guideline.html">Resolution Guideline</a>
-</li>
-
-
- <li class="menuItem"> <a href="../../performance.html">Performance</a>
-</li>
-
-
-
- </ul>
- <p class="menuItem"><strong>Documentation</strong></p>
- <ul>
- <li class="menuItem"> <a href="../../sitemap.html">Sitemap</a>
-</li>
-
-
- <li class="menuItem"> <a href="http://wiki.apache.org/harmony">Wiki</a>
-</li>
-
-
- <li class="menuItem"> <a href="../../hdk.html">HDK</a>
-</li>
-
-
- <li class="menuItem"> <a href="../../subcomponents/drlvm/index.html">DRLVM</a>
-</li>
-
-
- <li class="menuItem"> <a href="../../subcomponents/classlibrary/index.html">Class Library</a>
-</li>
-
-
- <li class="menuItem"> <a href="../../subcomponents/buildtest/index.html">Build-test Framework</a>
-</li>
-
-
-
- </ul>
- </td>
- <td width="80%" valign="top"><a name="top"></a>
- <h1>
- <a name="JVMTI Pop Frame">JVMTI Pop Frame</a>
- </h1>
- <p>
- Here is a description of how popping a frame is currently
- implemented in the DRLVM tool interface (JVMTI). For a
- definition of the pop frame functionality, consult the JVMTI
- specification [<a href="#JVMTISpec">1</a>]. For generic
- information on JVMTI in the DRL virtual machine and for definition
- of related terms, see the <a href="developers_guide.html" title="DRLVM Developer's Guide">developer's
- guide</a>.
- </p>
-
- <h2>
- <a name="Introduction">Introduction</a>
- </h2>
-
- <p> Popping a stack frame becomes necessary when execution is in a native
- function and a <a href="developers_guide.html#M2nFrame">managed-to-native
- frame</a> (M2nFrame) is on the stack. This means that the JVMTI
- component pops the M2nFrame and the Java frame above it. A frame is popped
- each time the JVMTI function <code>PopFrame()</code> is
- called. The current pop-frame implementation is based on the exception
- handling mechanism for transferring execution control. This way, VM pops
- frames on the current thread only. To pop frames on other threads, VM
- uses the M2nFrame flag system and callbacks.</p>
-
-
- <h2>
- <a name="How to Pop a Frame">How to Pop a Frame</a>
- </h2>
-
- <p>To pop a frame on the current thread, refer to the following core
- functions:
- </p>
- <table>
- <tr>
- <th class="TableHeading" colspan="" rowspan="">
-
- Function Name
- </th>
- <th class="TableHeading" colspan="" rowspan="">
-
- Role
- </th>
- </tr>
- <tr>
- <td class="TableCell" colspan="" rowspan="" >
-
-
- <code>jvmti_jit_prepare_pop_frame</code>
-
- </td>
- <td class="TableCell" colspan="" rowspan="" >
-
-
- Finds register context for the previous frame using the
- <a href="developers_guide.html#Stack_Iterator">stack iterator</a>.
- </td>
- </tr>
- <tr>
- <td class="TableCell" colspan="" rowspan="" >
-
-
- <code>jvmti_jit_complete_pop_frame</code>
-
- </td>
- <td class="TableCell" colspan="" rowspan="" >
-
-
- Transfers control to the saved register context for the
- popped frame.
-
- </td>
- </tr>
- <tr>
- <td class="TableCell" colspan="" rowspan="" >
-
-
- <code>jvmti_ji_do_pop_frame</code>
-
- </td>
- <td class="TableCell" colspan="" rowspan="" >
-
-
- Transfers control to the previous frame. This function is
- a simple and fast combination of sequential calls of
- <code>jvmti_jit_prepare_pop_frame</code> and
- <code>jvmti_jit_complete_pop_frame</code>.
-
- </td>
- </tr>
- </table>
- <p>The state of a frame with regard to popping is indicated in the
- <code>frame_type</code>
- field. This field can have the following values: </p>
- <table>
- <tr>
- <th class="TableHeading" colspan="" rowspan="">
-
- Flag Name
-
- </th>
- <th class="TableHeading" colspan="" rowspan="">
-
- Meaning
- </th>
- </tr>
- <tr>
- <td class="TableCell" colspan="" rowspan="" >
-
-
- <code>FRAME_UNPOPABLE</code>
-
- </td>
- <td class="TableCell" colspan="" rowspan="" >
-
-
- The frame cannot be popped.
-
- </td>
- </tr>
- <tr>
- <td class="TableCell" colspan="" rowspan="" >
-
-
- <code>FRAME_POPABLE</code>
-
- </td>
- <td class="TableCell" colspan="" rowspan="" >
-
-
- The frame can be popped but is not.
-
- </td>
- </tr>
- <tr>
- <td class="TableCell" colspan="" rowspan="" >
-
-
- <code>FRAME_POP_NOW</code>
-
- </td>
- <td class="TableCell" colspan="" rowspan="" >
-
-
- The frame is popped and the state of VM can be
- unpredictable and unexpected. JVMTI cannot work in this
- state and waits until the popped frame is resumed and the
- frame state is changed.
-
- </td>
- </tr>
- <tr>
- <td class="TableCell" colspan="" rowspan="" >
-
-
- <code>FRAME_POP_DONE =
- FRAME_POPABLE |FRAME_POP_NOW</code>
-
- </td>
- <td class="TableCell" colspan="" rowspan="" >
-
-
- The frame is popped now but VM state is OK and JVMTI can
- work without thread resume.
-
- </td>
- </tr>
- </table>
- <p>
- In the current implementation, popping a frame goes in the
- following way:
- </p>
- <ol>
- <li>
- VM suspends the popped thread in one of these functions:
- <code>thread_suspend_disable()</code> or in <code>hythread_safe_point()</code>.
- </li>
- <li>
- The JVMTI Agent calls <code>PopFrame()</code> and does the following:
- <ol>
- <li>
- Checks that the flag for the topmost M2nFrame is set to <code>FRAME_POPABLE</code>,
- which means that the frame can be popped.
- </li>
- <li>
- Changes the flag
- to <code>FRAME_POP_NOW</code>.
- </li>
- <li>
- Sets the safe point for the callback function. The suspended thread
- executes the callback while staying in the function where the
- thread is suspended.
- </li>
- </ol>
- </li>
- <li>
- The callback
- function pops the frame in one of the following ways depending on
- the function and on area of the stack:
- <ol>
- <li>
- For <b>hythread_safe_point():</b>
- <ol>
- <li>
- VM finds the register
- context for the previous frame and saves it in the current M2nFrame.
- The frame type flag changed to <code>FRAME_POP_DONE</code>.
- </li>
- <li>
- VM exits the safe point and checks the frame status. If
- the frame is popped, VM transfers control to the saved register
- context. Otherwise, VM exits normally.
- </li>
- </ol>
- </li>
- <li>
- For the <b>suspend_disable()</b> function in an <a href="developers_guide.html#Exception_Handling">
- unwindable
- area of the stack
- </a>:
- <ol>
- <li>
- The callback explicitly calls <code>hythread_safe_point()</code> to
- stop the current thread in the safe point and wait until
- the thread is resumed by another thread.
- </li>
- <li>
- When the thread is resumed, the callback pops the frame
- for the current thread and transfers control to the previous
- frame.
- </li>
- </ol>
- </li>
- <li>
- For the <strong>suspend_disable()</strong> function in a <a href="developers_guide.html#Exception_Handling">
- non-unwindable
- area of the stack
- </a>:
- <ol>
- <li>
- VM raises a special exception object and waits for the end
- of the area.
- </li>
- <li>
- After exiting the area, VM checks whether the exception
- is set and pops the frame for the current thread and transfers
- control to the previous frame.
- </li>
- </ol>
- </li>
- </ol>
- </li>
- </ol>
-
-
- <h2>
- <a name="Implementation Specifics">Implementation Specifics</a>
- </h2>
-
- <ul>
- <li>Because the implementation re-uses the exception scheme, popping
- a frame does not transfer control to the beginning of the bytecode
- invoke instruction, but to the native call instruction. This is possible
- because the JIT compiles an invoke instruction into
- several native instructions including the call.<br />
- A better way of handling the operation is to make VM transfer
- control to the beginning of the invoke instruction block. </li>
- <li> In the exception handling mechanism, control is returned to the
- instruction pointer (IP) after the call instruction. This way, VM
- must find the call IP of the previous instruction by using
- information on JIT calling conventions.<br />
-It is advisory to move the corresponding functionality to JIT so that VM has no data
-on JIT calling conventions. </li>
- <li> Object references in popped frames can become outdated during
- garbage collection because VM components do not enumerate the stack
- for such frames. For GC purposes, JVM TI enumerates popped frames
- until the thread is resumed and control is transferred. </li>
- <li> Due to specifics of the current thread manager implementation,
- the pop frame cannot guarantee synchronization of thread-suspend
- states across different threads. This way, if Thread A suspends
- Thread B, the current implementation cannot guarantee that Thread
- B is not resumed by another thread. In such a situation, operation of
- Thread A can be unstable because it relies on Thread B being
- suspended. </li>
- </ul>
-
-
- <h2>
- <a name="Related Information">Related Information</a>
- </h2>
-
- <p>[<a name="JVMTISpec" id="JVMTISpec" />1] JVM
- Tool Interface Specification, <a href="http://java.sun.com/j2se/1.5.0/docs/guide/jvmti/jvmti.html" target="_blank">http://java.sun.com/j2se/1.5.0/docs/guide/jvmti/jvmti.html</a> </p>
-
- <p><a href="#top">Back to top</a></p>
-
- </td>
- </tr>
-
- <!-- FOOTER -->
- <tr><td colspan="2">
- <hr noshade="" size="1"/>
- </td></tr>
- <tr><td colspan="2">
- <div class="special"><em>
- Copyright © 2003-2007, The Apache Software Foundation
- </em></div>
- </td></tr>
- </table>
- </body>
- </html>
-<!-- end the processing -->
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You 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.
+-->
+
+
+<!-- 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="dev@harmony.apache.org">
+
+
+
+
+
+
+
+ <title>Apache Harmony - JVMTI Implementation of Pop Frame</title>
+
+
+
+ <link rel="stylesheet" type="text/css" href="../../site.css"/>
+ </head>
+
+ <body>
+ <table width="100%" cellspacing="0">
+ <!-- TOP IMAGE -->
+ <tr>
+ <td align='LEFT'>
+ <table><tr><td>
+ <td>
+<a href="http://harmony.apache.org/"><img src="../../images/harmony-logo-new.png" alt="Apache Harmony" /></a>
+</td>
+</td>
+ </td></tr></table>
+ </td>
+ <td align='RIGHT'>
+ <a href="http://www.apachecon.com/2007/EU/index.html">
+ <img src="http://www.apache.org/ads/ApacheCon/2007-europe-234x60.png"
+ alt="ApacheCon Europe 2007" /></a>
+ </td>
+ </tr>
+ </table>
+ <table width="100%" cellspacing="4">
+ <tr><td colspan="2">
+ <hr noshade="" size="1"/>
+ </td></tr>
+
+ <tr>
+ <!-- LEFT SIDE NAVIGATION -->
+ <td class="menuItem" width="20%" nowrap="true">
+
+ <!-- special ACon Logo - leave here for next time
+ <a href="http://www.us.apachecon.com/">
+ <img src="http://www.apache.org/ads/ApacheCon/2007-europe-125x125.png"
+ alt="ApacheCon Europe 2007" />
+ </a> -->
+
+ <!-- regular menu -->
+
+
+ <!-- ============================================================ -->
+
+ <p class="menuItem"><strong>General</strong></p>
+ <ul>
+ <li class="menuItem"> <a href="../../index.html">Home</a>
+</li>
+
+
+ <li class="menuItem"> <a href="../../license.html">License</a>
+</li>
+
+
+ <li class="menuItem"> <a href="http://apache.org">ASF</a>
+</li>
+
+
+ <li class="menuItem"> <a href="../../contribution_policy.html">Contribution Policy</a>
+</li>
+
+
+ <li class="menuItem"> <a href="../../downloads.html">Downloads</a>
+</li>
+
+
+ <li class="menuItem"> <a href="../../faq.html">FAQ</a>
+</li>
+
+
+
+ </ul>
+ <p class="menuItem"><strong>Community</strong></p>
+ <ul>
+ <li class="menuItem"> <a href="../../get-involved.html">Get Involved</a>
+</li>
+
+
+ <li class="menuItem"> <a href="../../contributors.html">Who we are</a>
+</li>
+
+
+ <li class="menuItem"> <a href="../../mailing.html">Mailing Lists</a>
+</li>
+
+
+ <li class="menuItem"> <a href="http://issues.apache.org/jira/browse/HARMONY">Bug Tracker</a>
+</li>
+
+
+ <li class="menuItem"> <a href="../../related.html">Other Projects</a>
+</li>
+
+
+
+ </ul>
+ <p class="menuItem"><strong>Development</strong></p>
+ <ul>
+ <li class="menuItem"> <a href="../../svn.html">Source Code</a>
+</li>
+
+
+ <li class="menuItem"> <a href="../../quickhelp_contributors.html">Getting Started</a>
+</li>
+
+
+ <li class="menuItem"> <a href="../../roadmap.html">Project Roadmap</a>
+</li>
+
+
+ <li class="menuItem"> <a href="../../issue_resolution_guideline.html">Resolution Guideline</a>
+</li>
+
+
+ <li class="menuItem"> <a href="../../performance.html">Performance</a>
+</li>
+
+
+
+ </ul>
+ <p class="menuItem"><strong>Documentation</strong></p>
+ <ul>
+ <li class="menuItem"> <a href="../../sitemap.html">Sitemap</a>
+</li>
+
+
+ <li class="menuItem"> <a href="http://wiki.apache.org/harmony">Wiki</a>
+</li>
+
+
+ <li class="menuItem"> <a href="../../hdk.html">HDK</a>
+</li>
+
+
+ <li class="menuItem"> <a href="../../subcomponents/drlvm/index.html">DRLVM</a>
+</li>
+
+
+ <li class="menuItem"> <a href="../../subcomponents/classlibrary/index.html">Class Library</a>
+</li>
+
+
+ <li class="menuItem"> <a href="../../subcomponents/buildtest/index.html">Build-test Framework</a>
+</li>
+
+
+
+ </ul>
+ </td>
+ <td width="80%" valign="top"><a name="top"></a>
+ <h1>
+ <a name="JVMTI Pop Frame">JVMTI Pop Frame</a>
+ </h1>
+ <p>
+ Here is a description of how popping a frame is currently
+ implemented in the DRLVM tool interface (JVMTI). For a
+ definition of the pop frame functionality, consult the JVMTI
+ specification [<a href="#JVMTISpec">1</a>]. For generic
+ information on JVMTI in the DRL virtual machine and for definition
+ of related terms, see the <a href="developers_guide.html" title="DRLVM Developer's Guide">developer's
+ guide</a>.
+ </p>
+
+ <h2>
+ <a name="Introduction">Introduction</a>
+ </h2>
+
+ <p> Popping a stack frame becomes necessary when execution is in a native
+ function and a <a href="developers_guide.html#M2nFrame">managed-to-native
+ frame</a> (M2nFrame) is on the stack. This means that the JVMTI
+ component pops the M2nFrame and the Java frame above it. A frame is popped
+ each time the JVMTI function <code>PopFrame()</code> is
+ called. The current pop-frame implementation is based on the exception
+ handling mechanism for transferring execution control. This way, VM pops
+ frames on the current thread only. To pop frames on other threads, VM
+ uses the M2nFrame flag system and callbacks.</p>
+
+
+ <h2>
+ <a name="How to Pop a Frame">How to Pop a Frame</a>
+ </h2>
+
+ <p>To pop a frame on the current thread, refer to the following core
+ functions:
+ </p>
+ <table>
+ <tr>
+ <th class="TableHeading" colspan="" rowspan="">
+
+ Function Name
+ </th>
+ <th class="TableHeading" colspan="" rowspan="">
+
+ Role
+ </th>
+ </tr>
+ <tr>
+ <td class="TableCell" colspan="" rowspan="" >
+
+
+ <code>jvmti_jit_prepare_pop_frame</code>
+
+ </td>
+ <td class="TableCell" colspan="" rowspan="" >
+
+
+ Finds register context for the previous frame using the
+ <a href="developers_guide.html#Stack_Iterator">stack iterator</a>.
+ </td>
+ </tr>
+ <tr>
+ <td class="TableCell" colspan="" rowspan="" >
+
+
+ <code>jvmti_jit_complete_pop_frame</code>
+
+ </td>
+ <td class="TableCell" colspan="" rowspan="" >
+
+
+ Transfers control to the saved register context for the
+ popped frame.
+
+ </td>
+ </tr>
+ <tr>
+ <td class="TableCell" colspan="" rowspan="" >
+
+
+ <code>jvmti_ji_do_pop_frame</code>
+
+ </td>
+ <td class="TableCell" colspan="" rowspan="" >
+
+
+ Transfers control to the previous frame. This function is
+ a simple and fast combination of sequential calls of
+ <code>jvmti_jit_prepare_pop_frame</code> and
+ <code>jvmti_jit_complete_pop_frame</code>.
+
+ </td>
+ </tr>
+ </table>
+ <p>The state of a frame with regard to popping is indicated in the
+ <code>frame_type</code>
+ field. This field can have the following values: </p>
+ <table>
+ <tr>
+ <th class="TableHeading" colspan="" rowspan="">
+
+ Flag Name
+
+ </th>
+ <th class="TableHeading" colspan="" rowspan="">
+
+ Meaning
+ </th>
+ </tr>
+ <tr>
+ <td class="TableCell" colspan="" rowspan="" >
+
+
+ <code>FRAME_UNPOPABLE</code>
+
+ </td>
+ <td class="TableCell" colspan="" rowspan="" >
+
+
+ The frame cannot be popped.
+
+ </td>
+ </tr>
+ <tr>
+ <td class="TableCell" colspan="" rowspan="" >
+
+
+ <code>FRAME_POPABLE</code>
+
+ </td>
+ <td class="TableCell" colspan="" rowspan="" >
+
+
+ The frame can be popped but is not.
+
+ </td>
+ </tr>
+ <tr>
+ <td class="TableCell" colspan="" rowspan="" >
+
+
+ <code>FRAME_POP_NOW</code>
+
+ </td>
+ <td class="TableCell" colspan="" rowspan="" >
+
+
+ The frame is popped and the state of VM can be
+ unpredictable and unexpected. JVMTI cannot work in this
+ state and waits until the popped frame is resumed and the
+ frame state is changed.
+
+ </td>
+ </tr>
+ <tr>
+ <td class="TableCell" colspan="" rowspan="" >
+
+
+ <code>FRAME_POP_DONE =
+ FRAME_POPABLE |FRAME_POP_NOW</code>
+
+ </td>
+ <td class="TableCell" colspan="" rowspan="" >
+
+
+ The frame is popped now but VM state is OK and JVMTI can
+ work without thread resume.
+
+ </td>
+ </tr>
+ </table>
+ <p>
+ In the current implementation, popping a frame goes in the
+ following way:
+ </p>
+ <ol>
+ <li>
+ VM suspends the popped thread in one of these functions:
+ <code>thread_suspend_disable()</code> or in <code>hythread_safe_point()</code>.
+ </li>
+ <li>
+ The JVMTI Agent calls <code>PopFrame()</code> and does the following:
+ <ol>
+ <li>
+ Checks that the flag for the topmost M2nFrame is set to <code>FRAME_POPABLE</code>,
+ which means that the frame can be popped.
+ </li>
+ <li>
+ Changes the flag
+ to <code>FRAME_POP_NOW</code>.
+ </li>
+ <li>
+ Sets the safe point for the callback function. The suspended thread
+ executes the callback while staying in the function where the
+ thread is suspended.
+ </li>
+ </ol>
+ </li>
+ <li>
+ The callback
+ function pops the frame in one of the following ways depending on
+ the function and on area of the stack:
+ <ol>
+ <li>
+ For <b>hythread_safe_point():</b>
+ <ol>
+ <li>
+ VM finds the register
+ context for the previous frame and saves it in the current M2nFrame.
+ The frame type flag changed to <code>FRAME_POP_DONE</code>.
+ </li>
+ <li>
+ VM exits the safe point and checks the frame status. If
+ the frame is popped, VM transfers control to the saved register
+ context. Otherwise, VM exits normally.
+ </li>
+ </ol>
+ </li>
+ <li>
+ For the <b>suspend_disable()</b> function in an <a href="developers_guide.html#Exception_Handling">
+ unwindable
+ area of the stack
+ </a>:
+ <ol>
+ <li>
+ The callback explicitly calls <code>hythread_safe_point()</code> to
+ stop the current thread in the safe point and wait until
+ the thread is resumed by another thread.
+ </li>
+ <li>
+ When the thread is resumed, the callback pops the frame
+ for the current thread and transfers control to the previous
+ frame.
+ </li>
+ </ol>
+ </li>
+ <li>
+ For the <strong>suspend_disable()</strong> function in a <a href="developers_guide.html#Exception_Handling">
+ non-unwindable
+ area of the stack
+ </a>:
+ <ol>
+ <li>
+ VM raises a special exception object and waits for the end
+ of the area.
+ </li>
+ <li>
+ After exiting the area, VM checks whether the exception
+ is set and pops the frame for the current thread and transfers
+ control to the previous frame.
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+
+
+ <h2>
+ <a name="Implementation Specifics">Implementation Specifics</a>
+ </h2>
+
+ <ul>
+ <li>Because the implementation re-uses the exception scheme, popping
+ a frame does not transfer control to the beginning of the bytecode
+ invoke instruction, but to the native call instruction. This is possible
+ because the JIT compiles an invoke instruction into
+ several native instructions including the call.<br />
+ A better way of handling the operation is to make VM transfer
+ control to the beginning of the invoke instruction block. </li>
+ <li> In the exception handling mechanism, control is returned to the
+ instruction pointer (IP) after the call instruction. This way, VM
+ must find the call IP of the previous instruction by using
+ information on JIT calling conventions.<br />
+It is advisory to move the corresponding functionality to JIT so that VM has no data
+on JIT calling conventions. </li>
+ <li> Object references in popped frames can become outdated during
+ garbage collection because VM components do not enumerate the stack
+ for such frames. For GC purposes, JVM TI enumerates popped frames
+ until the thread is resumed and control is transferred. </li>
+ <li> Due to specifics of the current thread manager implementation,
+ the pop frame cannot guarantee synchronization of thread-suspend
+ states across different threads. This way, if Thread A suspends
+ Thread B, the current implementation cannot guarantee that Thread
+ B is not resumed by another thread. In such a situation, operation of
+ Thread A can be unstable because it relies on Thread B being
+ suspended. </li>
+ </ul>
+
+
+ <h2>
+ <a name="Related Information">Related Information</a>
+ </h2>
+
+ <p>[<a name="JVMTISpec" id="JVMTISpec" />1] JVM
+ Tool Interface Specification, <a href="http://java.sun.com/j2se/1.5.0/docs/guide/jvmti/jvmti.html" target="_blank">http://java.sun.com/j2se/1.5.0/docs/guide/jvmti/jvmti.html</a> </p>
+
+ <p><a href="#top">Back to top</a></p>
+
+ </td>
+ </tr>
+
+ <!-- FOOTER -->
+ <tr><td colspan="2">
+ <hr noshade="" size="1"/>
+ </td></tr>
+ <tr><td colspan="2">
+ <div class="special"><em>
+ Copyright © 2003-2007, The Apache Software Foundation
+ </em></div>
+ </td></tr>
+ </table>
+ </body>
+ </html>
+<!-- end the processing -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+