< prev index next >

src/hotspot/share/prims/jvmtiManageCapabilities.cpp

Print this page
@@ -1,7 +1,7 @@
  /*
-  * Copyright (c) 2003, 2025, Oracle and/or its affiliates. All rights reserved.
+  * Copyright (c) 2003, 2026, Oracle and/or its affiliates. All rights reserved.
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   *
   * This code is free software; you can redistribute it and/or modify it
   * under the terms of the GNU General Public License version 2 only, as
   * published by the Free Software Foundation.

@@ -54,10 +54,11 @@
  
    // all capabilities ever acquired
  jvmtiCapabilities JvmtiManageCapabilities::acquired_capabilities;
  
  int JvmtiManageCapabilities::_can_support_virtual_threads_count = 0;
+ int JvmtiManageCapabilities::_can_support_value_objects_count = 0;
  
  Mutex* JvmtiManageCapabilities::_capabilities_lock = nullptr;
  
  void JvmtiManageCapabilities::initialize() {
    _capabilities_lock = new Mutex(Mutex::nosafepoint, "Capabilities_lock");

@@ -101,10 +102,11 @@
    jc.can_tag_objects = 1;
    jc.can_generate_object_free_events = 1;
    jc.can_generate_resource_exhaustion_heap_events = 1;
    jc.can_generate_resource_exhaustion_threads_events = 1;
    jc.can_support_virtual_threads = 1;
+   jc.can_support_value_objects = 1;
    return jc;
  }
  
  jvmtiCapabilities JvmtiManageCapabilities::init_onload_capabilities() {
    jvmtiCapabilities jc;

@@ -275,10 +277,13 @@
    exclude(&onload_solo_remaining_capabilities, desired, &onload_solo_remaining_capabilities);
  
    if (desired->can_support_virtual_threads != 0 && current->can_support_virtual_threads == 0) {
      _can_support_virtual_threads_count++;
    }
+   if (desired->can_support_value_objects != 0 && current->can_support_value_objects == 0) {
+     _can_support_value_objects_count++;
+   }
  
    // return the result
    either(current, desired, result);
  
    update();

@@ -307,10 +312,15 @@
    if (to_trash.can_support_virtual_threads != 0) {
      assert(current->can_support_virtual_threads != 0, "sanity check");
      assert(_can_support_virtual_threads_count > 0, "sanity check");
      _can_support_virtual_threads_count--;
    }
+   if (to_trash.can_support_value_objects != 0) {
+     assert(current->can_support_value_objects != 0, "sanity check");
+     assert(_can_support_value_objects_count > 0, "sanity check");
+     _can_support_value_objects_count--;
+   }
  
    update();
  
    // return the result
    exclude(current, unwanted, result);

@@ -391,10 +401,11 @@
                                          avail.can_generate_frame_pop_events);
    JvmtiExport::set_can_post_frame_pop(avail.can_generate_frame_pop_events);
    JvmtiExport::set_can_pop_frame(avail.can_pop_frame);
    JvmtiExport::set_can_force_early_return(avail.can_force_early_return);
    JvmtiExport::set_can_support_virtual_threads(_can_support_virtual_threads_count != 0);
+   JvmtiExport::set_can_support_value_objects(_can_support_value_objects_count != 0);
    JvmtiExport::set_should_clean_up_heap_objects(avail.can_generate_breakpoint_events);
    JvmtiExport::set_can_get_owned_monitor_info(avail.can_get_owned_monitor_info ||
                                                avail.can_get_owned_monitor_stack_depth_info);
  }
  

@@ -486,8 +497,10 @@
      log_trace(jvmti)("can_generate_early_vmstart");
    if (cap->can_generate_early_class_hook_events)
      log_trace(jvmti)("can_generate_early_class_hook_events");
    if (cap->can_support_virtual_threads)
      log_trace(jvmti)("can_support_virtual_threads");
+   if (cap->can_support_value_objects)
+     log_trace(jvmti)("can_support_value_objects");
  }
  
  #endif
< prev index next >