< prev index next >

src/hotspot/share/prims/jvmti.xml

Print this page

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <?xml-stylesheet type="text/xsl" href="jvmti.xsl"?>
    3 <!--
    4  Copyright (c) 2002, 2025, Oracle and/or its affiliates. All rights reserved.
    5  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    6 
    7  This code is free software; you can redistribute it and/or modify it
    8  under the terms of the GNU General Public License version 2 only, as
    9  published by the Free Software Foundation.
   10 
   11  This code is distributed in the hope that it will be useful, but WITHOUT
   12  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   13  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   14  version 2 for more details (a copy is included in the LICENSE file that
   15  accompanied this code).
   16 
   17  You should have received a copy of the GNU General Public License version
   18  2 along with this work; if not, write to the Free Software Foundation,
   19  Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   20 
   21  Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   22  or visit www.oracle.com if you need additional information or have any
   23  questions.
   24 -->

 3359       <errors>
 3360         <error id="JVMTI_ERROR_OPAQUE_FRAME">
 3361           The implementation is unable to force the current frame to return
 3362           (e.g. current frame is executing a native method).
 3363         </error>
 3364         <error id="JVMTI_ERROR_TYPE_MISMATCH">
 3365           The result type of the called method is not <code>double</code>.
 3366         </error>
 3367         <error id="JVMTI_ERROR_THREAD_NOT_SUSPENDED">
 3368           Thread was not suspended and was not the current thread.
 3369         </error>
 3370         <error id="JVMTI_ERROR_NO_MORE_FRAMES">
 3371           There are no frames on the call stack.
 3372         </error>
 3373       </errors>
 3374     </function>
 3375 
 3376     <function id="ForceEarlyReturnVoid" num="86" since="1.1">
 3377       <synopsis>Force Early Return - Void</synopsis>
 3378       <description>
 3379         This function can be used to return from a method with no result type.
 3380         That is, the called method must be declared <code>void</code>.







 3381       </description>
 3382       <origin>new</origin>
 3383       <capabilities>
 3384         <required id="can_force_early_return"></required>
 3385       </capabilities>
 3386       <parameters>
 3387         <param id="thread">
 3388           <jthread null="current" impl="noconvert"/>
 3389           <description>
 3390             The thread whose current frame is to return early.
 3391           </description>
 3392         </param>
 3393       </parameters>
 3394       <errors>
 3395         <error id="JVMTI_ERROR_OPAQUE_FRAME">
 3396           The implementation is unable to force the current frame to return
 3397           (e.g. current frame is executing a native method).

 3398         </error>
 3399         <error id="JVMTI_ERROR_TYPE_MISMATCH">
 3400           The called method has a result type.
 3401         </error>
 3402         <error id="JVMTI_ERROR_THREAD_NOT_SUSPENDED">
 3403           Thread was not suspended and was not the current thread.
 3404         </error>
 3405         <error id="JVMTI_ERROR_NO_MORE_FRAMES">
 3406           There are no frames on the call stack.
 3407         </error>
 3408       </errors>
 3409     </function>
 3410 
 3411   </category>
 3412 
 3413   <category id="Heap" label="Heap">
 3414     <intro>
 3415       These functions are used to analyze the heap.
 3416       Functionality includes the ability to view the objects in the
 3417       heap and to tag these objects.
 3418     </intro>
 3419 
 3420     <intro id="objectTags" label="Object Tags">
 3421       A <i>tag</i> is a value associated with an object.
 3422       Tags are explicitly set by the agent using the
 3423       <functionlink id="SetTag"></functionlink> function or by
 3424       callback functions such as <functionlink id="jvmtiHeapIterationCallback"/>.
 3425       <p/>
 3426       Tags are local to the environment; that is, the tags of one
 3427       environment are not visible in another.
 3428       <p/>
 3429       Tags are <code>jlong</code> values which can be used
 3430       simply to mark an object or to store a pointer to more detailed
 3431       information.  Objects which have not been tagged have a
 3432       tag of zero.
 3433       Setting a tag to zero makes the object untagged.






 3434     </intro>
 3435 
 3436     <intro id="heapCallbacks" label="Heap Callback Functions">
 3437         Heap functions which iterate through the heap and recursively
 3438         follow object references use agent supplied callback functions
 3439         to deliver the information.
 3440         <p/>
 3441         These heap callback functions must adhere to the following restrictions --
 3442         These callbacks must not use JNI functions.
 3443         These callbacks must not use <jvmti/> functions except
 3444         <i>callback safe</i> functions which
 3445         specifically allow such use (see the raw monitor, memory management,
 3446         and environment local storage functions).
 3447         <p/>
 3448         An implementation may invoke a callback on an internal thread or
 3449         the thread which called the iteration function.
 3450         Heap callbacks are single threaded -- no more than one callback will
 3451         be invoked at a time.
 3452         <p/>
 3453         The Heap Filter Flags can be used to prevent reporting

 5842       These functions are used to retrieve or set the value of a local variable.
 5843       The variable is identified by the depth of the frame containing its
 5844       value and the variable's slot number within that frame.
 5845       The mapping of variables to
 5846       slot numbers can be obtained with the function
 5847       <functionlink id="GetLocalVariableTable"></functionlink>.
 5848       <p/>
 5849       The <code>GetLocalXXX</code> functions may be used to retrieve the value of
 5850       a local variable contained in the frame of a virtual thread.
 5851       The <code>SetLocalXXX</code> functions may be used to set the value of a
 5852       local variable in the topmost frame of a virtual thread suspended at an event.
 5853       An implementation may support setting locals in other cases.
 5854     </intro>
 5855 
 5856     <function id="GetLocalObject" num="21">
 5857       <synopsis>Get Local Variable - Object</synopsis>
 5858       <description>
 5859         This function can be used to retrieve the value of a local
 5860         variable whose type is <code>Object</code> or a subclass of <code>Object</code>.
 5861         <p/>





 5862         The specified thread must be suspended or must be the current thread.
 5863       </description>
 5864       <origin>jvmdi</origin>
 5865       <capabilities>
 5866         <required id="can_access_local_variables"></required>
 5867       </capabilities>
 5868       <parameters>
 5869         <param id="thread">
 5870           <jthread null="current" frame="frame" impl="noconvert"/>
 5871           <description>
 5872             The thread of the frame containing the variable's value.
 5873           </description>
 5874         </param>
 5875         <param id="depth">
 5876           <jframeID thread="thread"/>
 5877           <description>
 5878             The depth of the frame containing the variable's value.
 5879           </description>
 5880         </param>
 5881         <param id="slot">
 5882           <jint/>
 5883           <description>
 5884             The variable's slot number.
 5885           </description>
 5886         </param>
 5887         <param id="value_ptr">
 5888           <outptr><jobject/></outptr>
 5889             <description>
 5890               On return, points to the variable's value.





 5891             </description>
 5892         </param>
 5893       </parameters>
 5894       <errors>
 5895         <error id="JVMTI_ERROR_INVALID_SLOT">
 5896           Invalid <code>slot</code>.
 5897         </error>
 5898         <error id="JVMTI_ERROR_TYPE_MISMATCH">
 5899           The variable type is not
 5900           <code>Object</code> or a subclass of <code>Object</code>.
 5901         </error>
 5902         <error id="JVMTI_ERROR_OPAQUE_FRAME">
 5903           The implementation is unable to get the frame locals
 5904           (e.g. the frame at <code>depth</code> is executing a native method).
 5905         </error>
 5906         <error id="JVMTI_ERROR_THREAD_NOT_SUSPENDED">
 5907           Thread was not suspended and was not the current thread.
 5908         </error>
 5909       </errors>
 5910     </function>
 5911 
 5912     <function id="GetLocalInstance" num="155" since="1.2">
 5913       <synopsis>Get Local Instance</synopsis>
 5914       <description>
 5915         This function can be used to retrieve the value of the local object
 5916         variable at slot 0 (the "<code>this</code>" object) from non-static
 5917         frames.  This function can retrieve the "<code>this</code>" object from
 5918         native method frames, whereas <code>GetLocalObject()</code> would
 5919         return <code>JVMTI_ERROR_OPAQUE_FRAME</code> in those cases.
 5920         <p/>





 5921         The specified thread must be suspended or must be the current thread.
 5922       </description>
 5923       <origin>new</origin>
 5924       <capabilities>
 5925         <required id="can_access_local_variables"></required>
 5926       </capabilities>
 5927       <parameters>
 5928         <param id="thread">
 5929           <jthread null="current" frame="frame" impl="noconvert"/>
 5930           <description>
 5931             The thread of the frame containing the variable's value.
 5932           </description>
 5933         </param>
 5934         <param id="depth">
 5935           <jframeID thread="thread"/>
 5936           <description>
 5937             The depth of the frame containing the variable's value.
 5938           </description>
 5939         </param>
 5940         <param id="value_ptr">
 5941           <outptr><jobject/></outptr>
 5942             <description>
 5943               On return, points to the variable's value.




 5944             </description>
 5945         </param>
 5946       </parameters>
 5947       <errors>
 5948         <error id="JVMTI_ERROR_INVALID_SLOT">
 5949           If the specified frame is a static method frame.
 5950         </error>
 5951         <error id="JVMTI_ERROR_THREAD_NOT_SUSPENDED">
 5952           Thread was not suspended and was not the current thread.
 5953         </error>
 5954       </errors>
 5955     </function>
 5956     <function id="GetLocalInt" num="22">
 5957       <synopsis>Get Local Variable - Int</synopsis>
 5958       <description>
 5959         This function can be used to retrieve the value of a local
 5960         variable whose type is <code>int</code>,
 5961         <code>short</code>, <code>char</code>, <code>byte</code>, or
 5962         <code>boolean</code>.
 5963         <p/>

 7335         </param>
 7336         <param id="source_name_ptr">
 7337           <allocbuf><char/></allocbuf>
 7338           <description>
 7339             On return, points to the class's source file name, encoded as a
 7340             <internallink id="mUTF">modified UTF-8</internallink> string.
 7341           </description>
 7342         </param>
 7343       </parameters>
 7344       <errors>
 7345         <error id="JVMTI_ERROR_ABSENT_INFORMATION">
 7346           Class information does not include a source file name. This includes
 7347           cases where the class is an array class or primitive class.
 7348         </error>
 7349       </errors>
 7350     </function>
 7351 
 7352     <function id="GetClassModifiers" phase="start" num="51">
 7353       <synopsis>Get Class Modifiers</synopsis>
 7354       <description>
 7355         For the class indicated by <code>klass</code>, return the access
 7356         flags
 7357         via <code>modifiers_ptr</code>.
 7358         Access flags are defined in <vmspec chapter="4"/>.
 7359         <p/>
 7360         If the class is an array class, then its public, private, and protected
 7361         modifiers are the same as those of its component type. For arrays of












 7362         primitives, this component type is represented by one of the primitive
 7363         classes (for example, <code>java.lang.Integer.TYPE</code>).

 7364         <p/>
 7365         If the class is a primitive class, its public modifier is always true,
 7366         and its protected and private modifiers are always false.

 7367         <p/>
 7368         If the class is an array class or a primitive class then its final
 7369         modifier is always true and its interface modifier is always false.
 7370         The values of its other modifiers are not determined by this specification.
 7371 


 7372       </description>
 7373       <origin>jvmdi</origin>
 7374       <capabilities>
 7375       </capabilities>
 7376       <parameters>
 7377         <param id="klass">
 7378           <jclass/>
 7379             <description>
 7380               The class to query.
 7381             </description>
 7382         </param>
 7383         <param id="modifiers_ptr">
 7384           <outptr><jint/></outptr>
 7385           <description>
 7386             On return, points to the current access flags of this class.
 7387 
 7388           </description>
 7389         </param>
 7390       </parameters>
 7391       <errors>
 7392       </errors>
 7393     </function>
 7394 
 7395     <function id="GetClassMethods" phase="start" num="52">
 7396       <synopsis>Get Class Methods</synopsis>
 7397       <description>
 7398         For the class indicated by <code>klass</code>, return a count of
 7399         methods via <code>method_count_ptr</code> and a list of
 7400         method IDs via <code>methods_ptr</code>. The method list contains
 7401         constructors and static initializers as well as true methods.
 7402         Only directly declared methods are returned (not inherited methods).
 7403         An empty method list is returned for array classes and primitive classes
 7404         (for example, <code>java.lang.Integer.TYPE</code>).
 7405       </description>
 7406       <origin>jvmdi</origin>

 8269         <field id="notify_waiter_count">
 8270           <jint/>
 8271           <description>
 8272             The number of platform threads waiting to own this monitor, or <code>0</code>
 8273             if only virtual threads are waiting to be notified or no threads are waiting
 8274             to be notified
 8275           </description>
 8276         </field>
 8277         <field id="notify_waiters">
 8278           <allocfieldbuf><jthread/></allocfieldbuf>
 8279             <description>
 8280               The <code>notify_waiter_count</code> platform threads waiting to be notified
 8281             </description>
 8282         </field>
 8283       </typedef>
 8284       <description>
 8285         Get information about the object's monitor.
 8286         The fields of the <functionlink id="jvmtiMonitorUsage"></functionlink> structure
 8287         are filled in with information about usage of the monitor.
 8288         <p/>






 8289         <b> This function does not support getting information about an object's monitor
 8290             when it is owned by a virtual thread. It also does not support returning a
 8291             reference to virtual threads that are waiting to own a monitor or waiting to
 8292             be notified.
 8293         </b>
 8294           <todo>
 8295             Decide and then clarify suspend requirements.
 8296           </todo>
 8297       </description>
 8298       <origin>jvmdi</origin>
 8299       <capabilities>
 8300         <required id="can_get_monitor_info"></required>
 8301       </capabilities>
 8302       <parameters>
 8303         <param id="object">
 8304           <jobject/>
 8305             <description>
 8306               The object to query.
 8307             </description>
 8308         </param>

