# HG changeset patch # User martin # Date 1523380655 25200 # Tue Apr 10 10:17:35 2018 -0700 # Node ID b2bd13eafc1c057ecd039047843cb9077e1b824e # Parent 7b00ac6c11ab34a5ae33cdfed336002eb6bedd12 8201327: Make Sensor deeply immutably thread safe Reviewed-by: alanb, chegar, asmundak diff --git a/src/java.management/share/classes/sun/management/MemoryPoolImpl.java b/src/java.management/share/classes/sun/management/MemoryPoolImpl.java --- a/src/java.management/share/classes/sun/management/MemoryPoolImpl.java +++ b/src/java.management/share/classes/sun/management/MemoryPoolImpl.java @@ -55,10 +55,10 @@ private long usageThreshold; private long collectionThreshold; - private boolean usageSensorRegistered; - private boolean gcSensorRegistered; - private Sensor usageSensor; - private Sensor gcSensor; + private boolean usageSensorRegistered; // VM-initialized to false + private boolean gcSensorRegistered; // VM-initialized to false + private final Sensor usageSensor; + private final Sensor gcSensor; MemoryPoolImpl(String name, boolean isHeap, long usageThreshold, long gcThreshold) { @@ -72,8 +72,6 @@ this.collectionThresholdSupported = (gcThreshold >= 0); this.usageSensor = new PoolSensor(this, name + " usage sensor"); this.gcSensor = new CollectionSensor(this, name + " collection sensor"); - this.usageSensorRegistered = false; - this.gcSensorRegistered = false; } public String getName() { @@ -290,7 +288,7 @@ * unless the memory usage has returned below the threshold. */ class PoolSensor extends Sensor { - MemoryPoolImpl pool; + final MemoryPoolImpl pool; PoolSensor(MemoryPoolImpl pool, String name) { super(name); @@ -316,10 +314,10 @@ * when the memory usage of a memory pool after GC is crossing * the collection threshold. * The VM will trigger this sensor in subsequent crossing - * regardless if the memory usage has changed siince the previous GC. + * regardless if the memory usage has changed since the previous GC. */ class CollectionSensor extends Sensor { - MemoryPoolImpl pool; + final MemoryPoolImpl pool; CollectionSensor(MemoryPoolImpl pool, String name) { super(name); this.pool = pool; diff --git a/src/java.management/share/classes/sun/management/Sensor.java b/src/java.management/share/classes/sun/management/Sensor.java --- a/src/java.management/share/classes/sun/management/Sensor.java +++ b/src/java.management/share/classes/sun/management/Sensor.java @@ -48,10 +48,10 @@ */ public abstract class Sensor { - private Object lock; - private String name; - private long count; - private boolean on; + private final Object lock = new Object(); + private final String name; + private long count; // VM-initialized to 0 + private boolean on; // VM-initialized to false /** * Constructs a {@code Sensor} object. @@ -60,9 +60,6 @@ */ public Sensor(String name) { this.name = name; - this.count = 0; - this.on = false; - this.lock = new Object(); } /**