Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

8264682: MemProfiling does not own Heap_lock when using G1 #3340

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter
Filter file types
Jump to
Jump to file
Failed to load files.

Always

Just for now

@@ -115,6 +115,9 @@ void MemProfiler::do_trace() {
resource_memory_usage += cur->resource_area()->size_in_bytes();
}

// used() calls G1Allocator::used_in_alloc_regions() when G1 enabled,
// it checks whether Heap_lock was owned on this thread's behalf.
G1GC_ONLY(MutexLocker ml(Heap_lock);)
Comment on lines +118 to +120

This comment has been minimized.

@dholmes-ora

dholmes-ora Apr 6, 2021
Member

This seems really out of place - this code should not need to know anything about the specific locking requirements of different GC's. That should be handled inside the appropriate chunk of GC code.

// Print trace line in log
fprintf(_log_fp, "%6.1f,%5d," SIZE_FORMAT_W(5) "," UINTX_FORMAT_W(6) "," UINTX_FORMAT_W(6) ",",
os::elapsedTime(),
@@ -0,0 +1,56 @@
/*
* Copyright (c) 2021, Alibaba Group Holding Limited. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*
*/

/*
* @test MemProfilingWithGC
* @bug 8264682
* @summary test combinations of various GC and -XX:+MemProfiling
* @library /test/lib
* @run driver MemProfilingWithGC
*/

import jdk.test.lib.process.ProcessTools;
import jdk.test.lib.process.OutputAnalyzer;

public class MemProfilingWithGC {
public static void main(String... args) throws Exception {
final String GCs[] = new String[] {
"UseG1GC",
"UseSerialGC",
"UseParallelGC",
"UseShenandoahGC",
"UseZGC",
"UseEpsilonGC",
Comment on lines +39 to +44

This comment has been minimized.

@dholmes-ora

dholmes-ora Apr 6, 2021
Member

You have to allow for the fact that these GC's may not have all been built into the JVM under test.

};
for (int i = 0; i < GCs.length; i++) {
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
"-XX:+UnlockExperimentalVMOptions",
"-XX:+" + GCs[i],
"-XX:+MemProfiling",
"-version");
OutputAnalyzer out = new OutputAnalyzer(pb.start());
out.shouldHaveExitValue(0);
}
}
}
ProTip! Use n and p to navigate between commits in a pull request.