10668       </capabilityfield>
10669       <capabilityfield id="can_generate_sampled_object_alloc_events" since="11">
10670         <description>
10671           Can generate sampled allocation events.
10672           If this capability is enabled then the heap sampling method
10673           <functionlink id="SetHeapSamplingInterval"></functionlink> can be
10674           called and <eventlink id="SampledObjectAlloc"></eventlink> events can be generated.
10675         </description>
10676       </capabilityfield>
10677       <capabilityfield id="can_support_virtual_threads" since="21">
10678         <description>
10679           Can support virtual threads.
10680           If this capability is enabled then the following functions can be called:
10681           <functionlink id="SuspendAllVirtualThreads"></functionlink>,
10682           <functionlink id="ResumeAllVirtualThreads"></functionlink>,
10683           and the following events can be enabled:
10684           <eventlink id="VirtualThreadStart"></eventlink>,
10685           <eventlink id="VirtualThreadEnd"></eventlink>.
10686         </description>
10687       </capabilityfield>












10688     </capabilitiestypedef>
10689 
10690     <function id="GetPotentialCapabilities" jkernel="yes" phase="onload" num="140">
10691       <synopsis>Get Potential Capabilities</synopsis>
10692       <description>
10693         Returns via <paramlink id="capabilities_ptr"></paramlink> the <jvmti/>
10694         features that can potentially be possessed by this environment
10695         at this time.
10696         The returned capabilities differ from the complete set of capabilities
10697         implemented by the VM in two cases: another environment possesses
10698         capabilities that can only be possessed by one environment, or the
10699         current <functionlink id="GetPhase">phase</functionlink> is live,
10700         and certain capabilities can only be added during the <code>OnLoad</code> phase.
10701         The <functionlink id="AddCapabilities"></functionlink> function
10702         may be used to set any or all or these capabilities.
10703         Currently possessed capabilities are included.
10704         <p/>
10705         Typically this function is used in the <code>OnLoad</code> function.
10706         Some virtual machines may allow a limited set of capabilities to be
10707         added in the live phase.

