JDK-8167232 : Convert Dictionary::print() to UL
  • Type: Enhancement
  • Component: hotspot
  • Sub-Component: runtime
  • Affected Version: 9
  • Priority: P4
  • Status: Closed
  • Resolution: Won't Fix
  • Submitted: 2016-10-05
  • Updated: 2017-02-10
  • Resolved: 2017-01-17
Related Reports
Relates :  
Description
Convert Dictionary::print() to UL
Comments
We shouldn't change this.
17-01-2017

These seem to be print-on-demand/request functions not "logging" is any normal sense, so UL seems not applicable to me inside these functions.
16-01-2017

I don't think PrintSystemDictionaryAtExit should be converted to UL unless we decide to convert all of the functions in java.cpp print_statistics(). It would not match the others. I do think the SystemDictionary::print(), and all the functions that it calls for printing (placeholder table, etc) should be given an outputStream* parameter and not printed directly to tty, but again, none of the other functions in print_statistics() do that either, so it would also be inconsistent. psd() is a function to be called from the debugger, but I think it would produce too much information to be useful to anyone. I don't think anyone's used it since 2010, which is the last time I used it. I think it should be removed because in modern debuggers you can just say "call SystemDictionary::print(tty)" and that does the same thing.
13-01-2017

Dictionary::print() is only called from within SystemDictionary::print(), which contains some additonal logging. SystemDictionary::print() is called from psd() in utilities/debug.cpp and from runtime/java.cpp. In psd(), it is guarded by no conditions and the logging will fire whenever psd() is called. In java.cpp, it is guarded by PrintSystemDictionaryAtExit. What to do? I think we should Reimplement all logging within SystemDictionary::print() in UL so that we can remove the conditional around SystemDictionary::print and move it into the individual logging components within. This ensures that all of the user-specified logging appears, and that nothing can block enabled logging from appearing (such as PrintSystemDictionaryAtExit=false) In psd(), it assumes that a call to SystemDictionary::print() will automatically fire all of the logging within it. In this case, we should enable all system dictionary logging at the beginning of psd() and then disable it at the end. This guarantees that a call to psd will still fire all logging within SystemDictionary::print() without affecting the log configuration.
10-01-2017