annotate src/share/vm/utilities/linkedlist.cpp @ 20543:e7d0505c8a30

8059758: Footprint regressions with JDK-8038423 Summary: Changes in JDK-8038423 always initialize (zero out) virtual memory used for auxiliary data structures. This causes a footprint regression for G1 in startup benchmarks. This is because they do not touch that memory at all, so the operating system does not actually commit these pages. The fix is to, if the initialization value of the data structures matches the default value of just committed memory (=0), do not do anything. Reviewed-by: jwilhelm, brutisso
author tschatzl
date Fri, 10 Oct 2014 15:51:58 +0200
parents 833b0f92429a
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