src/share/vm/utilities/ostream.cpp
Print this page
rev 6853 : 8046070: Class Data Sharing clean up and refactoring
Summary: Cleaned up CDS to be more configurable, maintainable and extensible
Reviewed-by: dholmes, coleenp, acorn, mchung
@@ -350,10 +350,11 @@
stringStream::~stringStream() {}
xmlStream* xtty;
outputStream* tty;
outputStream* gclog_or_tty;
+CDS_ONLY(fileStream* classlist_file;) // Only dump the classes that can be stored into the CDS archive
extern Mutex* tty_lock;
#define EXTRACHARLEN 32
#define CURRENTAPPX ".current"
#define FILENAMEBUFLEN 1024
@@ -461,11 +462,12 @@
}
strcat(buf, tail); // append rest of name, or all of name
return buf;
}
-// log_name comes from -XX:LogFile=log_name or -Xloggc:log_name
+// log_name comes from -XX:LogFile=log_name, -Xloggc:log_name or
+// -XX:DumpLoadedClassList=<file_name>
// in log_name, %p => pid1234 and
// %t => YYYY-MM-DD_HH-MM-SS
static const char* make_log_name(const char* log_name, const char* force_directory) {
char timestr[32];
get_datetime_string(timestr, sizeof(timestr));
@@ -1101,10 +1103,20 @@
gclog->time_stamp().update_to(tty->time_stamp().ticks());
}
gclog_or_tty = gclog;
}
+#if INCLUDE_CDS
+ // For -XX:DumpLoadedClassList=<file> option
+ if (DumpLoadedClassList != NULL) {
+ const char* list_name = make_log_name(DumpLoadedClassList, NULL);
+ classlist_file = new(ResourceObj::C_HEAP, mtInternal)
+ fileStream(list_name);
+ FREE_C_HEAP_ARRAY(char, list_name, mtInternal);
+ }
+#endif
+
// If we haven't lazily initialized the logfile yet, do it now,
// to avoid the possibility of lazy initialization during a VM
// crash, which can affect the stability of the fatal error handler.
defaultStream::instance->has_log_file();
}
@@ -1113,10 +1125,15 @@
// output and free resource.
void ostream_exit() {
static bool ostream_exit_called = false;
if (ostream_exit_called) return;
ostream_exit_called = true;
+#if INCLUDE_CDS
+ if (classlist_file != NULL) {
+ delete classlist_file;
+ }
+#endif
if (gclog_or_tty != tty) {
delete gclog_or_tty;
}
{
// we temporaly disable PrintMallocFree here