122 }
123 return true;
124 }
125
126
127 void ClassLoaderStatsClosure::print() {
128 _out->print_cr("ClassLoader" SPACE " Parent" SPACE " CLD*" SPACE " Classes ChunkSz BlockSz Type", "", "", "");
129 _stats->iterate(this);
130 _out->print("Total = " UINTX_FORMAT_W(-6), _total_loaders);
131 _out->print(SPACE SPACE SPACE " ", "", "", "");
132 _out->print_cr(UINTX_FORMAT_W(6) " " SIZE_FORMAT_W(8) " " SIZE_FORMAT_W(8) " ",
133 _total_classes,
134 _total_chunk_sz,
135 _total_block_sz);
136 _out->print_cr("ChunkSz: Total size of all allocated metaspace chunks");
137 _out->print_cr("BlockSz: Total size of all allocated metaspace blocks (each chunk has several blocks)");
138 }
139
140
141 void ClassLoaderStatsClosure::addEmptyParents(oop cl) {
142 while (cl != NULL && java_lang_ClassLoader::loader_data(cl) == NULL) {
143 // This classloader has not loaded any classes
144 ClassLoaderStats** cls_ptr = _stats->get(cl);
145 if (cls_ptr == NULL) {
146 // It does not exist in our table - add it
147 ClassLoaderStats* cls = new ClassLoaderStats();
148 cls->_class_loader = cl;
149 cls->_parent = java_lang_ClassLoader::parent(cl);
150 _stats->put(cl, cls);
151 _total_loaders++;
152 }
153
154 cl = java_lang_ClassLoader::parent(cl);
155 }
156 }
157
158
159 void ClassLoaderStatsVMOperation::doit() {
160 ClassLoaderStatsClosure clsc (_out);
161 ClassLoaderDataGraph::cld_do(&clsc);
162 clsc.print();
|
122 }
123 return true;
124 }
125
126
127 void ClassLoaderStatsClosure::print() {
128 _out->print_cr("ClassLoader" SPACE " Parent" SPACE " CLD*" SPACE " Classes ChunkSz BlockSz Type", "", "", "");
129 _stats->iterate(this);
130 _out->print("Total = " UINTX_FORMAT_W(-6), _total_loaders);
131 _out->print(SPACE SPACE SPACE " ", "", "", "");
132 _out->print_cr(UINTX_FORMAT_W(6) " " SIZE_FORMAT_W(8) " " SIZE_FORMAT_W(8) " ",
133 _total_classes,
134 _total_chunk_sz,
135 _total_block_sz);
136 _out->print_cr("ChunkSz: Total size of all allocated metaspace chunks");
137 _out->print_cr("BlockSz: Total size of all allocated metaspace blocks (each chunk has several blocks)");
138 }
139
140
141 void ClassLoaderStatsClosure::addEmptyParents(oop cl) {
142 while (cl != NULL && java_lang_ClassLoader::loader_data_acquire(cl) == NULL) {
143 // This classloader has not loaded any classes
144 ClassLoaderStats** cls_ptr = _stats->get(cl);
145 if (cls_ptr == NULL) {
146 // It does not exist in our table - add it
147 ClassLoaderStats* cls = new ClassLoaderStats();
148 cls->_class_loader = cl;
149 cls->_parent = java_lang_ClassLoader::parent(cl);
150 _stats->put(cl, cls);
151 _total_loaders++;
152 }
153
154 cl = java_lang_ClassLoader::parent(cl);
155 }
156 }
157
158
159 void ClassLoaderStatsVMOperation::doit() {
160 ClassLoaderStatsClosure clsc (_out);
161 ClassLoaderDataGraph::cld_do(&clsc);
162 clsc.print();
|