13971         </description>
13972       </param>
13973     </parameters>
13974   </event>
13975 
13976   <event label="VM Object Allocation"
13977          id="VMObjectAlloc" const="JVMTI_EVENT_VM_OBJECT_ALLOC" num="84">
13978     <description>
13979       Sent when a method causes the virtual machine to directly allocate an
13980       Object visible to Java programming language code.
13981       Generally object allocation should be detected by instrumenting
13982       the bytecodes of allocating methods.
13983       Object allocation generated in native code by JNI function
13984       calls should be detected using
13985       <internallink id="jniIntercept">JNI function interception</internallink>.
13986       Some methods might not have associated bytecodes and are not
13987       native methods, they instead are executed directly by the
13988       VM. These methods should send this event.
13989       Virtual machines which are incapable of bytecode instrumentation
13990       for some or all of their methods can send this event.
13991 




13992       Note that the <internallink
13993       id="SampledObjectAlloc">SampledObjectAlloc</internallink>
13994       event is triggered on all Java object allocations, including those
13995       caused by bytecode method execution, JNI method execution, and
13996       directly by VM methods.
13997       <p/>
13998       Typical examples where this event might be sent:
13999       <ul>
14000         <li>Reflection -- for example, <code>java.lang.Class.newInstance()</code></li>
14001         <li>Methods not represented by bytecodes -- for example, VM intrinsics and
14002             J2ME preloaded classes</li>
14003       </ul>
14004       Cases where this event would not be generated:
14005       <ul>
14006         <li>Allocation due to bytecodes -- for example, the <code>new</code>
14007             and <code>newarray</code> VM instructions</li>
14008         <li>Allocation due to JNI function calls -- for example,
14009             <code>AllocObject</code></li>
14010         <li>Allocations during VM initialization</li>
14011         <li>VM internal objects</li>
14012       </ul>
14013     </description>
14014     <origin>new</origin>
14015     <capabilities>
14016       <required id="can_generate_vm_object_alloc_events"></required>

14017     </capabilities>
14018     <parameters>
14019       <param id="jni_env">
14020         <outptr>
14021           <struct>JNIEnv</struct>
14022         </outptr>
14023           <description>
14024             The JNI environment of the event (current) thread
14025           </description>
14026       </param>
14027       <param id="thread">
14028         <jthread/>
14029           <description>
14030             Thread allocating the object.
14031           </description>
14032       </param>
14033       <param id="object">
14034         <jobject/>
14035           <description>
14036             JNI local reference to the object that was allocated.


14037           </description>
14038       </param>
14039       <param id="object_klass">
14040         <jclass/>
14041           <description>
14042             JNI local reference to the class of the object.
14043           </description>
14044       </param>
14045       <param id="size">
14046         <jlong/>
14047         <description>
14048             Size of the object (in bytes). See <functionlink id="GetObjectSize"/>.
14049         </description>
14050       </param>
14051     </parameters>
14052   </event>
14053 
14054   <event label="Sampled Object Allocation"
14055     id="SampledObjectAlloc" const="JVMTI_EVENT_SAMPLED_OBJECT_ALLOC" filtered="thread" num="86" since="11">
14056     <description>

14063       When the number of bytes exceeds the sampling interval, it will send another event.
14064       This implies that, on average, one object will be sampled every time a thread has
14065       allocated 512KB bytes since the last sample.
14066       <p/>
14067       Note that the sampler is pseudo-random: it will not sample every 512KB precisely.
14068       The goal of this is to ensure high quality sampling even if allocation is
14069       happening in a fixed pattern (i.e., the same set of objects are being allocated
14070       every 512KB).
14071       <p/>
14072       If another sampling interval is required, the user can call
14073       <functionlink id="SetHeapSamplingInterval"></functionlink> with a strictly positive integer value,
14074       representing the new sampling interval.
14075       <p/>
14076       This event is sent once the sampled allocation has been performed.  It provides the object, stack trace
14077       of the allocation, the thread allocating, the size of allocation, and the object's class.
14078       <p/>
14079       A typical use case of this system is to determine where heap allocations originate.
14080       In conjunction with weak references and the function
14081       <functionlink id="GetStackTrace"></functionlink>, a user can track which objects were allocated from which
14082       stack trace, and which are still live during the execution of the program.




