Mercurial > hg > graal-compiler
comparison src/share/vm/runtime/sweeper.hpp @ 14909:4ca6dc0799b6
Backout jdk9 merge
author | Gilles Duboscq <duboscq@ssw.jku.at> |
---|---|
date | Tue, 01 Apr 2014 13:57:07 +0200 |
parents | 49a31fd8b93d |
children | 52b4284cb496 |
comparison
equal
deleted
inserted
replaced
14908:8db6e76cb658 | 14909:4ca6dc0799b6 |
---|---|
52 // nmethod's space is freed. Sweeping is currently done by compiler threads between | 52 // nmethod's space is freed. Sweeping is currently done by compiler threads between |
53 // compilations or at least each 5 sec (NmethodSweepCheckInterval) when the code cache | 53 // compilations or at least each 5 sec (NmethodSweepCheckInterval) when the code cache |
54 // is full. | 54 // is full. |
55 | 55 |
56 class NMethodSweeper : public AllStatic { | 56 class NMethodSweeper : public AllStatic { |
57 static long _traversals; // Stack scan count, also sweep ID. | 57 static long _traversals; // Stack scan count, also sweep ID. |
58 static long _total_nof_code_cache_sweeps; // Total number of full sweeps of the code cache | 58 static long _time_counter; // Virtual time used to periodically invoke sweeper |
59 static long _time_counter; // Virtual time used to periodically invoke sweeper | 59 static long _last_sweep; // Value of _time_counter when the last sweep happened |
60 static long _last_sweep; // Value of _time_counter when the last sweep happened | 60 static nmethod* _current; // Current nmethod |
61 static nmethod* _current; // Current nmethod | 61 static int _seen; // Nof. nmethod we have currently processed in current pass of CodeCache |
62 static int _seen; // Nof. nmethod we have currently processed in current pass of CodeCache | 62 static int _flushed_count; // Nof. nmethods flushed in current sweep |
63 static int _flushed_count; // Nof. nmethods flushed in current sweep | 63 static int _zombified_count; // Nof. nmethods made zombie in current sweep |
64 static int _zombified_count; // Nof. nmethods made zombie in current sweep | 64 static int _marked_for_reclamation_count; // Nof. nmethods marked for reclaim in current sweep |
65 static int _marked_for_reclamation_count; // Nof. nmethods marked for reclaim in current sweep | |
66 | 65 |
67 static volatile int _sweep_fractions_left; // Nof. invocations left until we are completed with this pass | 66 static volatile int _sweep_fractions_left; // Nof. invocations left until we are completed with this pass |
68 static volatile int _sweep_started; // Flag to control conc sweeper | 67 static volatile int _sweep_started; // Flag to control conc sweeper |
69 static volatile bool _should_sweep; // Indicates if we should invoke the sweeper | 68 static volatile bool _should_sweep; // Indicates if we should invoke the sweeper |
70 static volatile int _bytes_changed; // Counts the total nmethod size if the nmethod changed from: | 69 static volatile int _bytes_changed; // Counts the total nmethod size if the nmethod changed from: |
71 // 1) alive -> not_entrant | 70 // 1) alive -> not_entrant |
72 // 2) not_entrant -> zombie | 71 // 2) not_entrant -> zombie |
73 // 3) zombie -> marked_for_reclamation | 72 // 3) zombie -> marked_for_reclamation |
74 // Stat counters | 73 // Stat counters |
75 static long _total_nof_methods_reclaimed; // Accumulated nof methods flushed | 74 static int _total_nof_methods_reclaimed; // Accumulated nof methods flushed |
76 static long _total_nof_c2_methods_reclaimed; // Accumulated nof C2-compiled methods flushed | 75 static Tickspan _total_time_sweeping; // Accumulated time sweeping |
77 static size_t _total_flushed_size; // Total size of flushed methods | 76 static Tickspan _total_time_this_sweep; // Total time this sweep |
78 static int _hotness_counter_reset_val; | 77 static Tickspan _peak_sweep_time; // Peak time for a full sweep |
79 | 78 static Tickspan _peak_sweep_fraction_time; // Peak time sweeping one fraction |
80 static Tickspan _total_time_sweeping; // Accumulated time sweeping | |
81 static Tickspan _total_time_this_sweep; // Total time this sweep | |
82 static Tickspan _peak_sweep_time; // Peak time for a full sweep | |
83 static Tickspan _peak_sweep_fraction_time; // Peak time sweeping one fraction | |
84 | 79 |
85 static int process_nmethod(nmethod *nm); | 80 static int process_nmethod(nmethod *nm); |
86 static void release_nmethod(nmethod* nm); | 81 static void release_nmethod(nmethod* nm); |
87 | 82 |
88 static bool sweep_in_progress(); | 83 static bool sweep_in_progress(); |
89 static void sweep_code_cache(); | 84 static void sweep_code_cache(); |
85 | |
86 static int _hotness_counter_reset_val; | |
90 | 87 |
91 public: | 88 public: |
92 static long traversal_count() { return _traversals; } | 89 static long traversal_count() { return _traversals; } |
93 static int total_nof_methods_reclaimed() { return _total_nof_methods_reclaimed; } | 90 static int total_nof_methods_reclaimed() { return _total_nof_methods_reclaimed; } |
94 static const Tickspan total_time_sweeping() { return _total_time_sweeping; } | 91 static const Tickspan total_time_sweeping() { return _total_time_sweeping; } |
106 #endif | 103 #endif |
107 | 104 |
108 static void mark_active_nmethods(); // Invoked at the end of each safepoint | 105 static void mark_active_nmethods(); // Invoked at the end of each safepoint |
109 static void possibly_sweep(); // Compiler threads call this to sweep | 106 static void possibly_sweep(); // Compiler threads call this to sweep |
110 | 107 |
108 static int sort_nmethods_by_hotness(nmethod** nm1, nmethod** nm2); | |
111 static int hotness_counter_reset_val(); | 109 static int hotness_counter_reset_val(); |
112 static void report_state_change(nmethod* nm); | 110 static void report_state_change(nmethod* nm); |
113 static void possibly_enable_sweeper(); | 111 static void possibly_enable_sweeper(); |
114 static void print(); // Printing/debugging | |
115 }; | 112 }; |
116 | 113 |
117 #endif // SHARE_VM_RUNTIME_SWEEPER_HPP | 114 #endif // SHARE_VM_RUNTIME_SWEEPER_HPP |