Tue, 12 Jul 2011 16:32:25 -0700
Merge
1.1 --- a/src/os/linux/vm/os_linux.cpp Thu Jul 07 10:51:07 2011 -0700 1.2 +++ b/src/os/linux/vm/os_linux.cpp Tue Jul 12 16:32:25 2011 -0700 1.3 @@ -169,7 +169,35 @@ 1.4 /* Used to protect dlsym() calls */ 1.5 static pthread_mutex_t dl_mutex; 1.6 1.7 -//////////////////////////////////////////////////////////////////////////////// 1.8 +#ifdef JAVASE_EMBEDDED 1.9 +class MemNotifyThread: public Thread { 1.10 + friend class VMStructs; 1.11 + public: 1.12 + virtual void run(); 1.13 + 1.14 + private: 1.15 + static MemNotifyThread* _memnotify_thread; 1.16 + int _fd; 1.17 + 1.18 + public: 1.19 + 1.20 + // Constructor 1.21 + MemNotifyThread(int fd); 1.22 + 1.23 + // Tester 1.24 + bool is_memnotify_thread() const { return true; } 1.25 + 1.26 + // Printing 1.27 + char* name() const { return (char*)"Linux MemNotify Thread"; } 1.28 + 1.29 + // Returns the single instance of the MemNotifyThread 1.30 + static MemNotifyThread* memnotify_thread() { return _memnotify_thread; } 1.31 + 1.32 + // Create and start the single instance of MemNotifyThread 1.33 + static void start(); 1.34 +}; 1.35 +#endif // JAVASE_EMBEDDED 1.36 + 1.37 // utility functions 1.38 1.39 static int SR_initialize(); 1.40 @@ -2085,6 +2113,14 @@ 1.41 st->cr(); 1.42 } 1.43 1.44 +void os::pd_print_cpu_info(outputStream* st) { 1.45 + st->print("\n/proc/cpuinfo:\n"); 1.46 + if (!_print_ascii_file("/proc/cpuinfo", st)) { 1.47 + st->print(" <Not Available>"); 1.48 + } 1.49 + st->cr(); 1.50 +} 1.51 + 1.52 void os::print_memory_info(outputStream* st) { 1.53 1.54 st->print("Memory:"); 1.55 @@ -4237,7 +4273,16 @@ 1.56 } 1.57 1.58 // this is called at the end of vm_initialization 1.59 -void os::init_3(void) { } 1.60 +void os::init_3(void) 1.61 +{ 1.62 +#ifdef JAVASE_EMBEDDED 1.63 + // Start the MemNotifyThread 1.64 + if (LowMemoryProtection) { 1.65 + MemNotifyThread::start(); 1.66 + } 1.67 + return; 1.68 +#endif 1.69 +} 1.70 1.71 // Mark the polling page as unreadable 1.72 void os::make_polling_page_unreadable(void) { 1.73 @@ -5360,3 +5405,78 @@ 1.74 return true; 1.75 } 1.76 1.77 + 1.78 +#ifdef JAVASE_EMBEDDED 1.79 +// 1.80 +// A thread to watch the '/dev/mem_notify' device, which will tell us when the OS is running low on memory. 1.81 +// 1.82 +MemNotifyThread* MemNotifyThread::_memnotify_thread = NULL; 1.83 + 1.84 +// ctor 1.85 +// 1.86 +MemNotifyThread::MemNotifyThread(int fd): Thread() { 1.87 + assert(memnotify_thread() == NULL, "we can only allocate one MemNotifyThread"); 1.88 + _fd = fd; 1.89 + 1.90 + if (os::create_thread(this, os::os_thread)) { 1.91 + _memnotify_thread = this; 1.92 + os::set_priority(this, NearMaxPriority); 1.93 + os::start_thread(this); 1.94 + } 1.95 +} 1.96 + 1.97 +// Where all the work gets done 1.98 +// 1.99 +void MemNotifyThread::run() { 1.100 + assert(this == memnotify_thread(), "expected the singleton MemNotifyThread"); 1.101 + 1.102 + // Set up the select arguments 1.103 + fd_set rfds; 1.104 + if (_fd != -1) { 1.105 + FD_ZERO(&rfds); 1.106 + FD_SET(_fd, &rfds); 1.107 + } 1.108 + 1.109 + // Now wait for the mem_notify device to wake up 1.110 + while (1) { 1.111 + // Wait for the mem_notify device to signal us.. 1.112 + int rc = select(_fd+1, _fd != -1 ? &rfds : NULL, NULL, NULL, NULL); 1.113 + if (rc == -1) { 1.114 + perror("select!\n"); 1.115 + break; 1.116 + } else if (rc) { 1.117 + //ssize_t free_before = os::available_memory(); 1.118 + //tty->print ("Notified: Free: %dK \n",os::available_memory()/1024); 1.119 + 1.120 + // The kernel is telling us there is not much memory left... 1.121 + // try to do something about that 1.122 + 1.123 + // If we are not already in a GC, try one. 1.124 + if (!Universe::heap()->is_gc_active()) { 1.125 + Universe::heap()->collect(GCCause::_allocation_failure); 1.126 + 1.127 + //ssize_t free_after = os::available_memory(); 1.128 + //tty->print ("Post-Notify: Free: %dK\n",free_after/1024); 1.129 + //tty->print ("GC freed: %dK\n", (free_after - free_before)/1024); 1.130 + } 1.131 + // We might want to do something like the following if we find the GC's are not helping... 1.132 + // Universe::heap()->size_policy()->set_gc_time_limit_exceeded(true); 1.133 + } 1.134 + } 1.135 +} 1.136 + 1.137 +// 1.138 +// See if the /dev/mem_notify device exists, and if so, start a thread to monitor it. 1.139 +// 1.140 +void MemNotifyThread::start() { 1.141 + int fd; 1.142 + fd = open ("/dev/mem_notify", O_RDONLY, 0); 1.143 + if (fd < 0) { 1.144 + return; 1.145 + } 1.146 + 1.147 + if (memnotify_thread() == NULL) { 1.148 + new MemNotifyThread(fd); 1.149 + } 1.150 +} 1.151 +#endif // JAVASE_EMBEDDED
2.1 --- a/src/os/solaris/vm/os_solaris.cpp Thu Jul 07 10:51:07 2011 -0700 2.2 +++ b/src/os/solaris/vm/os_solaris.cpp Tue Jul 12 16:32:25 2011 -0700 2.3 @@ -2317,6 +2317,10 @@ 2.4 return status; 2.5 } 2.6 2.7 +void os::pd_print_cpu_info(outputStream* st) { 2.8 + // Nothing to do for now. 2.9 +} 2.10 + 2.11 void os::print_memory_info(outputStream* st) { 2.12 st->print("Memory:"); 2.13 st->print(" %dk page", os::vm_page_size()>>10);
3.1 --- a/src/os/windows/vm/os_windows.cpp Thu Jul 07 10:51:07 2011 -0700 3.2 +++ b/src/os/windows/vm/os_windows.cpp Tue Jul 12 16:32:25 2011 -0700 3.3 @@ -1720,6 +1720,10 @@ 3.4 st->cr(); 3.5 } 3.6 3.7 +void os::pd_print_cpu_info(outputStream* st) { 3.8 + // Nothing to do for now. 3.9 +} 3.10 + 3.11 void os::print_memory_info(outputStream* st) { 3.12 st->print("Memory:"); 3.13 st->print(" %dk page", os::vm_page_size()>>10);
4.1 --- a/src/os_cpu/linux_x86/vm/assembler_linux_x86.cpp Thu Jul 07 10:51:07 2011 -0700 4.2 +++ b/src/os_cpu/linux_x86/vm/assembler_linux_x86.cpp Tue Jul 12 16:32:25 2011 -0700 4.3 @@ -33,6 +33,28 @@ 4.4 call(RuntimeAddress(CAST_FROM_FN_PTR(address, os::breakpoint))); 4.5 } 4.6 4.7 +#ifdef MINIMIZE_RAM_USAGE 4.8 + 4.9 +void MacroAssembler::get_thread(Register thread) { 4.10 + // call pthread_getspecific 4.11 + // void * pthread_getspecific(pthread_key_t key); 4.12 + if (thread != rax) push(rax); 4.13 + push(rcx); 4.14 + push(rdx); 4.15 + 4.16 + push(ThreadLocalStorage::thread_index()); 4.17 + call(RuntimeAddress(CAST_FROM_FN_PTR(address, pthread_getspecific))); 4.18 + increment(rsp, wordSize); 4.19 + 4.20 + pop(rdx); 4.21 + pop(rcx); 4.22 + if (thread != rax) { 4.23 + mov(thread, rax); 4.24 + pop(rax); 4.25 + } 4.26 +} 4.27 + 4.28 +#else 4.29 void MacroAssembler::get_thread(Register thread) { 4.30 movl(thread, rsp); 4.31 shrl(thread, PAGE_SHIFT); 4.32 @@ -43,6 +65,7 @@ 4.33 4.34 movptr(thread, tls); 4.35 } 4.36 +#endif // MINIMIZE_RAM_USAGE 4.37 #else 4.38 void MacroAssembler::int3() { 4.39 call(RuntimeAddress(CAST_FROM_FN_PTR(address, os::breakpoint)));
5.1 --- a/src/os_cpu/linux_x86/vm/threadLS_linux_x86.cpp Thu Jul 07 10:51:07 2011 -0700 5.2 +++ b/src/os_cpu/linux_x86/vm/threadLS_linux_x86.cpp Tue Jul 12 16:32:25 2011 -0700 5.3 @@ -52,25 +52,20 @@ 5.4 // MADV_DONTNEED on Linux keeps the virtual memory mapping, but zaps the 5.5 // physical memory page (i.e. similar to MADV_FREE on Solaris). 5.6 5.7 -#ifndef AMD64 5.8 +#if !defined(AMD64) && !defined(MINIMIZE_RAM_USAGE) 5.9 Thread* ThreadLocalStorage::_sp_map[1UL << (SP_BITLENGTH - PAGE_SHIFT)]; 5.10 -#endif // !AMD64 5.11 5.12 void ThreadLocalStorage::generate_code_for_get_thread() { 5.13 // nothing we can do here for user-level thread 5.14 } 5.15 5.16 void ThreadLocalStorage::pd_init() { 5.17 -#ifndef AMD64 5.18 assert(align_size_down(os::vm_page_size(), PAGE_SIZE) == os::vm_page_size(), 5.19 "page size must be multiple of PAGE_SIZE"); 5.20 -#endif // !AMD64 5.21 } 5.22 5.23 void ThreadLocalStorage::pd_set_thread(Thread* thread) { 5.24 os::thread_local_storage_at_put(ThreadLocalStorage::thread_index(), thread); 5.25 - 5.26 -#ifndef AMD64 5.27 address stack_top = os::current_stack_base(); 5.28 size_t stack_size = os::current_stack_size(); 5.29 5.30 @@ -88,5 +83,17 @@ 5.31 "thread exited without detaching from VM??"); 5.32 _sp_map[(uintptr_t)p >> PAGE_SHIFT] = thread; 5.33 } 5.34 -#endif // !AMD64 5.35 } 5.36 +#else 5.37 + 5.38 +void ThreadLocalStorage::generate_code_for_get_thread() { 5.39 + // nothing we can do here for user-level thread 5.40 +} 5.41 + 5.42 +void ThreadLocalStorage::pd_init() { 5.43 +} 5.44 + 5.45 +void ThreadLocalStorage::pd_set_thread(Thread* thread) { 5.46 + os::thread_local_storage_at_put(ThreadLocalStorage::thread_index(), thread); 5.47 +} 5.48 +#endif // !AMD64 && !MINIMIZE_RAM_USAGE
6.1 --- a/src/os_cpu/linux_x86/vm/threadLS_linux_x86.hpp Thu Jul 07 10:51:07 2011 -0700 6.2 +++ b/src/os_cpu/linux_x86/vm/threadLS_linux_x86.hpp Tue Jul 12 16:32:25 2011 -0700 6.3 @@ -27,28 +27,32 @@ 6.4 6.5 // Processor dependent parts of ThreadLocalStorage 6.6 6.7 -#ifndef AMD64 6.8 +#if !defined(AMD64) && !defined(MINIMIZE_RAM_USAGE) 6.9 + 6.10 // map stack pointer to thread pointer - see notes in threadLS_linux_x86.cpp 6.11 #define SP_BITLENGTH 32 6.12 #define PAGE_SHIFT 12 6.13 #define PAGE_SIZE (1UL << PAGE_SHIFT) 6.14 static Thread* _sp_map[1UL << (SP_BITLENGTH - PAGE_SHIFT)]; 6.15 -#endif // !AMD64 6.16 6.17 public: 6.18 6.19 -#ifndef AMD64 6.20 static Thread** sp_map_addr() { return _sp_map; } 6.21 -#endif // !AMD64 6.22 6.23 static Thread* thread() { 6.24 -#ifdef AMD64 6.25 - return (Thread*) os::thread_local_storage_at(thread_index()); 6.26 -#else 6.27 uintptr_t sp; 6.28 __asm__ volatile ("movl %%esp, %0" : "=r" (sp)); 6.29 return _sp_map[sp >> PAGE_SHIFT]; 6.30 -#endif // AMD64 6.31 } 6.32 6.33 +#else 6.34 + 6.35 +public: 6.36 + 6.37 + static Thread* thread() { 6.38 + return (Thread*) os::thread_local_storage_at(thread_index()); 6.39 + } 6.40 + 6.41 +#endif // AMD64 || MINIMIZE_RAM_USAGE 6.42 + 6.43 #endif // OS_CPU_LINUX_X86_VM_THREADLS_LINUX_X86_HPP
7.1 --- a/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Thu Jul 07 10:51:07 2011 -0700 7.2 +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Tue Jul 12 16:32:25 2011 -0700 7.3 @@ -2716,6 +2716,10 @@ 7.4 bitMapLock()->unlock(); 7.5 releaseFreelistLocks(); 7.6 7.7 + if (!CleanChunkPoolAsync) { 7.8 + Chunk::clean_chunk_pool(); 7.9 + } 7.10 + 7.11 _between_prologue_and_epilogue = false; // ready for next cycle 7.12 } 7.13
8.1 --- a/src/share/vm/memory/defNewGeneration.cpp Thu Jul 07 10:51:07 2011 -0700 8.2 +++ b/src/share/vm/memory/defNewGeneration.cpp Tue Jul 12 16:32:25 2011 -0700 8.3 @@ -905,6 +905,10 @@ 8.4 to()->check_mangled_unused_area_complete(); 8.5 } 8.6 8.7 + if (!CleanChunkPoolAsync) { 8.8 + Chunk::clean_chunk_pool(); 8.9 + } 8.10 + 8.11 // update the generation and space performance counters 8.12 update_counters(); 8.13 gch->collector_policy()->counters()->update_counters();
9.1 --- a/src/share/vm/memory/genCollectedHeap.cpp Thu Jul 07 10:51:07 2011 -0700 9.2 +++ b/src/share/vm/memory/genCollectedHeap.cpp Tue Jul 12 16:32:25 2011 -0700 9.3 @@ -1384,6 +1384,10 @@ 9.4 generation_iterate(&blk, false); // not old-to-young. 9.5 perm_gen()->gc_epilogue(full); 9.6 9.7 + if (!CleanChunkPoolAsync) { 9.8 + Chunk::clean_chunk_pool(); 9.9 + } 9.10 + 9.11 always_do_update_barrier = UseConcMarkSweepGC; 9.12 }; 9.13
10.1 --- a/src/share/vm/opto/lcm.cpp Thu Jul 07 10:51:07 2011 -0700 10.2 +++ b/src/share/vm/opto/lcm.cpp Tue Jul 12 16:32:25 2011 -0700 10.3 @@ -45,6 +45,9 @@ 10.4 #ifdef TARGET_ARCH_MODEL_arm 10.5 # include "adfiles/ad_arm.hpp" 10.6 #endif 10.7 +#ifdef TARGET_ARCH_MODEL_ppc 10.8 +# include "adfiles/ad_ppc.hpp" 10.9 +#endif 10.10 10.11 // Optimization - Graph Style 10.12
11.1 --- a/src/share/vm/opto/matcher.cpp Thu Jul 07 10:51:07 2011 -0700 11.2 +++ b/src/share/vm/opto/matcher.cpp Tue Jul 12 16:32:25 2011 -0700 11.3 @@ -52,6 +52,9 @@ 11.4 #ifdef TARGET_ARCH_MODEL_arm 11.5 # include "adfiles/ad_arm.hpp" 11.6 #endif 11.7 +#ifdef TARGET_ARCH_MODEL_ppc 11.8 +# include "adfiles/ad_ppc.hpp" 11.9 +#endif 11.10 11.11 OptoReg::Name OptoReg::c_frame_pointer; 11.12
12.1 --- a/src/share/vm/prims/jni.cpp Thu Jul 07 10:51:07 2011 -0700 12.2 +++ b/src/share/vm/prims/jni.cpp Tue Jul 12 16:32:25 2011 -0700 12.3 @@ -70,15 +70,6 @@ 12.4 #include "utilities/dtrace.hpp" 12.5 #include "utilities/events.hpp" 12.6 #include "utilities/histogram.hpp" 12.7 -#ifdef TARGET_ARCH_x86 12.8 -# include "jniTypes_x86.hpp" 12.9 -#endif 12.10 -#ifdef TARGET_ARCH_sparc 12.11 -# include "jniTypes_sparc.hpp" 12.12 -#endif 12.13 -#ifdef TARGET_ARCH_zero 12.14 -# include "jniTypes_zero.hpp" 12.15 -#endif 12.16 #ifdef TARGET_OS_FAMILY_linux 12.17 # include "os_linux.inline.hpp" 12.18 # include "thread_linux.inline.hpp"
13.1 --- a/src/share/vm/runtime/arguments.cpp Thu Jul 07 10:51:07 2011 -0700 13.2 +++ b/src/share/vm/runtime/arguments.cpp Tue Jul 12 16:32:25 2011 -0700 13.3 @@ -37,15 +37,6 @@ 13.4 #include "services/management.hpp" 13.5 #include "utilities/defaultStream.hpp" 13.6 #include "utilities/taskqueue.hpp" 13.7 -#ifdef TARGET_ARCH_x86 13.8 -# include "vm_version_x86.hpp" 13.9 -#endif 13.10 -#ifdef TARGET_ARCH_sparc 13.11 -# include "vm_version_sparc.hpp" 13.12 -#endif 13.13 -#ifdef TARGET_ARCH_zero 13.14 -# include "vm_version_zero.hpp" 13.15 -#endif 13.16 #ifdef TARGET_OS_FAMILY_linux 13.17 # include "os_linux.inline.hpp" 13.18 #endif 13.19 @@ -251,6 +242,11 @@ 13.20 { "UseParallelOldGCDensePrefix", 13.21 JDK_Version::jdk_update(6,27), JDK_Version::jdk(8) }, 13.22 { "AllowTransitionalJSR292", JDK_Version::jdk(7), JDK_Version::jdk(8) }, 13.23 + { "UseCompressedStrings", JDK_Version::jdk(7), JDK_Version::jdk(8) }, 13.24 +#ifdef PRODUCT 13.25 + { "DesiredMethodLimit", 13.26 + JDK_Version::jdk_update(7, 2), JDK_Version::jdk(8) }, 13.27 +#endif // PRODUCT 13.28 { NULL, JDK_Version(0), JDK_Version(0) } 13.29 }; 13.30 13.31 @@ -2912,6 +2908,18 @@ 13.32 } 13.33 } 13.34 13.35 +// Disable options not supported in this release, with a warning if they 13.36 +// were explicitly requested on the command-line 13.37 +#define UNSUPPORTED_OPTION(opt, description) \ 13.38 +do { \ 13.39 + if (opt) { \ 13.40 + if (FLAG_IS_CMDLINE(opt)) { \ 13.41 + warning(description " is disabled in this release."); \ 13.42 + } \ 13.43 + FLAG_SET_DEFAULT(opt, false); \ 13.44 + } \ 13.45 +} while(0) 13.46 + 13.47 // Parse entry point called from JNI_CreateJavaVM 13.48 13.49 jint Arguments::parse(const JavaVMInitArgs* args) { 13.50 @@ -3009,6 +3017,13 @@ 13.51 return result; 13.52 } 13.53 13.54 +#ifdef JAVASE_EMBEDDED 13.55 + #ifdef PPC 13.56 + UNSUPPORTED_OPTION(EnableInvokeDynamic, "Invoke dynamic"); 13.57 + #endif 13.58 + UNSUPPORTED_OPTION(UseG1GC, "G1 GC"); 13.59 +#endif 13.60 + 13.61 #ifndef PRODUCT 13.62 if (TraceBytecodesAt != 0) { 13.63 TraceBytecodes = true;
14.1 --- a/src/share/vm/runtime/atomic.cpp Thu Jul 07 10:51:07 2011 -0700 14.2 +++ b/src/share/vm/runtime/atomic.cpp Tue Jul 12 16:32:25 2011 -0700 14.3 @@ -51,6 +51,12 @@ 14.4 #ifdef TARGET_OS_ARCH_windows_x86 14.5 # include "atomic_windows_x86.inline.hpp" 14.6 #endif 14.7 +#ifdef TARGET_OS_ARCH_linux_arm 14.8 +# include "atomic_linux_arm.inline.hpp" 14.9 +#endif 14.10 +#ifdef TARGET_OS_ARCH_linux_ppc 14.11 +# include "atomic_linux_ppc.inline.hpp" 14.12 +#endif 14.13 14.14 jbyte Atomic::cmpxchg(jbyte exchange_value, volatile jbyte* dest, jbyte compare_value) { 14.15 assert(sizeof(jbyte) == 1, "assumption.");
15.1 --- a/src/share/vm/runtime/globals.hpp Thu Jul 07 10:51:07 2011 -0700 15.2 +++ b/src/share/vm/runtime/globals.hpp Tue Jul 12 16:32:25 2011 -0700 15.3 @@ -343,6 +343,12 @@ 15.4 #define falseInTiered true 15.5 #endif 15.6 15.7 +#ifdef JAVASE_EMBEDDED 15.8 +#define falseInEmbedded false 15.9 +#else 15.10 +#define falseInEmbedded true 15.11 +#endif 15.12 + 15.13 // develop flags are settable / visible only during development and are constant in the PRODUCT version 15.14 // product flags are always settable / visible 15.15 // notproduct flags are settable / visible only during development and are not declared in the PRODUCT version 15.16 @@ -438,6 +444,9 @@ 15.17 product(bool, UsePPCLWSYNC, true, \ 15.18 "Use lwsync instruction if true, else use slower sync") \ 15.19 \ 15.20 + develop(bool, CleanChunkPoolAsync, falseInEmbedded, \ 15.21 + "Whether to clean the chunk pool asynchronously") \ 15.22 + \ 15.23 /* Temporary: See 6948537 */ \ 15.24 experimental(bool, UseMemSetInBOT, true, \ 15.25 "(Unstable) uses memset in BOT updates in GC code") \ 15.26 @@ -3611,13 +3620,9 @@ 15.27 \ 15.28 /* flags for performance data collection */ \ 15.29 \ 15.30 - NOT_EMBEDDED(product(bool, UsePerfData, true, \ 15.31 + product(bool, UsePerfData, falseInEmbedded, \ 15.32 "Flag to disable jvmstat instrumentation for performance testing" \ 15.33 - "and problem isolation purposes.")) \ 15.34 - \ 15.35 - EMBEDDED_ONLY(product(bool, UsePerfData, false, \ 15.36 - "Flag to disable jvmstat instrumentation for performance testing" \ 15.37 - "and problem isolation purposes.")) \ 15.38 + "and problem isolation purposes.") \ 15.39 \ 15.40 product(bool, PerfDataSaveToFile, false, \ 15.41 "Save PerfData memory to hsperfdata_<pid> file on exit") \
16.1 --- a/src/share/vm/runtime/os.cpp Thu Jul 07 10:51:07 2011 -0700 16.2 +++ b/src/share/vm/runtime/os.cpp Tue Jul 12 16:32:25 2011 -0700 16.3 @@ -761,6 +761,7 @@ 16.4 // st->print("(active %d)", os::active_processor_count()); 16.5 st->print(" %s", VM_Version::cpu_features()); 16.6 st->cr(); 16.7 + pd_print_cpu_info(st); 16.8 } 16.9 16.10 void os::print_date_and_time(outputStream *st) {
17.1 --- a/src/share/vm/runtime/os.hpp Thu Jul 07 10:51:07 2011 -0700 17.2 +++ b/src/share/vm/runtime/os.hpp Tue Jul 12 16:32:25 2011 -0700 17.3 @@ -480,6 +480,7 @@ 17.4 // Output format may be different on different platforms. 17.5 static void print_os_info(outputStream* st); 17.6 static void print_cpu_info(outputStream* st); 17.7 + static void pd_print_cpu_info(outputStream* st); 17.8 static void print_memory_info(outputStream* st); 17.9 static void print_dll_info(outputStream* st); 17.10 static void print_environment_variables(outputStream* st, const char** env_list, char* buffer, int len);
18.1 --- a/src/share/vm/runtime/thread.cpp Thu Jul 07 10:51:07 2011 -0700 18.2 +++ b/src/share/vm/runtime/thread.cpp Tue Jul 12 16:32:25 2011 -0700 18.3 @@ -3347,7 +3347,9 @@ 18.4 // Notify JVMTI agents that VM initialization is complete - nop if no agents. 18.5 JvmtiExport::post_vm_initialized(); 18.6 18.7 - Chunk::start_chunk_pool_cleaner_task(); 18.8 + if (CleanChunkPoolAsync) { 18.9 + Chunk::start_chunk_pool_cleaner_task(); 18.10 + } 18.11 18.12 // initialize compiler(s) 18.13 CompileBroker::compilation_init();