14083     </description>
14084     <origin>new</origin>
14085     <capabilities>
14086       <required id="can_generate_sampled_object_alloc_events"></required>

14087     </capabilities>
14088     <parameters>
14089       <param id="jni_env">
14090         <outptr>
14091           <struct>JNIEnv</struct>
14092         </outptr>
14093         <description>
14094           The JNI environment of the event (current) thread.
14095         </description>
14096       </param>
14097       <param id="thread">
14098         <jthread/>
14099         <description>
14100           Thread allocating the object.
14101         </description>
14102       </param>
14103       <param id="object">
14104         <jobject/>
14105         <description>
14106           JNI local reference to the object that was allocated.


14107         </description>
14108       </param>
14109       <param id="object_klass">
14110         <jclass/>
14111         <description>
14112           JNI local reference to the class of the object
14113         </description>
14114       </param>
14115       <param id="size">
14116         <jlong/>
14117         <description>
14118           Size of the object (in bytes). See <functionlink id="GetObjectSize"/>.
14119         </description>
14120       </param>
14121     </parameters>
14122   </event>
14123 
14124   <event label="Object Free"
14125         id="ObjectFree" const="JVMTI_EVENT_OBJECT_FREE" num="83">
14126     <description>
14127       An Object Free event is sent when the garbage collector frees an object.
14128       Events are only sent for tagged objects--see
14129       <internallink id="Heap">heap functions</internallink>.
14130       <p/>




14131       The event handler must not use JNI functions and
14132       must not use <jvmti/> functions except those which
14133       specifically allow such use (see the raw monitor, memory management,
14134       and environment local storage functions).
14135     </description>
14136     <origin>new</origin>
14137     <capabilities>
14138       <required id="can_generate_object_free_events"></required>
14139     </capabilities>
14140     <parameters>
14141       <param id="tag">
14142         <jlong/>
14143         <description>
14144           The freed object's tag
14145         </description>
14146       </param>
14147     </parameters>
14148   </event>
14149 
14150   <event label="Garbage Collection Start"

15453       implementation may choose to not call the Agent_OnUnload function
15454       if the Agent_OnAttach/Agent_OnAttach_L function reported an error.
15455   </change>
15456   <change date="8 June 2021" version="17.0.0">
15457       Minor update to deprecate Heap functions 1.0.
15458   </change>
15459   <change date="27 April 2022" version="19.0.0">
15460       Support for virtual threads (Preview):
15461       Add new capability: can_support_virtual_threads.
15462       Add new functions: SuspendAllVirtualThreads, ResumeAllVirtualThreads.
15463       Add new event types: JVMTI_EVENT_VIRTUAL_THREAD_START, JVMTI_EVENT_VIRTUAL_THREAD_END.
15464       Add new error code: JVMTI_ERROR_UNSUPPORTED_OPERATION.
15465   </change>
15466   <change date="7 June 2023" version="21.0.0">
15467       Virtual threads finalized to be a permanent feature.
15468       Agent start-up in the live phase now specified to print a warning.
15469   </change>
15470   <change date="10 January 2025" version="25.0.0">
15471       Add new function ClearAllFramePops. Needed to speedup debugger single stepping.
15472   </change>






