pub struct VmCapabilities {
pub can_watch_field_modification: bool,
pub can_watch_field_access: bool,
pub can_get_bytecodes: bool,
pub can_get_synthetic_attribute: bool,
pub can_get_owned_monitor_info: bool,
pub can_get_current_contended_monitor: bool,
pub can_get_monitor_info: bool,
}Expand description
What the target JVM says it supports (VirtualMachine.Capabilities).
The seven original capabilities, which is all this command reports. The newer bits — including the
ones hot reload depends on — live in VmCapabilitiesNew behind CapabilitiesNew (command 17);
until SWAP-1 (#58) nothing here needed them, and this comment said so. Note that JDI’s
canGetMethodReturnValues is not a capability bit at all — it is a JDWP version check (≥ 1.6),
so get_version answers that one.
Worth asking before a feature that depends on one: a JVM without the capability answers
NOT_IMPLEMENTED (99) to the actual command, and “this JVM can’t tell us” is a far more useful
report than a bare error code.
Two features deliberately don’t ask, and it is worth knowing which, so the sentence above is not
read as a guarantee it does not make: force_early_return
(canForceEarlyReturn) and
get_source_debug_extension
(canGetSourceDebugExtension) both issue their command without checking first, and neither bit is
decoded — VmCapabilitiesNew reads through position 18 and names five of those, so 13
(canGetSourceDebugExtension) is read past and 21 (canForceEarlyReturn) is never reached. Both then
surface the raw
NOT_IMPLEMENTED (99), which is precisely the bare error code this rule exists to improve on.
Accepted for now rather than overlooked: adding a bit nothing consults is the mistake IDSizes was
deleted for (CLEAN-1, #27), so the bits arrive with the check, not before it. Measured values for the
whole CapabilitiesNew vector on Temurin 17.0.20 are in docs/heap-query-measurements.md.
Fields§
§can_watch_field_modification: bool§can_watch_field_access: bool§can_get_bytecodes: bool§can_get_synthetic_attribute: bool§can_get_owned_monitor_info: boolWhether owned_monitors will work.
can_get_current_contended_monitor: boolWhether current_contended_monitor will work.
can_get_monitor_info: boolTrait Implementations§
Source§impl Clone for VmCapabilities
impl Clone for VmCapabilities
Source§fn clone(&self) -> VmCapabilities
fn clone(&self) -> VmCapabilities
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more