< prev index next > src/hotspot/share/prims/jvmtiManageCapabilities.cpp
Print this page
/*
- * 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.
// 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");
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;
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();
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);
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);
}
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 >