15473 </changehistory>
15474 
15475 </specification>
15476 <!-- Keep this comment at the end of the file
15477 Local variables:
15478 mode: sgml
15479 sgml-omittag:t
15480 sgml-shorttag:t
15481 sgml-namecase-general:t
15482 sgml-general-insert-case:lower
15483 sgml-minimize-attributes:nil
15484 sgml-always-quote-attributes:t
15485 sgml-indent-step:2
15486 sgml-indent-data:t
15487 sgml-parent-document:nil
15488 sgml-exposed-tags:nil
15489 sgml-local-catalogs:nil
15490 sgml-local-ecat-files:nil
15491 End:
15492 -->

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <?xml-stylesheet type="text/xsl" href="jvmti.xsl"?>
    3 <!--
    4  Copyright (c) 2002, 2026, Oracle and/or its affiliates. All rights reserved.
    5  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    6 
    7  This code is free software; you can redistribute it and/or modify it
    8  under the terms of the GNU General Public License version 2 only, as
    9  published by the Free Software Foundation.
   10 
   11  This code is distributed in the hope that it will be useful, but WITHOUT
   12  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   13  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   14  version 2 for more details (a copy is included in the LICENSE file that
   15  accompanied this code).
   16 
   17  You should have received a copy of the GNU General Public License version
   18  2 along with this work; if not, write to the Free Software Foundation,
   19  Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   20 
   21  Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   22  or visit www.oracle.com if you need additional information or have any
   23  questions.
   24 -->

 3359       <errors>
 3360         <error id="JVMTI_ERROR_OPAQUE_FRAME">
 3361           The implementation is unable to force the current frame to return
 3362           (e.g. current frame is executing a native method).
 3363         </error>
 3364         <error id="JVMTI_ERROR_TYPE_MISMATCH">
 3365           The result type of the called method is not <code>double</code>.
 3366         </error>
 3367         <error id="JVMTI_ERROR_THREAD_NOT_SUSPENDED">
 3368           Thread was not suspended and was not the current thread.
 3369         </error>
 3370         <error id="JVMTI_ERROR_NO_MORE_FRAMES">
 3371           There are no frames on the call stack.
 3372         </error>
 3373       </errors>
 3374     </function>
 3375 
 3376     <function id="ForceEarlyReturnVoid" num="86" since="1.1">
 3377       <synopsis>Force Early Return - Void</synopsis>
 3378       <description>
 3379         This function can be used to return from a method with a return type
 3380         of <code>void</code>.
 3381         A constructor is a special method named <code>&lt;init&gt;</code> with
 3382         a return type of <code>void</code>. A class initializer is a special
 3383         method named named <code>&lt;clinit&gt;</code> with a return type of
 3384         <code>void</code>.
 3385         <p/>
 3386         When preview features are enabled, this function can not be used to return
 3387         early from the constructor of a value class.
 3388       </description>
 3389       <origin>new</origin>
 3390       <capabilities>
 3391         <required id="can_force_early_return"></required>
 3392       </capabilities>
 3393       <parameters>
 3394         <param id="thread">
 3395           <jthread null="current" impl="noconvert"/>
 3396           <description>
 3397             The thread whose current frame is to return early.
 3398           </description>
 3399         </param>
 3400       </parameters>
 3401       <errors>
 3402         <error id="JVMTI_ERROR_OPAQUE_FRAME">
 3403           The implementation is unable to force the current frame to return
 3404           (e.g. current frame is executing a native method or if preview features
 3405            are enabled, the current frame is the constructor for a value class)
 3406         </error>
 3407         <error id="JVMTI_ERROR_TYPE_MISMATCH">
 3408           The called method has a result type.
 3409         </error>
 3410         <error id="JVMTI_ERROR_THREAD_NOT_SUSPENDED">
 3411           Thread was not suspended and was not the current thread.
 3412         </error>
 3413         <error id="JVMTI_ERROR_NO_MORE_FRAMES">
 3414           There are no frames on the call stack.
 3415         </error>
 3416       </errors>
 3417     </function>
 3418 
 3419   </category>
 3420 
 3421   <category id="Heap" label="Heap">
 3422     <intro>
 3423       These functions are used to analyze the heap.
 3424       Functionality includes the ability to view the objects in the
 3425       heap and to tag these objects.
 3426     </intro>
 3427 
 3428     <intro id="objectTags" label="Object Tags">
 3429       A <i>tag</i> is a value associated with an object.
 3430       Tags are explicitly set by the agent using the
 3431       <functionlink id="SetTag"></functionlink> function or by
 3432       callback functions such as <functionlink id="jvmtiHeapIterationCallback"/>.
 3433       <p/>
 3434       Tags are local to the environment; that is, the tags of one
 3435       environment are not visible in another.
 3436       <p/>
 3437       Tags are <code>jlong</code> values which can be used
 3438       simply to mark an object or to store a pointer to more detailed
 3439       information.  Objects which have not been tagged have a
 3440       tag of zero.
 3441       Setting a tag to zero makes the object untagged.
 3442       <p/>
 3443       If the <eventlink id="ObjectFree"/> event is enabled then an Object Free
 3444       event is sent for tagged objects when the garbage collector frees the object.
 3445       When preview features are enabled, the Object Free event is only sent for tagged
 3446       <externallink id="jni/functions.html#hasidentity">identity objects</externallink>.
 3447       <b>The event is not sent for tagged values objects.</b>
 3448     </intro>
 3449 
 3450     <intro id="heapCallbacks" label="Heap Callback Functions">
 3451         Heap functions which iterate through the heap and recursively
 3452         follow object references use agent supplied callback functions
 3453         to deliver the information.
 3454         <p/>
 3455         These heap callback functions must adhere to the following restrictions --
 3456         These callbacks must not use JNI functions.
 3457         These callbacks must not use <jvmti/> functions except
 3458         <i>callback safe</i> functions which
 3459         specifically allow such use (see the raw monitor, memory management,
 3460         and environment local storage functions).
 3461         <p/>
 3462         An implementation may invoke a callback on an internal thread or
 3463         the thread which called the iteration function.
 3464         Heap callbacks are single threaded -- no more than one callback will
 3465         be invoked at a time.
 3466         <p/>
 3467         The Heap Filter Flags can be used to prevent reporting

 5856       These functions are used to retrieve or set the value of a local variable.
 5857       The variable is identified by the depth of the frame containing its
 5858       value and the variable's slot number within that frame.
 5859       The mapping of variables to
 5860       slot numbers can be obtained with the function
 5861       <functionlink id="GetLocalVariableTable"></functionlink>.
 5862       <p/>
 5863       The <code>GetLocalXXX</code> functions may be used to retrieve the value of
 5864       a local variable contained in the frame of a virtual thread.
 5865       The <code>SetLocalXXX</code> functions may be used to set the value of a
 5866       local variable in the topmost frame of a virtual thread suspended at an event.
 5867       An implementation may support setting locals in other cases.
 5868     </intro>
 5869 
 5870     <function id="GetLocalObject" num="21">
 5871       <synopsis>Get Local Variable - Object</synopsis>
 5872       <description>
 5873         This function can be used to retrieve the value of a local
 5874         variable whose type is <code>Object</code> or a subclass of <code>Object</code>.
 5875         <p/>
 5876         When preview features are enabled, if the local is the "<code>this</code>"
 5877         object and "<code>this</code>" is a value object under construction, the
 5878         function retrieves a snapshot of the "<code>this</code>" object representing
 5879         the value object's state at the point the snapshot is taken.
 5880         <p/>
 5881         The specified thread must be suspended or must be the current thread.
 5882       </description>
 5883       <origin>jvmdi</origin>
 5884       <capabilities>
 5885         <required id="can_access_local_variables"></required>
 5886       </capabilities>
 5887       <parameters>
 5888         <param id="thread">
 5889           <jthread null="current" frame="frame" impl="noconvert"/>
 5890           <description>
 5891             The thread of the frame containing the variable's value.
 5892           </description>
 5893         </param>
 5894         <param id="depth">
 5895           <jframeID thread="thread"/>
 5896           <description>
 5897             The depth of the frame containing the variable's value.
 5898           </description>
 5899         </param>
 5900         <param id="slot">
 5901           <jint/>
 5902           <description>
 5903             The variable's slot number.
 5904           </description>
 5905         </param>
 5906         <param id="value_ptr">
 5907           <outptr><jobject/></outptr>
 5908             <description>
 5909               On return, points to the variable's value.
 5910               When preview features are enabled, if the local is the "<code>this</code>"
 5911               object and "<code>this</code>" is a value object under construction,
 5912               <code>value_ptr</code> will point to a snapshot of the "<code>this</code>"
 5913               object representing the value object's state at the point the snapshot
 5914               is taken.
 5915             </description>
 5916         </param>
 5917       </parameters>
 5918       <errors>
 5919         <error id="JVMTI_ERROR_INVALID_SLOT">
 5920           Invalid <code>slot</code>.
 5921         </error>
 5922         <error id="JVMTI_ERROR_TYPE_MISMATCH">
 5923           The variable type is not
 5924           <code>Object</code> or a subclass of <code>Object</code>.
 5925         </error>
 5926         <error id="JVMTI_ERROR_OPAQUE_FRAME">
 5927           The implementation is unable to get the frame locals
 5928           (e.g. the frame at <code>depth</code> is executing a native method).
 5929         </error>
 5930         <error id="JVMTI_ERROR_THREAD_NOT_SUSPENDED">
 5931           Thread was not suspended and was not the current thread.
 5932         </error>
 5933       </errors>
 5934     </function>
 5935 
 5936     <function id="GetLocalInstance" num="155" since="1.2">
 5937       <synopsis>Get Local Instance</synopsis>
 5938       <description>
 5939         This function can be used to retrieve the value of the local object
 5940         variable at slot 0 (the "<code>this</code>" object) from non-static
 5941         frames.  This function can retrieve the "<code>this</code>" object from
 5942         native method frames, whereas <code>GetLocalObject()</code> would
 5943         return <code>JVMTI_ERROR_OPAQUE_FRAME</code> in those cases.
 5944         <p/>
 5945         When preview features are enabled and the "<code>this</code>" object is
 5946         a value object under construction, the function retrieves a snapshot of the
 5947         "<code>this</code>" object that represents the value object's state at
 5948         the point the snapshot is taken.
 5949         <p/>
 5950         The specified thread must be suspended or must be the current thread.
 5951       </description>
 5952       <origin>new</origin>
 5953       <capabilities>
 5954         <required id="can_access_local_variables"></required>
 5955       </capabilities>
 5956       <parameters>
 5957         <param id="thread">
 5958           <jthread null="current" frame="frame" impl="noconvert"/>
 5959           <description>
 5960             The thread of the frame containing the variable's value.
 5961           </description>
 5962         </param>
 5963         <param id="depth">
 5964           <jframeID thread="thread"/>
 5965           <description>
 5966             The depth of the frame containing the variable's value.
 5967           </description>
 5968         </param>
 5969         <param id="value_ptr">
 5970           <outptr><jobject/></outptr>
 5971             <description>
 5972               On return, points to the variable's value.
 5973               When preview features are enabled, and the "<code>this</code>" object is
 5974               a value object under construction, <code>value_ptr</code> will point to
 5975               a snapshot of the "<code>this</code>" object representing the value
 5976               object's state at the point the snapshot is taken.
 5977             </description>
 5978         </param>
 5979       </parameters>
 5980       <errors>
 5981         <error id="JVMTI_ERROR_INVALID_SLOT">
 5982           If the specified frame is a static method frame.
 5983         </error>
 5984         <error id="JVMTI_ERROR_THREAD_NOT_SUSPENDED">
 5985           Thread was not suspended and was not the current thread.
 5986         </error>
 5987       </errors>
 5988     </function>
 5989     <function id="GetLocalInt" num="22">
 5990       <synopsis>Get Local Variable - Int</synopsis>
 5991       <description>
 5992         This function can be used to retrieve the value of a local
 5993         variable whose type is <code>int</code>,
 5994         <code>short</code>, <code>char</code>, <code>byte</code>, or
 5995         <code>boolean</code>.
 5996         <p/>

 7368         </param>
 7369         <param id="source_name_ptr">
 7370           <allocbuf><char/></allocbuf>
 7371           <description>
 7372             On return, points to the class's source file name, encoded as a
 7373             <internallink id="mUTF">modified UTF-8</internallink> string.
 7374           </description>
 7375         </param>
 7376       </parameters>
 7377       <errors>
 7378         <error id="JVMTI_ERROR_ABSENT_INFORMATION">
 7379           Class information does not include a source file name. This includes
 7380           cases where the class is an array class or primitive class.
 7381         </error>
 7382       </errors>
 7383     </function>
 7384 
 7385     <function id="GetClassModifiers" phase="start" num="51">
 7386       <synopsis>Get Class Modifiers</synopsis>
 7387       <description>
 7388         For the class indicated by <code>klass</code>, return the Java language
 7389         modifiers and class/interface properties of the corresponding
 7390         <code>java.lang.Class</code> object, via <code>modifiers_ptr</code>.
 7391         <p/>
 7392         The modifiers are encoded as a mask of access-flag bit values defined in
 7393         <vmspec chapter="4"/>. The returned value is not necessarily the value of the
 7394         access_flags item in the class file of <code>klass</code>.
 7395         In particular, for member, local, or anonymous classes and interfaces, the result
 7396         may include modifiers represented by access flags from the <code>InnerClasses</code>
 7397         attribute, such as <code>ACC_STATIC</code>.
 7398         <p/>
 7399         The modifiers include, as applicable, the Java Virtual Machine constants for
 7400         public, private, protected, final, static, abstract, and interface, as well as
 7401         access-flag bit values for other class/interface properties encoded in the
 7402         result of invoking <code>java.lang.Class.getModifiers()</code> on the
 7403         corresponding <code>java.lang.Class</code> object.
 7404         <p/>
 7405         If <code>klass</code> is an array class, then its public, private, and
 7406         protected modifiers are the same as those of its component type. For arrays of
 7407         primitives, this component type is represented by one of the primitive
 7408         classes, such as <code>java.lang.Integer.TYPE</code>. For array classes, the
 7409         abstract and final modifiers are set, and the interface modifier is not set.
 7410         <p/>
 7411         If <code>klass</code> is a primitive type or void, then its public, abstract,
 7412         and final modifiers are always set, and its protected, private, and interface
 7413         modifiers are never set.
 7414         <p/>
 7415         When preview features are enabled, the <code>ACC_IDENTITY</code> access flag
 7416         is set if and only if <code>klass</code> is an identity class or an array class.
 7417         <p/>
 7418         When preview features are disabled, the <code>ACC_SUPER</code> access flag may be
 7419         set only if <code>klass</code> is not a primitive type or void. The flag has no
 7420         effective meaning.
 7421       </description>
 7422       <origin>jvmdi</origin>
 7423       <capabilities>
 7424       </capabilities>
 7425       <parameters>
 7426         <param id="klass">
 7427           <jclass/>
 7428             <description>
 7429               The class to query.
 7430             </description>
 7431         </param>
 7432         <param id="modifiers_ptr">
 7433           <outptr><jint/></outptr>
 7434           <description>
 7435             On return, points to the modifiers of this class.
 7436 
 7437           </description>
 7438         </param>
 7439       </parameters>
 7440       <errors>
 7441       </errors>
 7442     </function>
 7443 
 7444     <function id="GetClassMethods" phase="start" num="52">
 7445       <synopsis>Get Class Methods</synopsis>
 7446       <description>
 7447         For the class indicated by <code>klass</code>, return a count of
 7448         methods via <code>method_count_ptr</code> and a list of
 7449         method IDs via <code>methods_ptr</code>. The method list contains
 7450         constructors and static initializers as well as true methods.
 7451         Only directly declared methods are returned (not inherited methods).
 7452         An empty method list is returned for array classes and primitive classes
 7453         (for example, <code>java.lang.Integer.TYPE</code>).
 7454       </description>
 7455       <origin>jvmdi</origin>

 8318         <field id="notify_waiter_count">
 8319           <jint/>
 8320           <description>
 8321             The number of platform threads waiting to own this monitor, or <code>0</code>
 8322             if only virtual threads are waiting to be notified or no threads are waiting
 8323             to be notified
 8324           </description>
 8325         </field>
 8326         <field id="notify_waiters">
 8327           <allocfieldbuf><jthread/></allocfieldbuf>
 8328             <description>
 8329               The <code>notify_waiter_count</code> platform threads waiting to be notified
 8330             </description>
 8331         </field>
 8332       </typedef>
 8333       <description>
 8334         Get information about the object's monitor.
 8335         The fields of the <functionlink id="jvmtiMonitorUsage"></functionlink> structure
 8336         are filled in with information about usage of the monitor.
 8337         <p/>
 8338         When preview features are enabled, the object to query may be a value object.
 8339         It is not possible to synchronize on a value object, so there is no monitor
 8340         usage information to return. The fields of the returned
 8341         <functionlink id="jvmtiMonitorUsage"></functionlink> structure will always
 8342         be filled in with null values and zeros.
 8343         <p/>
 8344         <b> This function does not support getting information about an object's monitor
 8345             when it is owned by a virtual thread. It also does not support returning a
 8346             reference to virtual threads that are waiting to own a monitor or waiting to
 8347             be notified.
 8348         </b>
 8349           <todo>
 8350             Decide and then clarify suspend requirements.
 8351           </todo>
 8352       </description>
 8353       <origin>jvmdi</origin>
 8354       <capabilities>
 8355         <required id="can_get_monitor_info"></required>
 8356       </capabilities>
 8357       <parameters>
 8358         <param id="object">
 8359           <jobject/>
 8360             <description>
 8361               The object to query.
 8362             </description>
 8363         </param>

