Mercurial > hg > truffle
comparison src/share/vm/runtime/sweeper.hpp @ 17612:6aa49042b101
8025277: Add -XX: flag to print code cache sweeper statistics
Summary: New diagnostic flag prints statistics about the code cache sweeper
Reviewed-by: kvn
Contributed-by: tobi.hartmann@gmail.com
author | anoll |
---|---|
date | Thu, 19 Dec 2013 14:08:02 +0100 |
parents | 86e6d691f2e1 |
children | 4ca6dc0799b6 78bbf4d43a14 |
comparison
equal
deleted
inserted
replaced
17611:d6e7180abab5 | 17612:6aa49042b101 |
---|---|
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 _time_counter; // Virtual time used to periodically invoke sweeper | 58 static long _total_nof_code_cache_sweeps; // Total number of full sweeps of the code cache |
59 static long _last_sweep; // Value of _time_counter when the last sweep happened | 59 static long _time_counter; // Virtual time used to periodically invoke sweeper |
60 static nmethod* _current; // Current nmethod | 60 static long _last_sweep; // Value of _time_counter when the last sweep happened |
61 static int _seen; // Nof. nmethod we have currently processed in current pass of CodeCache | 61 static nmethod* _current; // Current nmethod |
62 static int _flushed_count; // Nof. nmethods flushed in current sweep | 62 static int _seen; // Nof. nmethod we have currently processed in current pass of CodeCache |
63 static int _zombified_count; // Nof. nmethods made zombie in current sweep | 63 static int _flushed_count; // Nof. nmethods flushed in current sweep |
64 static int _marked_for_reclamation_count; // Nof. nmethods marked for reclaim in current sweep | 64 static int _zombified_count; // Nof. nmethods made zombie in current sweep |
65 static int _marked_for_reclamation_count; // Nof. nmethods marked for reclaim in current sweep | |
65 | 66 |
66 static volatile int _sweep_fractions_left; // Nof. invocations left until we are completed with this pass | 67 static volatile int _sweep_fractions_left; // Nof. invocations left until we are completed with this pass |
67 static volatile int _sweep_started; // Flag to control conc sweeper | 68 static volatile int _sweep_started; // Flag to control conc sweeper |
68 static volatile bool _should_sweep; // Indicates if we should invoke the sweeper | 69 static volatile bool _should_sweep; // Indicates if we should invoke the sweeper |
69 static volatile int _bytes_changed; // Counts the total nmethod size if the nmethod changed from: | 70 static volatile int _bytes_changed; // Counts the total nmethod size if the nmethod changed from: |
70 // 1) alive -> not_entrant | 71 // 1) alive -> not_entrant |
71 // 2) not_entrant -> zombie | 72 // 2) not_entrant -> zombie |
72 // 3) zombie -> marked_for_reclamation | 73 // 3) zombie -> marked_for_reclamation |
73 // Stat counters | 74 // Stat counters |
74 static int _total_nof_methods_reclaimed; // Accumulated nof methods flushed | 75 static long _total_nof_methods_reclaimed; // Accumulated nof methods flushed |
75 static Tickspan _total_time_sweeping; // Accumulated time sweeping | 76 static long _total_nof_c2_methods_reclaimed; // Accumulated nof C2-compiled methods flushed |
76 static Tickspan _total_time_this_sweep; // Total time this sweep | 77 static size_t _total_flushed_size; // Total size of flushed methods |
77 static Tickspan _peak_sweep_time; // Peak time for a full sweep | 78 static int _hotness_counter_reset_val; |
78 static Tickspan _peak_sweep_fraction_time; // Peak time sweeping one fraction | 79 |
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 | |
79 | 84 |
80 static int process_nmethod(nmethod *nm); | 85 static int process_nmethod(nmethod *nm); |
81 static void release_nmethod(nmethod* nm); | 86 static void release_nmethod(nmethod* nm); |
82 | 87 |
83 static bool sweep_in_progress(); | 88 static bool sweep_in_progress(); |
84 static void sweep_code_cache(); | 89 static void sweep_code_cache(); |
85 | |
86 static int _hotness_counter_reset_val; | |
87 | 90 |
88 public: | 91 public: |
89 static long traversal_count() { return _traversals; } | 92 static long traversal_count() { return _traversals; } |
90 static int total_nof_methods_reclaimed() { return _total_nof_methods_reclaimed; } | 93 static int total_nof_methods_reclaimed() { return _total_nof_methods_reclaimed; } |
91 static const Tickspan total_time_sweeping() { return _total_time_sweeping; } | 94 static const Tickspan total_time_sweeping() { return _total_time_sweeping; } |
103 #endif | 106 #endif |
104 | 107 |
105 static void mark_active_nmethods(); // Invoked at the end of each safepoint | 108 static void mark_active_nmethods(); // Invoked at the end of each safepoint |
106 static void possibly_sweep(); // Compiler threads call this to sweep | 109 static void possibly_sweep(); // Compiler threads call this to sweep |
107 | 110 |
108 static int sort_nmethods_by_hotness(nmethod** nm1, nmethod** nm2); | |
109 static int hotness_counter_reset_val(); | 111 static int hotness_counter_reset_val(); |
110 static void report_state_change(nmethod* nm); | 112 static void report_state_change(nmethod* nm); |
111 static void possibly_enable_sweeper(); | 113 static void possibly_enable_sweeper(); |
114 static void print(); // Printing/debugging | |
112 }; | 115 }; |
113 | 116 |
114 #endif // SHARE_VM_RUNTIME_SWEEPER_HPP | 117 #endif // SHARE_VM_RUNTIME_SWEEPER_HPP |