You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by mi...@apache.org on 2018/01/22 17:30:56 UTC
[1/2] activemq-artemis git commit: ARTEMIS-1622 Reduce memory
footprint of QueueImpl
Repository: activemq-artemis
Updated Branches:
refs/heads/master 71a49c461 -> 72a267c46
ARTEMIS-1622 Reduce memory footprint of QueueImpl
LinkedListImpl is turned into an optionally intrusive linked list by allowing message references to extend Node.
Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/3f646474
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/3f646474
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/3f646474
Branch: refs/heads/master
Commit: 3f646474c28e86375b3bfc55a31072197579fb5c
Parents: 71a49c4
Author: Francesco Nigro <ni...@gmail.com>
Authored: Thu Jan 18 15:45:20 2018 +0100
Committer: Michael Pearce <mi...@me.com>
Committed: Mon Jan 22 17:30:45 2018 +0000
----------------------------------------------------------------------
.../utils/collections/LinkedListImpl.java | 39 +++++++++++++++-----
.../core/paging/cursor/PagedReferenceImpl.java | 4 +-
.../core/server/impl/MessageReferenceImpl.java | 3 +-
3 files changed, 34 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/3f646474/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/collections/LinkedListImpl.java
----------------------------------------------------------------------
diff --git a/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/collections/LinkedListImpl.java b/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/collections/LinkedListImpl.java
index 81b5d60..6071324 100644
--- a/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/collections/LinkedListImpl.java
+++ b/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/collections/LinkedListImpl.java
@@ -18,6 +18,7 @@ package org.apache.activemq.artemis.utils.collections;
import java.lang.reflect.Array;
import java.util.NoSuchElementException;
+import java.util.Objects;
/**
* A linked list implementation which allows multiple iterators to exist at the same time on the queue, and which see any
@@ -48,7 +49,7 @@ public class LinkedListImpl<E> implements LinkedList<E> {
@Override
public void addHead(E e) {
- Node<E> node = new Node<>(e);
+ Node<E> node = Node.with(e);
node.next = head.next;
@@ -71,7 +72,7 @@ public class LinkedListImpl<E> implements LinkedList<E> {
if (size == 0) {
addHead(e);
} else {
- Node<E> node = new Node<>(e);
+ Node<E> node = Node.with(e);
node.prev = tail;
@@ -217,23 +218,43 @@ public class LinkedListImpl<E> implements LinkedList<E> {
throw new IllegalStateException("Cannot find iter to remove");
}
- private static final class Node<E> {
+ public static class Node<T> {
- Node<E> next;
+ private Node<T> next;
- Node<E> prev;
+ private Node<T> prev;
- final E val;
+ private final T val;
- int iterCount;
+ private int iterCount;
- Node(E e) {
+ @SuppressWarnings("unchecked")
+ protected Node() {
+ val = (T)this;
+ }
+
+ //only the head is allowed to hold a null
+ private Node(T e) {
val = e;
}
@Override
public String toString() {
- return "Node, value = " + val;
+ return val == this ? "Intrusive Node" : "Node, value = " + val;
+ }
+
+ private static <T> Node<T> with(final T o) {
+ Objects.requireNonNull(o, "Only HEAD nodes are allowed to hold null values");
+ if (o instanceof Node) {
+ final Node node = (Node) o;
+ //only a node that not belong already to a list is allowed to be reused
+ if (node.prev == null && node.next == null) {
+ //reset the iterCount
+ node.iterCount = 0;
+ return node;
+ }
+ }
+ return new Node(o);
}
}
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/3f646474/artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/cursor/PagedReferenceImpl.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/cursor/PagedReferenceImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/cursor/PagedReferenceImpl.java
index 25874f0..7189007 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/cursor/PagedReferenceImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/cursor/PagedReferenceImpl.java
@@ -20,16 +20,16 @@ import java.lang.ref.WeakReference;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.activemq.artemis.api.core.Message;
-
import org.apache.activemq.artemis.core.paging.PagedMessage;
import org.apache.activemq.artemis.core.server.ActiveMQServerLogger;
import org.apache.activemq.artemis.core.server.MessageReference;
import org.apache.activemq.artemis.core.server.Queue;
import org.apache.activemq.artemis.core.server.impl.AckReason;
import org.apache.activemq.artemis.core.transaction.Transaction;
+import org.apache.activemq.artemis.utils.collections.LinkedListImpl;
import org.jboss.logging.Logger;
-public class PagedReferenceImpl implements PagedReference {
+public class PagedReferenceImpl extends LinkedListImpl.Node<PagedReferenceImpl> implements PagedReference {
private static final Logger logger = Logger.getLogger(PagedReferenceImpl.class);
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/3f646474/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/MessageReferenceImpl.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/MessageReferenceImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/MessageReferenceImpl.java
index bffb1ad..1b434bc 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/MessageReferenceImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/MessageReferenceImpl.java
@@ -22,11 +22,12 @@ import org.apache.activemq.artemis.api.core.Message;
import org.apache.activemq.artemis.core.server.MessageReference;
import org.apache.activemq.artemis.core.server.Queue;
import org.apache.activemq.artemis.core.transaction.Transaction;
+import org.apache.activemq.artemis.utils.collections.LinkedListImpl;
/**
* Implementation of a MessageReference
*/
-public class MessageReferenceImpl implements MessageReference {
+public class MessageReferenceImpl extends LinkedListImpl.Node<MessageReferenceImpl> implements MessageReference {
private final AtomicInteger deliveryCount = new AtomicInteger();
[2/2] activemq-artemis git commit: This closes #1791
Posted by mi...@apache.org.
This closes #1791
Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/72a267c4
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/72a267c4
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/72a267c4
Branch: refs/heads/master
Commit: 72a267c466e40c6745a28c92067603b3d923172b
Parents: 71a49c4 3f64647
Author: Michael Pearce <mi...@me.com>
Authored: Mon Jan 22 17:30:46 2018 +0000
Committer: Michael Pearce <mi...@me.com>
Committed: Mon Jan 22 17:30:46 2018 +0000
----------------------------------------------------------------------
.../utils/collections/LinkedListImpl.java | 39 +++++++++++++++-----
.../core/paging/cursor/PagedReferenceImpl.java | 4 +-
.../core/server/impl/MessageReferenceImpl.java | 3 +-
3 files changed, 34 insertions(+), 12 deletions(-)
----------------------------------------------------------------------