26 #define SHARE_GC_SHARED_STRINGDEDUP_STRINGDEDUPTHREAD_HPP
27
28 #include "gc/shared/concurrentGCThread.hpp"
29 #include "gc/shared/stringdedup/stringDedupStat.hpp"
30
31 //
32 // The deduplication thread is where the actual deduplication occurs. It waits for
33 // deduplication candidates to appear on the deduplication queue, removes them from
34 // the queue and tries to deduplicate them. It uses the deduplication hashtable to
35 // find identical, already existing, character arrays on the heap. The thread runs
36 // concurrently with the Java application but participates in safepoints to allow
37 // the GC to adjust and unlink oops from the deduplication queue and table.
38 //
39 class StringDedupThread: public ConcurrentGCThread {
40 protected:
41 static StringDedupThread* _thread;
42
43 StringDedupThread();
44 ~StringDedupThread();
45
46 void print_start(const StringDedupStat* last_stat);
47 void print_end(const StringDedupStat* last_stat, const StringDedupStat* total_stat);
48
49 void run_service() { this->do_deduplication(); }
50 void stop_service();
51
52 void deduplicate_shared_strings(StringDedupStat* stat);
53 protected:
54 virtual void do_deduplication() = 0;
55
56 public:
57 static StringDedupThread* thread();
58 };
59
60 template <typename S>
61 class StringDedupThreadImpl : public StringDedupThread {
62 private:
63 StringDedupThreadImpl() { }
64
65 protected:
|
26 #define SHARE_GC_SHARED_STRINGDEDUP_STRINGDEDUPTHREAD_HPP
27
28 #include "gc/shared/concurrentGCThread.hpp"
29 #include "gc/shared/stringdedup/stringDedupStat.hpp"
30
31 //
32 // The deduplication thread is where the actual deduplication occurs. It waits for
33 // deduplication candidates to appear on the deduplication queue, removes them from
34 // the queue and tries to deduplicate them. It uses the deduplication hashtable to
35 // find identical, already existing, character arrays on the heap. The thread runs
36 // concurrently with the Java application but participates in safepoints to allow
37 // the GC to adjust and unlink oops from the deduplication queue and table.
38 //
39 class StringDedupThread: public ConcurrentGCThread {
40 protected:
41 static StringDedupThread* _thread;
42
43 StringDedupThread();
44 ~StringDedupThread();
45
46 virtual bool is_StringDedup_thread() const { return true; }
47
48 void print_start(const StringDedupStat* last_stat);
49 void print_end(const StringDedupStat* last_stat, const StringDedupStat* total_stat);
50
51 void run_service() { this->do_deduplication(); }
52 void stop_service();
53
54 void deduplicate_shared_strings(StringDedupStat* stat);
55 protected:
56 virtual void do_deduplication() = 0;
57
58 public:
59 static StringDedupThread* thread();
60 };
61
62 template <typename S>
63 class StringDedupThreadImpl : public StringDedupThread {
64 private:
65 StringDedupThreadImpl() { }
66
67 protected:
|