You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ma...@apache.org on 2013/11/01 07:01:04 UTC

git commit: Use AtomicIntegerFieldUpdater in RefCountedMemory to save memory in row cache.

Updated Branches:
  refs/heads/trunk 69fef1977 -> 7918718c8


Use AtomicIntegerFieldUpdater in RefCountedMemory to save memory in row cache.

Patch by marcuse, reviewed by jbellis for CASSANDRA-6278


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/7918718c
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/7918718c
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/7918718c

Branch: refs/heads/trunk
Commit: 7918718c8ce53c6d0958aa969fc813e586463d08
Parents: 69fef19
Author: Marcus Eriksson <ma...@spotify.com>
Authored: Fri Nov 1 06:57:48 2013 +0100
Committer: Marcus Eriksson <ma...@spotify.com>
Committed: Fri Nov 1 07:00:08 2013 +0100

----------------------------------------------------------------------
 CHANGES.txt                                              |  2 +-
 .../org/apache/cassandra/cache/RefCountedMemory.java     | 11 ++++++-----
 2 files changed, 7 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/7918718c/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index cc878e4..ad05970 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -6,7 +6,7 @@
  * Remove 1.2 network compatibility code (CASSANDRA-5960)
  * Remove leveled json manifest migration code (CASSANDRA-5996)
  * Remove CFDefinition (CASSANDRA-6253)
-
+ * Use AtomicIntegerFieldUpdater in RefCountedMemory (CASSANDRA-6278)
 
 2.0.3
  * Fix repair assertion error when tombstones expire (CASSANDRA-6277)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/7918718c/src/java/org/apache/cassandra/cache/RefCountedMemory.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cache/RefCountedMemory.java b/src/java/org/apache/cassandra/cache/RefCountedMemory.java
index 887bd86..76d9b00 100644
--- a/src/java/org/apache/cassandra/cache/RefCountedMemory.java
+++ b/src/java/org/apache/cassandra/cache/RefCountedMemory.java
@@ -17,13 +17,14 @@
  */
 package org.apache.cassandra.cache;
 
-import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
 
 import org.apache.cassandra.io.util.Memory;
 
 public class RefCountedMemory extends Memory
 {
-    private final AtomicInteger references = new AtomicInteger(1);
+    private volatile int references = 1;
+    private static final AtomicIntegerFieldUpdater<RefCountedMemory> UPDATER = AtomicIntegerFieldUpdater.newUpdater(RefCountedMemory.class, "references");
 
     public RefCountedMemory(long size)
     {
@@ -38,10 +39,10 @@ public class RefCountedMemory extends Memory
     {
         while (true)
         {
-            int n = references.get();
+            int n = UPDATER.get(this);
             if (n <= 0)
                 return false;
-            if (references.compareAndSet(n, n + 1))
+            if (UPDATER.compareAndSet(this, n, n + 1))
                 return true;
         }
     }
@@ -49,7 +50,7 @@ public class RefCountedMemory extends Memory
     /** decrement reference count.  if count reaches zero, the object is freed. */
     public void unreference()
     {
-        if (references.decrementAndGet() == 0)
+        if (UPDATER.decrementAndGet(this) == 0)
             free();
     }
 }