370 void verify_metadata_loaders(address low_boundary); |
370 void verify_metadata_loaders(address low_boundary); |
371 |
371 |
372 virtual void do_unloading(BoolObjectClosure* is_alive, bool unloading_occurred); |
372 virtual void do_unloading(BoolObjectClosure* is_alive, bool unloading_occurred); |
373 // The parallel versions are used by G1. |
373 // The parallel versions are used by G1. |
374 virtual bool do_unloading_parallel(BoolObjectClosure* is_alive, bool unloading_occurred); |
374 virtual bool do_unloading_parallel(BoolObjectClosure* is_alive, bool unloading_occurred); |
375 virtual void do_unloading_parallel_postponed(BoolObjectClosure* is_alive, bool unloading_occurred); |
375 virtual void do_unloading_parallel_postponed(); |
376 |
376 |
377 static unsigned char global_unloading_clock() { return _global_unloading_clock; } |
377 static unsigned char global_unloading_clock() { return _global_unloading_clock; } |
378 static void increase_unloading_clock(); |
378 static void increase_unloading_clock(); |
379 |
379 |
380 void set_unloading_clock(unsigned char unloading_clock); |
380 void set_unloading_clock(unsigned char unloading_clock); |
381 unsigned char unloading_clock(); |
381 unsigned char unloading_clock(); |
382 |
382 |
383 protected: |
383 protected: |
384 virtual bool do_unloading_oops(address low_boundary, BoolObjectClosure* is_alive, bool unloading_occurred) = 0; |
384 virtual bool do_unloading_oops(address low_boundary, BoolObjectClosure* is_alive, bool unloading_occurred) = 0; |
385 #if INCLUDE_JVMCI |
385 #if INCLUDE_JVMCI |
386 virtual bool do_unloading_jvmci(BoolObjectClosure* is_alive, bool unloading_occurred) = 0; |
386 virtual bool do_unloading_jvmci(bool unloading_occurred) = 0; |
387 #endif |
387 #endif |
388 |
388 |
389 private: |
389 private: |
390 // GC support to help figure out if an nmethod has been |
390 // GC support to help figure out if an nmethod has been |
391 // cleaned/unloaded by the current GC. |
391 // cleaned/unloaded by the current GC. |