24 |
24 |
25 #ifndef SHARE_GC_SHARED_CONCURRENTGCTHREAD_HPP |
25 #ifndef SHARE_GC_SHARED_CONCURRENTGCTHREAD_HPP |
26 #define SHARE_GC_SHARED_CONCURRENTGCTHREAD_HPP |
26 #define SHARE_GC_SHARED_CONCURRENTGCTHREAD_HPP |
27 |
27 |
28 #include "runtime/thread.hpp" |
28 #include "runtime/thread.hpp" |
29 #include "utilities/macros.hpp" |
|
30 |
29 |
31 class ConcurrentGCThread: public NamedThread { |
30 class ConcurrentGCThread: public NamedThread { |
32 friend class VMStructs; |
31 private: |
33 |
32 volatile bool _should_terminate; |
34 bool volatile _should_terminate; |
33 volatile bool _has_terminated; |
35 bool _has_terminated; |
|
36 |
|
37 // Do initialization steps in the thread: record stack base and size, |
|
38 // init thread local storage, set JNI handle block. |
|
39 void initialize_in_thread(); |
|
40 |
|
41 // Wait until Universe::is_fully_initialized(); |
|
42 void wait_for_universe_init(); |
|
43 |
|
44 // Record that the current thread is terminating, and will do more |
|
45 // concurrent work. |
|
46 void terminate(); |
|
47 |
34 |
48 protected: |
35 protected: |
49 // Create and start the thread (setting it's priority.) |
|
50 void create_and_start(ThreadPriority prio = NearMaxPriority); |
36 void create_and_start(ThreadPriority prio = NearMaxPriority); |
51 |
37 |
52 // Do the specific GC work. Called by run() after initialization complete. |
|
53 virtual void run_service() = 0; |
38 virtual void run_service() = 0; |
54 |
39 virtual void stop_service() = 0; |
55 // Shut down the specific GC work. Called by stop() as part of termination protocol. |
|
56 virtual void stop_service() = 0; |
|
57 |
40 |
58 public: |
41 public: |
59 ConcurrentGCThread(); |
42 ConcurrentGCThread(); |
60 |
43 |
61 // Tester |
44 virtual bool is_ConcurrentGC_thread() const { return true; } |
62 bool is_ConcurrentGC_thread() const { return true; } |
|
63 |
45 |
64 virtual void run(); |
46 virtual void run(); |
65 |
|
66 // shutdown following termination protocol |
|
67 virtual void stop(); |
47 virtual void stop(); |
68 |
48 |
69 bool should_terminate() { return _should_terminate; } |
49 bool should_terminate() const; |
70 bool has_terminated() { return _has_terminated; } |
50 bool has_terminated() const; |
71 }; |
51 }; |
72 |
52 |
73 #endif // SHARE_GC_SHARED_CONCURRENTGCTHREAD_HPP |
53 #endif // SHARE_GC_SHARED_CONCURRENTGCTHREAD_HPP |