10723       </capabilityfield>
10724       <capabilityfield id="can_generate_sampled_object_alloc_events" since="11">
10725         <description>
10726           Can generate sampled allocation events.
10727           If this capability is enabled then the heap sampling method
10728           <functionlink id="SetHeapSamplingInterval"></functionlink> can be
10729           called and <eventlink id="SampledObjectAlloc"></eventlink> events can be generated.
10730         </description>
10731       </capabilityfield>
10732       <capabilityfield id="can_support_virtual_threads" since="21">
10733         <description>
10734           Can support virtual threads.
10735           If this capability is enabled then the following functions can be called:
10736           <functionlink id="SuspendAllVirtualThreads"></functionlink>,
10737           <functionlink id="ResumeAllVirtualThreads"></functionlink>,
10738           and the following events can be enabled:
10739           <eventlink id="VirtualThreadStart"></eventlink>,
10740           <eventlink id="VirtualThreadEnd"></eventlink>.
10741         </description>
10742       </capabilityfield>
10743       <capabilityfield id="can_support_value_objects" since="28">
10744         <description>
10745           Can support value objects.
10746           When preview features are enabled and this capability is enabled, then
10747           events are sent for value objects when the following two events are enabled:
10748           <eventlink id="VMObjectAlloc"></eventlink>,
10749           <eventlink id="SampledObjectAlloc"></eventlink>.
10750           <b> can_support_value_objects is a preview API of the Java platform. </b>
10751           <i>Preview features may be removed in a future release, or upgraded to
10752           permanent features of the Java platform.</i> 
10753         </description>
10754       </capabilityfield>
10755     </capabilitiestypedef>
10756 
10757     <function id="GetPotentialCapabilities" jkernel="yes" phase="onload" num="140">
10758       <synopsis>Get Potential Capabilities</synopsis>
10759       <description>
10760         Returns via <paramlink id="capabilities_ptr"></paramlink> the <jvmti/>
10761         features that can potentially be possessed by this environment
10762         at this time.
10763         The returned capabilities differ from the complete set of capabilities
10764         implemented by the VM in two cases: another environment possesses
10765         capabilities that can only be possessed by one environment, or the
10766         current <functionlink id="GetPhase">phase</functionlink> is live,
10767         and certain capabilities can only be added during the <code>OnLoad</code> phase.
10768         The <functionlink id="AddCapabilities"></functionlink> function
10769         may be used to set any or all or these capabilities.
10770         Currently possessed capabilities are included.
10771         <p/>
10772         Typically this function is used in the <code>OnLoad</code> function.
10773         Some virtual machines may allow a limited set of capabilities to be
10774         added in the live phase.

