annotate src/share/vm/memory/metaspaceTracer.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 794399f4f5d9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17768
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
1 /*
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
2 * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
4 *
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
7 * published by the Free Software Foundation.
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
8 *
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
13 * accompanied this code).
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
14 *
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
18 *
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
21 * questions.
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
22 *
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
23 */
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
24
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
25 #include "precompiled.hpp"
17769
bc7714614ad8 8036699: Add trace event when a metaspace allocation fails
ehelin
parents: 17768
diff changeset
26 #include "classfile/classLoaderData.hpp"
17768
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
27 #include "memory/metaspaceTracer.hpp"
17779
794399f4f5d9 8037962: metaspaceTracer.cpp misses a symbol
ehelin
parents: 17770
diff changeset
28 #include "oops/oop.inline.hpp"
17768
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
29 #include "trace/tracing.hpp"
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
30 #include "trace/traceBackend.hpp"
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
31
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
32 void MetaspaceTracer::report_gc_threshold(size_t old_val,
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
33 size_t new_val,
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
34 MetaspaceGCThresholdUpdater::Type updater) const {
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
35 EventMetaspaceGCThreshold event;
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
36 if (event.should_commit()) {
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
37 event.set_oldValue(old_val);
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
38 event.set_newValue(new_val);
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
39 event.set_updater((u1)updater);
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
40 event.commit();
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
41 }
daef39043d2c 8036698: Add trace event for updates to metaspace gc threshold
ehelin
parents:
diff changeset
42 }
17769
bc7714614ad8 8036699: Add trace event when a metaspace allocation fails
ehelin
parents: 17768
diff changeset
43
bc7714614ad8 8036699: Add trace event when a metaspace allocation fails
ehelin
parents: 17768
diff changeset
44 void MetaspaceTracer::report_metaspace_allocation_failure(ClassLoaderData *cld,
bc7714614ad8 8036699: Add trace event when a metaspace allocation fails
ehelin
parents: 17768
diff changeset
45 size_t word_size,
bc7714614ad8 8036699: Add trace event when a metaspace allocation fails
ehelin
parents: 17768
diff changeset
46 MetaspaceObj::Type objtype,
bc7714614ad8 8036699: Add trace event when a metaspace allocation fails
ehelin
parents: 17768
diff changeset
47 Metaspace::MetadataType mdtype) const {
17770
5af31f70a866 8036701: Add trace event when a metaspace throws out of memory error
ehelin
parents: 17769
diff changeset
48 send_allocation_failure_event<EventMetaspaceAllocationFailure>(cld, word_size, objtype, mdtype);
5af31f70a866 8036701: Add trace event when a metaspace throws out of memory error
ehelin
parents: 17769
diff changeset
49 }
5af31f70a866 8036701: Add trace event when a metaspace throws out of memory error
ehelin
parents: 17769
diff changeset
50
5af31f70a866 8036701: Add trace event when a metaspace throws out of memory error
ehelin
parents: 17769
diff changeset
51 void MetaspaceTracer::report_metadata_oom(ClassLoaderData *cld,
5af31f70a866 8036701: Add trace event when a metaspace throws out of memory error
ehelin
parents: 17769
diff changeset
52 size_t word_size,
5af31f70a866 8036701: Add trace event when a metaspace throws out of memory error
ehelin
parents: 17769
diff changeset
53 MetaspaceObj::Type objtype,
5af31f70a866 8036701: Add trace event when a metaspace throws out of memory error
ehelin
parents: 17769
diff changeset
54 Metaspace::MetadataType mdtype) const {
5af31f70a866 8036701: Add trace event when a metaspace throws out of memory error
ehelin
parents: 17769
diff changeset
55 send_allocation_failure_event<EventMetaspaceOOM>(cld, word_size, objtype, mdtype);
5af31f70a866 8036701: Add trace event when a metaspace throws out of memory error
ehelin
parents: 17769
diff changeset
56 }
5af31f70a866 8036701: Add trace event when a metaspace throws out of memory error
ehelin
parents: 17769
diff changeset
57
5af31f70a866 8036701: Add trace event when a metaspace throws out of memory error
ehelin
parents: 17769
diff changeset
58 template <typename E>
5af31f70a866 8036701: Add trace event when a metaspace throws out of memory error
ehelin
parents: 17769
diff changeset
59 void MetaspaceTracer::send_allocation_failure_event(ClassLoaderData *cld,
5af31f70a866 8036701: Add trace event when a metaspace throws out of memory error
ehelin
parents: 17769
diff changeset
60 size_t word_size,
5af31f70a866 8036701: Add trace event when a metaspace throws out of memory error
ehelin
parents: 17769
diff changeset
61 MetaspaceObj::Type objtype,
5af31f70a866 8036701: Add trace event when a metaspace throws out of memory error
ehelin
parents: 17769
diff changeset
62 Metaspace::MetadataType mdtype) const {
5af31f70a866 8036701: Add trace event when a metaspace throws out of memory error
ehelin
parents: 17769
diff changeset
63 E event;
17769
bc7714614ad8 8036699: Add trace event when a metaspace allocation fails
ehelin
parents: 17768
diff changeset
64 if (event.should_commit()) {
bc7714614ad8 8036699: Add trace event when a metaspace allocation fails
ehelin
parents: 17768
diff changeset
65 if (cld->is_anonymous()) {
bc7714614ad8 8036699: Add trace event when a metaspace allocation fails
ehelin
parents: 17768
diff changeset
66 event.set_classLoader(NULL);
bc7714614ad8 8036699: Add trace event when a metaspace allocation fails
ehelin
parents: 17768
diff changeset
67 event.set_anonymousClassLoader(true);
bc7714614ad8 8036699: Add trace event when a metaspace allocation fails
ehelin
parents: 17768
diff changeset
68 } else {
bc7714614ad8 8036699: Add trace event when a metaspace allocation fails
ehelin
parents: 17768
diff changeset
69 if (cld->is_the_null_class_loader_data()) {
bc7714614ad8 8036699: Add trace event when a metaspace allocation fails
ehelin
parents: 17768
diff changeset
70 event.set_classLoader((Klass*) NULL);
bc7714614ad8 8036699: Add trace event when a metaspace allocation fails
ehelin
parents: 17768
diff changeset
71 } else {
bc7714614ad8 8036699: Add trace event when a metaspace allocation fails
ehelin
parents: 17768
diff changeset
72 event.set_classLoader(cld->class_loader()->klass());
bc7714614ad8 8036699: Add trace event when a metaspace allocation fails
ehelin
parents: 17768
diff changeset
73 }
bc7714614ad8 8036699: Add trace event when a metaspace allocation fails
ehelin
parents: 17768
diff changeset
74 event.set_anonymousClassLoader(false);
bc7714614ad8 8036699: Add trace event when a metaspace allocation fails
ehelin
parents: 17768
diff changeset
75 }
bc7714614ad8 8036699: Add trace event when a metaspace allocation fails
ehelin
parents: 17768
diff changeset
76
bc7714614ad8 8036699: Add trace event when a metaspace allocation fails
ehelin
parents: 17768
diff changeset
77 event.set_size(word_size * BytesPerWord);
bc7714614ad8 8036699: Add trace event when a metaspace allocation fails
ehelin
parents: 17768
diff changeset
78 event.set_metadataType((u1) mdtype);
bc7714614ad8 8036699: Add trace event when a metaspace allocation fails
ehelin
parents: 17768
diff changeset
79 event.set_metaspaceObjectType((u1) objtype);
bc7714614ad8 8036699: Add trace event when a metaspace allocation fails
ehelin
parents: 17768
diff changeset
80 event.commit();
bc7714614ad8 8036699: Add trace event when a metaspace allocation fails
ehelin
parents: 17768
diff changeset
81 }
bc7714614ad8 8036699: Add trace event when a metaspace allocation fails
ehelin
parents: 17768
diff changeset
82 }