42 set_name("StrDedup"); 43 create_and_start(); 44 } 45 46 StringDedupThread::~StringDedupThread() { 47 ShouldNotReachHere(); 48 } 49 50 StringDedupThread* StringDedupThread::thread() { 51 assert(_thread != NULL, "String deduplication thread not created"); 52 return _thread; 53 } 54 55 class StringDedupSharedClosure: public OopClosure { 56 private: 57 StringDedupStat* _stat; 58 59 public: 60 StringDedupSharedClosure(StringDedupStat* stat) : _stat(stat) {} 61 62 virtual void do_oop(oop* p) { ShouldNotReachHere(); } 63 virtual void do_oop(narrowOop* p) { 64 oop java_string = RawAccess<>::oop_load(p); 65 StringDedupTable::deduplicate(java_string, _stat); 66 } 67 }; 68 69 // The CDS archive does not include the string dedupication table. Only the string 70 // table is saved in the archive. The shared strings from CDS archive need to be 71 // added to the string dedupication table before deduplication occurs. That is 72 // done in the begining of the StringDedupThread (see StringDedupThread::do_deduplication()). 73 void StringDedupThread::deduplicate_shared_strings(StringDedupStat* stat) { 74 StringDedupSharedClosure sharedStringDedup(stat); 75 StringTable::shared_oops_do(&sharedStringDedup); 76 } 77 78 void StringDedupThread::stop_service() { 79 StringDedupQueue::cancel_wait(); 80 } 81 82 void StringDedupThread::print_start(const StringDedupStat* last_stat) { 83 StringDedupStat::print_start(last_stat); | 42 set_name("StrDedup"); 43 create_and_start(); 44 } 45 46 StringDedupThread::~StringDedupThread() { 47 ShouldNotReachHere(); 48 } 49 50 StringDedupThread* StringDedupThread::thread() { 51 assert(_thread != NULL, "String deduplication thread not created"); 52 return _thread; 53 } 54 55 class StringDedupSharedClosure: public OopClosure { 56 private: 57 StringDedupStat* _stat; 58 59 public: 60 StringDedupSharedClosure(StringDedupStat* stat) : _stat(stat) {} 61 62 virtual void do_oop(narrowOop* p) { ShouldNotReachHere(); } 63 virtual void do_oop(oop* p) { 64 oop java_string = RawAccess<>::oop_load(p); 65 StringDedupTable::deduplicate(java_string, _stat); 66 } 67 }; 68 69 // The CDS archive does not include the string dedupication table. Only the string 70 // table is saved in the archive. The shared strings from CDS archive need to be 71 // added to the string dedupication table before deduplication occurs. That is 72 // done in the begining of the StringDedupThread (see StringDedupThread::do_deduplication()). 73 void StringDedupThread::deduplicate_shared_strings(StringDedupStat* stat) { 74 StringDedupSharedClosure sharedStringDedup(stat); 75 StringTable::shared_oops_do(&sharedStringDedup); 76 } 77 78 void StringDedupThread::stop_service() { 79 StringDedupQueue::cancel_wait(); 80 } 81 82 void StringDedupThread::print_start(const StringDedupStat* last_stat) { 83 StringDedupStat::print_start(last_stat); |