annotate src/share/vm/utilities/linkedlist.cpp @ 20360:833b0f92429a

8046598: Scalable Native memory tracking development Summary: Enhance scalability of native memory tracking Reviewed-by: coleenp, ctornqvi, gtriantafill
author zgu
date Wed, 27 Aug 2014 08:19:12 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20360
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
1 /*
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
2 * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
4 *
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
7 * published by the Free Software Foundation.
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
8 *
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
13 * accompanied this code).
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
14 *
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
18 *
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
21 * questions.
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
22 *
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
23 */
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
24
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
25 #include "precompiled.hpp"
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
26
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
27 /////////////// Unit tests ///////////////
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
28
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
29 #ifndef PRODUCT
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
30
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
31 #include "runtime/os.hpp"
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
32 #include "utilities/linkedlist.hpp"
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
33 #include "memory/allocation.hpp"
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
34 #include "memory/allocation.inline.hpp"
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
35
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
36 class Integer : public StackObj {
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
37 private:
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
38 int _value;
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
39 public:
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
40 Integer(int i) : _value(i) { }
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
41
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
42 int value() const { return _value; }
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
43 bool equals(const Integer& i) const {
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
44 return _value == i.value();
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
45 }
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
46 };
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
47
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
48 int compare_Integer(const Integer& i1, const Integer& i2) {
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
49 return i1.value() - i2.value();
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
50 }
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
51
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
52 void check_list_values(const int* expected, const LinkedList<Integer>* list) {
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
53 LinkedListNode<Integer>* head = list->head();
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
54 int index = 0;
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
55 while (head != NULL) {
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
56 assert(head->peek()->value() == expected[index], "Unexpected value");
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
57 head = head->next();
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
58 index ++;
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
59 }
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
60 }
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
61
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
62 void Test_linked_list() {
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
63 LinkedListImpl<Integer, ResourceObj::C_HEAP, mtTest> ll;
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
64
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
65
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
66 // Test regular linked list
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
67 assert(ll.is_empty(), "Start with empty list");
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
68 Integer one(1), two(2), three(3), four(4), five(5), six(6);
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
69
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
70 ll.add(six);
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
71 assert(!ll.is_empty(), "Should not be empty");
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
72
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
73 Integer* i = ll.find(six);
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
74 assert(i != NULL, "Should find it");
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
75
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
76 i = ll.find(three);
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
77 assert(i == NULL, "Not in the list");
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
78
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
79 LinkedListNode<Integer>* node = ll.find_node(six);
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
80 assert(node != NULL, "6 is in the list");
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
81
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
82 ll.insert_after(three, node);
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
83 ll.insert_before(one, node);
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
84 int expected[3] = {1, 6, 3};
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
85 check_list_values(expected, &ll);
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
86
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
87 ll.add(two);
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
88 ll.add(four);
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
89 ll.add(five);
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
90
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
91 // Test sorted linked list
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
92 SortedLinkedList<Integer, compare_Integer, ResourceObj::C_HEAP, mtTest> sl;
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
93 assert(sl.is_empty(), "Start with empty list");
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
94
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
95 size_t ll_size = ll.size();
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
96 sl.move(&ll);
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
97 size_t sl_size = sl.size();
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
98
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
99 assert(ll_size == sl_size, "Should be the same size");
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
100 assert(ll.is_empty(), "No more entires");
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
101
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
102 // sorted result
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
103 int sorted_result[] = {1, 2, 3, 4, 5, 6};
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
104 check_list_values(sorted_result, &sl);
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
105
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
106 node = sl.find_node(four);
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
107 assert(node != NULL, "4 is in the list");
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
108 sl.remove_before(node);
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
109 sl.remove_after(node);
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
110 int remains[] = {1, 2, 4, 6};
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
111 check_list_values(remains, &sl);
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
112 }
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
113 #endif // PRODUCT
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents:
diff changeset
114