Mercurial > hg > graal-compiler
comparison test/runtime/NMT/MallocTrackingVerify.java @ 20442:4edd7572c235
8054836: [TESTBUG] Test is needed to verify correctness of malloc tracking
Reviewed-by: ctornqvi, lfoltan
author | gtriantafill |
---|---|
date | Tue, 09 Sep 2014 09:48:42 -0700 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
20428:4d8781a35525 | 20442:4edd7572c235 |
---|---|
1 /* | |
2 * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. | |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
4 * | |
5 * This code is free software; you can redistribute it and/or modify it | |
6 * under the terms of the GNU General Public License version 2 only, as | |
7 * published by the Free Software Foundation. | |
8 * | |
9 * This code is distributed in the hope that it will be useful, but WITHOUT | |
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
12 * version 2 for more details (a copy is included in the LICENSE file that | |
13 * accompanied this code). | |
14 * | |
15 * You should have received a copy of the GNU General Public License version | |
16 * 2 along with this work; if not, write to the Free Software Foundation, | |
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
18 * | |
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
20 * or visit www.oracle.com if you need additional information or have any | |
21 * questions. | |
22 */ | |
23 | |
24 /* | |
25 * @test | |
26 * @bug 8054836 | |
27 * @summary Test to verify correctness of malloc tracking | |
28 * @key nmt jcmd | |
29 * @library /testlibrary /testlibrary/whitebox | |
30 * @build MallocTrackingVerify | |
31 * @run main ClassFileInstaller sun.hotspot.WhiteBox | |
32 * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:NativeMemoryTracking=detail MallocTrackingVerify | |
33 * | |
34 */ | |
35 | |
36 import java.util.ArrayList; | |
37 import java.util.Random; | |
38 | |
39 import com.oracle.java.testlibrary.*; | |
40 | |
41 import sun.hotspot.WhiteBox; | |
42 | |
43 public class MallocTrackingVerify { | |
44 private static int MAX_ALLOC = 4 * 1024; | |
45 | |
46 static ArrayList<MallocMemory> mallocd_memory = new ArrayList<MallocMemory>(); | |
47 static long mallocd_total = 0; | |
48 public static WhiteBox wb = WhiteBox.getWhiteBox(); | |
49 | |
50 public static void main(String args[]) throws Exception { | |
51 OutputAnalyzer output; | |
52 | |
53 // Grab my own PID | |
54 String pid = Integer.toString(ProcessTools.getProcessId()); | |
55 ProcessBuilder pb = new ProcessBuilder(); | |
56 | |
57 Random random = new Random(); | |
58 // Allocate small amounts of memory with random pseudo call stack | |
59 while (mallocd_total < MAX_ALLOC) { | |
60 int size = random.nextInt(31) + 1; | |
61 long addr = wb.NMTMallocWithPseudoStack(size, random.nextInt()); | |
62 if (addr != 0) { | |
63 MallocMemory mem = new MallocMemory(addr, size); | |
64 mallocd_memory.add(mem); | |
65 mallocd_total += size; | |
66 } else { | |
67 System.out.println("Out of malloc memory"); | |
68 break; | |
69 } | |
70 } | |
71 | |
72 pb.command(new String[] { JDKToolFinder.getJDKTool("jcmd"), pid, "VM.native_memory", "summary" }); | |
73 output = new OutputAnalyzer(pb.start()); | |
74 output.shouldContain("Test (reserved=4KB, committed=4KB)"); | |
75 | |
76 // Free | |
77 for (MallocMemory mem : mallocd_memory) { | |
78 wb.NMTFree(mem.addr()); | |
79 } | |
80 | |
81 // Run 'jcmd <pid> VM.native_memory summary', check for expected output | |
82 pb.command(new String[] { JDKToolFinder.getJDKTool("jcmd"), pid, | |
83 "VM.native_memory", "summary" }); | |
84 output = new OutputAnalyzer(pb.start()); | |
85 output.shouldNotContain("Test (reserved="); | |
86 } | |
87 | |
88 static class MallocMemory { | |
89 private long addr; | |
90 private int size; | |
91 | |
92 MallocMemory(long addr, int size) { | |
93 this.addr = addr; | |
94 this.size = size; | |
95 } | |
96 | |
97 long addr() { | |
98 return this.addr; | |
99 } | |
100 | |
101 int size() { | |
102 return this.size; | |
103 } | |
104 } | |
105 } |