src/share/vm/runtime/sweeper.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/runtime/sweeper.hpp	Mon Oct 13 17:32:20 2014
--- new/src/share/vm/runtime/sweeper.hpp	Mon Oct 13 17:32:19 2014

*** 47,59 **** --- 47,57 ---- // we have to wait until the next marking phase has completed. If a not-entrant // nmethod was NOT marked as active, it can be converted to 'zombie' state. To safely // remove the nmethod, all inline caches (IC) that point to the the nmethod must be // cleared. After that, the nmethod can be evicted from the code cache. Each nmethod's // state change happens during separate sweeps. It may take at least 3 sweeps before an - // nmethod's space is freed. Sweeping is currently done by compiler threads between // compilations or at least each 5 sec (NmethodSweepCheckInterval) when the code cache // is full. class NMethodSweeper : public AllStatic { static long _traversals; // Stack scan count, also sweep ID. static long _total_nof_code_cache_sweeps; // Total number of full sweeps of the code cache static long _time_counter; // Virtual time used to periodically invoke sweeper
*** 62,72 **** --- 60,69 ---- static int _seen; // Nof. nmethod we have currently processed in current pass of CodeCache static int _flushed_count; // Nof. nmethods flushed in current sweep static int _zombified_count; // Nof. nmethods made zombie in current sweep static int _marked_for_reclamation_count; // Nof. nmethods marked for reclaim in current sweep static volatile int _sweep_fractions_left; // Nof. invocations left until we are completed with this pass static volatile int _sweep_started; // Flag to control conc sweeper static volatile bool _should_sweep; // Indicates if we should invoke the sweeper static volatile int _bytes_changed; // Counts the total nmethod size if the nmethod changed from: // 1) alive -> not_entrant // 2) not_entrant -> zombie
*** 83,94 **** --- 80,95 ---- static Tickspan _peak_sweep_fraction_time; // Peak time sweeping one fraction static int process_nmethod(nmethod *nm); static void release_nmethod(nmethod* nm); ! static bool sweep_in_progress(); ! static void init_log_sweeer() NOT_DEBUG_RETURN; + static bool wait_for_stack_scanning(); static void sweep_code_cache(); + static void handle_safepoint_request(); + static void do_stack_scanning(); + static void possibly_sweep(); public: static long traversal_count() { return _traversals; } static int total_nof_methods_reclaimed() { return _total_nof_methods_reclaimed; } static const Tickspan total_time_sweeping() { return _total_time_sweeping; }
*** 104,114 **** --- 105,116 ---- static void report_events(int id, address entry); static void report_events(); #endif static void mark_active_nmethods(); // Invoked at the end of each safepoint ! static void possibly_sweep(); // Compiler threads call this to sweep ! static void sweeper_loop(); + static void notify(int code_blob_type); // Possibly start the sweeper thread. static int hotness_counter_reset_val(); static void report_state_change(nmethod* nm); static void possibly_enable_sweeper(); static void possibly_flush(nmethod* nm);

src/share/vm/runtime/sweeper.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File