14038         </description>
14039       </param>
14040     </parameters>
14041   </event>
14042 
14043   <event label="VM Object Allocation"
14044          id="VMObjectAlloc" const="JVMTI_EVENT_VM_OBJECT_ALLOC" num="84">
14045     <description>
14046       Sent when a method causes the virtual machine to directly allocate an
14047       Object visible to Java programming language code.
14048       Generally object allocation should be detected by instrumenting
14049       the bytecodes of allocating methods.
14050       Object allocation generated in native code by JNI function
14051       calls should be detected using
14052       <internallink id="jniIntercept">JNI function interception</internallink>.
14053       Some methods might not have associated bytecodes and are not
14054       native methods, they instead are executed directly by the
14055       VM. These methods should send this event.
14056       Virtual machines which are incapable of bytecode instrumentation
14057       for some or all of their methods can send this event.
14058       <p/>
14059       When preview features are enabled and the capability <code>can_support_value_objects</code>
14060       is enabled, this event is sent for the value object allocations.
14061       <code>null</code> is passed for the <paramlink id="object"></paramlink> parameter in such cases.
14062       <p/>
14063       Note that the <internallink
14064       id="SampledObjectAlloc">SampledObjectAlloc</internallink>
14065       event is triggered on all Java object allocations, including those
14066       caused by bytecode method execution, JNI method execution, and
14067       directly by VM methods.
14068       <p/>
14069       Typical examples where this event might be sent:
14070       <ul>
14071         <li>Reflection -- for example, <code>java.lang.Class.newInstance()</code></li>
14072         <li>Methods not represented by bytecodes -- for example, VM intrinsics and
14073             J2ME preloaded classes</li>
14074       </ul>
14075       Cases where this event would not be generated:
14076       <ul>
14077         <li>Allocation due to bytecodes -- for example, the <code>new</code>
14078             and <code>newarray</code> VM instructions</li>
14079         <li>Allocation due to JNI function calls -- for example,
14080             <code>AllocObject</code></li>
14081         <li>Allocations during VM initialization</li>
14082         <li>VM internal objects</li>
14083       </ul>
14084     </description>
14085     <origin>new</origin>
14086     <capabilities>
14087       <required id="can_generate_vm_object_alloc_events"></required>
14088       <capability id="can_support_value_objects"></capability>
14089     </capabilities>
14090     <parameters>
14091       <param id="jni_env">
14092         <outptr>
14093           <struct>JNIEnv</struct>
14094         </outptr>
14095           <description>
14096             The JNI environment of the event (current) thread
14097           </description>
14098       </param>
14099       <param id="thread">
14100         <jthread/>
14101           <description>
14102             Thread allocating the object.
14103           </description>
14104       </param>
14105       <param id="object">
14106         <jobject/>
14107           <description>
14108             JNI local reference to the object that was allocated.
14109             Null when preview features are enabled, the capability <code>can_support_value_objects</code>
14110             is enabled, and the allocated object has no identity.
14111           </description>
14112       </param>
14113       <param id="object_klass">
14114         <jclass/>
14115           <description>
14116             JNI local reference to the class of the object.
14117           </description>
14118       </param>
14119       <param id="size">
14120         <jlong/>
14121         <description>
14122             Size of the object (in bytes). See <functionlink id="GetObjectSize"/>.
14123         </description>
14124       </param>
14125     </parameters>
14126   </event>
14127 
14128   <event label="Sampled Object Allocation"
14129     id="SampledObjectAlloc" const="JVMTI_EVENT_SAMPLED_OBJECT_ALLOC" filtered="thread" num="86" since="11">
14130     <description>

