Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Koch2019-03-01 00:04:15 +0000
committerJason Koch2019-03-04 22:03:08 +0000
commit400c05cd9bbc8977110423d60c907a5af6ba1510 (patch)
tree66489c9441f33f6f0385f3b8e9f1c5aec5db0e66
parent49ce7da441206d470e8596ee8be7f993ff8e629b (diff)
downloadorg.eclipse.mat-400c05cd9bbc8977110423d60c907a5af6ba1510.tar.gz
org.eclipse.mat-400c05cd9bbc8977110423d60c907a5af6ba1510.tar.xz
org.eclipse.mat-400c05cd9bbc8977110423d60c907a5af6ba1510.zip
[277422] Switch ClassImpl to use atomic instructions rather than synchronized block
Change-Id: I5e35bb0f7a59bc041e67e28a8cec56f1ee010eae Signed-off-by: Jason Koch <jkoch@netflix.com>
-rw-r--r--plugins/org.eclipse.mat.parser/src/org/eclipse/mat/parser/model/ClassImpl.java17
1 files changed, 11 insertions, 6 deletions
diff --git a/plugins/org.eclipse.mat.parser/src/org/eclipse/mat/parser/model/ClassImpl.java b/plugins/org.eclipse.mat.parser/src/org/eclipse/mat/parser/model/ClassImpl.java
index 41ab6573..735c63d4 100644
--- a/plugins/org.eclipse.mat.parser/src/org/eclipse/mat/parser/model/ClassImpl.java
+++ b/plugins/org.eclipse.mat.parser/src/org/eclipse/mat/parser/model/ClassImpl.java
@@ -18,6 +18,8 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
+import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
+import java.util.concurrent.atomic.AtomicLongFieldUpdater;
import org.eclipse.mat.SnapshotException;
import org.eclipse.mat.collect.ArrayInt;
@@ -41,6 +43,10 @@ import org.eclipse.mat.util.VoidProgressListener;
public class ClassImpl extends AbstractObjectImpl implements IClass, Comparable<ClassImpl>
{
private static final long serialVersionUID = 22L;
+ private static final transient AtomicIntegerFieldUpdater<ClassImpl> instanceCountUpdater =
+ AtomicIntegerFieldUpdater.newUpdater(ClassImpl.class, "instanceCount");
+ private static final transient AtomicLongFieldUpdater<ClassImpl> totalSizeUpdater =
+ AtomicLongFieldUpdater.newUpdater(ClassImpl.class, "totalSize");
public static final String JAVA_LANG_CLASS = IClass.JAVA_LANG_CLASS;
@@ -53,8 +59,8 @@ public class ClassImpl extends AbstractObjectImpl implements IClass, Comparable<
protected FieldDescriptor[] fields;
protected int usedHeapSize;
protected int instanceSize;
- protected int instanceCount;
- protected long totalSize;
+ protected volatile int instanceCount;
+ protected volatile long totalSize;
protected boolean isArrayType;
private List<IClass> subClasses;
@@ -323,11 +329,10 @@ public class ClassImpl extends AbstractObjectImpl implements IClass, Comparable<
/**
* @since 1.0
*/
- public synchronized void addInstance(long usedHeapSize)
+ public void addInstance(long usedHeapSize)
{
- // TODO this could be converted to atomic field updaters
- this.instanceCount++;
- this.totalSize += usedHeapSize;
+ instanceCountUpdater.getAndAdd(this, 1);
+ totalSizeUpdater.getAndAdd(this, usedHeapSize);
}
/**

Back to the top