Merge
authorsspitsyn
Thu, 28 Apr 2016 21:56:38 +0000
changeset 38117 3fadbdec25d5
parent 38114 5231f6945aba (diff)
parent 38116 3953ca7bbf8d (current diff)
child 38120 7c0b9f2362d9
Merge
--- a/hotspot/src/share/vm/compiler/directivesParser.cpp	Thu Apr 28 19:34:13 2016 +0000
+++ b/hotspot/src/share/vm/compiler/directivesParser.cpp	Thu Apr 28 21:56:38 2016 +0000
@@ -57,7 +57,7 @@
 }
 
 int DirectivesParser::parse_string(const char* text, outputStream* st) {
-  DirectivesParser cd(text, st);
+  DirectivesParser cd(text, st, false);
   if (cd.valid()) {
     return cd.install_directives();
   } else {
@@ -132,8 +132,8 @@
   }
 }
 
-DirectivesParser::DirectivesParser(const char* text, outputStream* st)
-: JSON(text, false, st), depth(0), current_directive(NULL), current_directiveset(NULL), _tmp_top(NULL), _tmp_depth(0) {
+DirectivesParser::DirectivesParser(const char* text, outputStream* st, bool silent)
+: JSON(text, silent, st), depth(0), current_directive(NULL), current_directiveset(NULL), _tmp_top(NULL), _tmp_depth(0) {
 #ifndef PRODUCT
   memset(stack, 0, MAX_DEPTH * sizeof(stack[0]));
 #endif
@@ -594,7 +594,7 @@
 
 #ifndef PRODUCT
 void DirectivesParser::test(const char* text, bool should_pass) {
-  DirectivesParser cd(text, tty);
+  DirectivesParser cd(text, tty, !VerboseInternalVMTests);
   if (should_pass) {
     assert(cd.valid() == true, "failed on a valid DirectivesParser string");
     if (VerboseInternalVMTests) {
--- a/hotspot/src/share/vm/compiler/directivesParser.hpp	Thu Apr 28 19:34:13 2016 +0000
+++ b/hotspot/src/share/vm/compiler/directivesParser.hpp	Thu Apr 28 21:56:38 2016 +0000
@@ -55,7 +55,7 @@
   int install_directives();
 
 private:
-  DirectivesParser(const char* text, outputStream* st);
+  DirectivesParser(const char* text, outputStream* st, bool silent);
   ~DirectivesParser();
 
   bool callback(JSON_TYPE t, JSON_VAL* v, uint level);
--- a/hotspot/src/share/vm/memory/heapInspection.cpp	Thu Apr 28 19:34:13 2016 +0000
+++ b/hotspot/src/share/vm/memory/heapInspection.cpp	Thu Apr 28 21:56:38 2016 +0000
@@ -24,6 +24,7 @@
 
 #include "precompiled.hpp"
 #include "classfile/classLoaderData.hpp"
+#include "classfile/moduleEntry.hpp"
 #include "classfile/systemDictionary.hpp"
 #include "gc/shared/collectedHeap.hpp"
 #include "gc/shared/genCollectedHeap.hpp"
@@ -105,10 +106,20 @@
   ResourceMark rm;
 
   // simplify the formatting (ILP32 vs LP64) - always cast the numbers to 64-bit
-  st->print_cr(INT64_FORMAT_W(13) "  " UINT64_FORMAT_W(13) "  %s",
-               (int64_t)_instance_count,
-               (uint64_t)_instance_words * HeapWordSize,
-               name());
+  ModuleEntry* module = _klass->module();
+  if (module->is_named()) {
+    st->print_cr(INT64_FORMAT_W(13) "  " UINT64_FORMAT_W(13) "  %s (%s@%s)",
+                 (int64_t)_instance_count,
+                 (uint64_t)_instance_words * HeapWordSize,
+                 name(),
+                 module->name()->as_C_string(),
+                 module->version() != NULL ? module->version()->as_C_string() : "");
+  } else {
+    st->print_cr(INT64_FORMAT_W(13) "  " UINT64_FORMAT_W(13) "  %s",
+                 (int64_t)_instance_count,
+                 (uint64_t)_instance_words * HeapWordSize,
+                 name());
+  }
 }
 
 KlassInfoEntry* KlassInfoBucket::lookup(Klass* const k) {
@@ -647,8 +658,8 @@
   if (print_stats) {
     print_class_stats(st, csv_format, columns);
   } else {
-    st->print_cr(" num     #instances         #bytes  class name");
-    st->print_cr("----------------------------------------------");
+    st->print_cr(" num     #instances         #bytes  class name (module)");
+    st->print_cr("-------------------------------------------------------");
     print_elements(st);
   }
 }
--- a/hotspot/test/serviceability/dcmd/gc/ClassHistogramTest.java	Thu Apr 28 19:34:13 2016 +0000
+++ b/hotspot/test/serviceability/dcmd/gc/ClassHistogramTest.java	Thu Apr 28 21:56:38 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. 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
@@ -57,33 +57,34 @@
 
         /*
          * example output:
-         *   num     #instances         #bytes  class name
-         *  ----------------------------------------------
-         *     1:          1647        1133752  [B
-         *     2:          6198         383168  [C
-         *     3:          1464         165744  java.lang.Class
-         *     4:          6151         147624  java.lang.String
-         *     5:          2304          73728  java.util.concurrent.ConcurrentHashMap$Node
-         *     6:          1199          64280  [Ljava.lang.Object;
+         *  num     #instances         #bytes  class name (module)
+         * -------------------------------------------------------
+         *    1:          7991         757792  [B (java.base@9-internal)
+         *    2:          1811         217872  java.lang.Class (java.base@9-internal)
+         *    3:          6724         215168  java.util.HashMap$Node (java.base@9-internal)
+         *    4:          7852         188448  java.lang.String (java.base@9-internal)
+         *    5:          1378         105040  [Ljava.util.HashMap$Node; (java.base@9-internal)
+         *    6:          1863          95096  [Ljava.lang.Object; (java.base@9-internal)
+
          * ...
          */
 
         /* Require at least one java.lang.Class */
-        output.shouldMatch("^\\s+\\d+:\\s+\\d+\\s+\\d+\\s+java.lang.Class\\s*$");
+        output.shouldMatch("^\\s+\\d+:\\s+\\d+\\s+\\d+\\s+java.lang.Class \\(java.base@\\S*\\)\\s*$");
 
         /* Require at least one java.lang.String */
-        output.shouldMatch("^\\s+\\d+:\\s+\\d+\\s+\\d+\\s+java.lang.String\\s*$");
+        output.shouldMatch("^\\s+\\d+:\\s+\\d+\\s+\\d+\\s+java.lang.String \\(java.base@\\S*\\)\\s*$");
 
         /* Require at least one java.lang.Object */
-        output.shouldMatch("^\\s+\\d+:\\s+\\d+\\s+\\d+\\s+java.lang.Object\\s*$");
+        output.shouldMatch("^\\s+\\d+:\\s+\\d+\\s+\\d+\\s+java.lang.Object \\(java.base@\\S*\\)\\s*$");
 
         /* Require at exactly one TestClass[] */
         output.shouldMatch("^\\s+\\d+:\\s+1\\s+\\d+\\s+" +
-                Pattern.quote(TestClass[].class.getName()) + "\\s*$");
+            Pattern.quote(TestClass[].class.getName()) + "\\s*$");
 
         /* Require at exactly 1024 TestClass */
         output.shouldMatch("^\\s+\\d+:\\s+1024\\s+\\d+\\s+" +
-                Pattern.quote(TestClass.class.getName()) + "\\s*$");
+            Pattern.quote(TestClass.class.getName()) + "\\s*$");
     }
 
     @Test