14137       When the number of bytes exceeds the sampling interval, it will send another event.
14138       This implies that, on average, one object will be sampled every time a thread has
14139       allocated 512KB bytes since the last sample.
14140       <p/>
14141       Note that the sampler is pseudo-random: it will not sample every 512KB precisely.
14142       The goal of this is to ensure high quality sampling even if allocation is
14143       happening in a fixed pattern (i.e., the same set of objects are being allocated
14144       every 512KB).
14145       <p/>
14146       If another sampling interval is required, the user can call
14147       <functionlink id="SetHeapSamplingInterval"></functionlink> with a strictly positive integer value,
14148       representing the new sampling interval.
14149       <p/>
14150       This event is sent once the sampled allocation has been performed.  It provides the object, stack trace
14151       of the allocation, the thread allocating, the size of allocation, and the object's class.
14152       <p/>
14153       A typical use case of this system is to determine where heap allocations originate.
14154       In conjunction with weak references and the function
14155       <functionlink id="GetStackTrace"></functionlink>, a user can track which objects were allocated from which
14156       stack trace, and which are still live during the execution of the program.
14157       <p/>
14158       When preview features are enabled and the capability <code>can_support_value_objects</code>
14159       is enabled, this event is sent for the allocated objects that have no identity.
14160       <code>null</code> is passed for the <paramlink id="object"></paramlink> parameter in such cases.
14161     </description>
14162     <origin>new</origin>
14163     <capabilities>
14164       <required id="can_generate_sampled_object_alloc_events"></required>
14165       <capability id="can_support_value_objects"></capability>
14166     </capabilities>
14167     <parameters>
14168       <param id="jni_env">
14169         <outptr>
14170           <struct>JNIEnv</struct>
14171         </outptr>
14172         <description>
14173           The JNI environment of the event (current) thread.
14174         </description>
14175       </param>
14176       <param id="thread">
14177         <jthread/>
14178         <description>
14179           Thread allocating the object.
14180         </description>
14181       </param>
14182       <param id="object">
14183         <jobject/>
14184         <description>
14185           JNI local reference to the object that was allocated.
14186           Null when preview features are enabled, the capability <code>can_support_value_objects</code>
14187           is enabled, and the allocated object has no identity.
14188         </description>
14189       </param>
14190       <param id="object_klass">
14191         <jclass/>
14192         <description>
14193           JNI local reference to the class of the object
14194         </description>
14195       </param>
14196       <param id="size">
14197         <jlong/>
14198         <description>
14199           Size of the object (in bytes). See <functionlink id="GetObjectSize"/>.
14200         </description>
14201       </param>
14202     </parameters>
14203   </event>
14204 
14205   <event label="Object Free"
14206         id="ObjectFree" const="JVMTI_EVENT_OBJECT_FREE" num="83">
14207     <description>
14208       An Object Free event is sent when the garbage collector frees an object.
14209       Events are only sent for tagged objects--see
14210       <internallink id="Heap">heap functions</internallink>.
14211       <p/>
14212       When preview features are enabled, the Object Free event is only sent for tagged
14213       <externallink id="jni/functions.html#hasidentity">identity objects</externallink>.
14214       <b>The event is not sent for tagged values objects.</b>
14215       <p/>
14216       The event handler must not use JNI functions and
14217       must not use <jvmti/> functions except those which
14218       specifically allow such use (see the raw monitor, memory management,
14219       and environment local storage functions).
14220     </description>
14221     <origin>new</origin>
14222     <capabilities>
14223       <required id="can_generate_object_free_events"></required>
14224     </capabilities>
14225     <parameters>
14226       <param id="tag">
14227         <jlong/>
14228         <description>
14229           The freed object's tag
14230         </description>
14231       </param>
14232     </parameters>
14233   </event>
14234 
14235   <event label="Garbage Collection Start"

15538       implementation may choose to not call the Agent_OnUnload function
15539       if the Agent_OnAttach/Agent_OnAttach_L function reported an error.
15540   </change>
15541   <change date="8 June 2021" version="17.0.0">
15542       Minor update to deprecate Heap functions 1.0.
15543   </change>
15544   <change date="27 April 2022" version="19.0.0">
15545       Support for virtual threads (Preview):
15546       Add new capability: can_support_virtual_threads.
15547       Add new functions: SuspendAllVirtualThreads, ResumeAllVirtualThreads.
15548       Add new event types: JVMTI_EVENT_VIRTUAL_THREAD_START, JVMTI_EVENT_VIRTUAL_THREAD_END.
15549       Add new error code: JVMTI_ERROR_UNSUPPORTED_OPERATION.
15550   </change>
15551   <change date="7 June 2023" version="21.0.0">
15552       Virtual threads finalized to be a permanent feature.
15553       Agent start-up in the live phase now specified to print a warning.
15554   </change>
15555   <change date="10 January 2025" version="25.0.0">
15556       Add new function ClearAllFramePops. Needed to speedup debugger single stepping.
15557   </change>
15558   <change date="30 June 2026" version="28.0.0">
15559       Support for value objects (Preview):
15560       Add new capability: can_support_value_objects which enables
15561       the following events for value objects:
15562       JVMTI_EVENT_VM_OBJECT_ALLOC, JVMTI_EVENT_SAMPLED_OBJECT_ALLOC.
15563   </change>
15564 </changehistory>
15565 
15566 </specification>
15567 <!-- Keep this comment at the end of the file
15568 Local variables:
15569 mode: sgml
15570 sgml-omittag:t
15571 sgml-shorttag:t
15572 sgml-namecase-general:t
15573 sgml-general-insert-case:lower
15574 sgml-minimize-attributes:nil
15575 sgml-always-quote-attributes:t
15576 sgml-indent-step:2
15577 sgml-indent-data:t
15578 sgml-parent-document:nil
15579 sgml-exposed-tags:nil
15580 sgml-local-catalogs:nil
15581 sgml-local-ecat-files:nil
15582 End:
15583 -->
< prev index next >