Mercurial > hg > truffle
comparison src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp @ 20282:f3aeae1f9fc5
8048269: Add flag to turn off class unloading after G1 concurrent mark
Summary: Added -XX:+/-ClassUnloadingWithConcurrentMark
Reviewed-by: jmasa, brutisso, mgerdin
author | stefank |
---|---|
date | Wed, 06 Aug 2014 09:55:16 +0200 |
parents | 870c03421152 |
children | e0954897238a a22acf6d7598 |
comparison
equal
deleted
inserted
replaced
20281:684a5dec6072 | 20282:f3aeae1f9fc5 |
---|---|
4858 CodeBlobClosure* strong_code_cl; | 4858 CodeBlobClosure* strong_code_cl; |
4859 | 4859 |
4860 if (_g1h->g1_policy()->during_initial_mark_pause()) { | 4860 if (_g1h->g1_policy()->during_initial_mark_pause()) { |
4861 // We also need to mark copied objects. | 4861 // We also need to mark copied objects. |
4862 strong_root_cl = &scan_mark_root_cl; | 4862 strong_root_cl = &scan_mark_root_cl; |
4863 weak_root_cl = &scan_mark_weak_root_cl; | |
4864 strong_cld_cl = &scan_mark_cld_cl; | 4863 strong_cld_cl = &scan_mark_cld_cl; |
4865 weak_cld_cl = &scan_mark_weak_cld_cl; | |
4866 strong_code_cl = &scan_mark_code_cl; | 4864 strong_code_cl = &scan_mark_code_cl; |
4865 if (ClassUnloadingWithConcurrentMark) { | |
4866 weak_root_cl = &scan_mark_weak_root_cl; | |
4867 weak_cld_cl = &scan_mark_weak_cld_cl; | |
4868 } else { | |
4869 weak_root_cl = &scan_mark_root_cl; | |
4870 weak_cld_cl = &scan_mark_cld_cl; | |
4871 } | |
4867 } else { | 4872 } else { |
4868 strong_root_cl = &scan_only_root_cl; | 4873 strong_root_cl = &scan_only_root_cl; |
4869 weak_root_cl = &scan_only_root_cl; | 4874 weak_root_cl = &scan_only_root_cl; |
4870 strong_cld_cl = &scan_only_cld_cl; | 4875 strong_cld_cl = &scan_only_cld_cl; |
4871 weak_cld_cl = &scan_only_cld_cl; | 4876 weak_cld_cl = &scan_only_cld_cl; |
4932 // First scan the shared roots. | 4937 // First scan the shared roots. |
4933 double ext_roots_start = os::elapsedTime(); | 4938 double ext_roots_start = os::elapsedTime(); |
4934 double closure_app_time_sec = 0.0; | 4939 double closure_app_time_sec = 0.0; |
4935 | 4940 |
4936 bool during_im = _g1h->g1_policy()->during_initial_mark_pause(); | 4941 bool during_im = _g1h->g1_policy()->during_initial_mark_pause(); |
4942 bool trace_metadata = during_im && ClassUnloadingWithConcurrentMark; | |
4937 | 4943 |
4938 BufferingOopClosure buf_scan_non_heap_roots(scan_non_heap_roots); | 4944 BufferingOopClosure buf_scan_non_heap_roots(scan_non_heap_roots); |
4939 BufferingOopClosure buf_scan_non_heap_weak_roots(scan_non_heap_weak_roots); | 4945 BufferingOopClosure buf_scan_non_heap_weak_roots(scan_non_heap_weak_roots); |
4940 | 4946 |
4941 process_roots(false, // no scoping; this is parallel code | 4947 process_roots(false, // no scoping; this is parallel code |
4942 SharedHeap::SO_None, | 4948 SharedHeap::SO_None, |
4943 &buf_scan_non_heap_roots, | 4949 &buf_scan_non_heap_roots, |
4944 &buf_scan_non_heap_weak_roots, | 4950 &buf_scan_non_heap_weak_roots, |
4945 scan_strong_clds, | 4951 scan_strong_clds, |
4946 // Initial Mark handles the weak CLDs separately. | 4952 // Unloading Initial Marks handle the weak CLDs separately. |
4947 (during_im ? NULL : scan_weak_clds), | 4953 (trace_metadata ? NULL : scan_weak_clds), |
4948 scan_strong_code); | 4954 scan_strong_code); |
4949 | 4955 |
4950 // Now the CM ref_processor roots. | 4956 // Now the CM ref_processor roots. |
4951 if (!_process_strong_tasks->is_task_claimed(G1H_PS_refProcessor_oops_do)) { | 4957 if (!_process_strong_tasks->is_task_claimed(G1H_PS_refProcessor_oops_do)) { |
4952 // We need to treat the discovered reference lists of the | 4958 // We need to treat the discovered reference lists of the |
4954 // (which are added by the marking threads) on them live | 4960 // (which are added by the marking threads) on them live |
4955 // until they can be processed at the end of marking. | 4961 // until they can be processed at the end of marking. |
4956 ref_processor_cm()->weak_oops_do(&buf_scan_non_heap_roots); | 4962 ref_processor_cm()->weak_oops_do(&buf_scan_non_heap_roots); |
4957 } | 4963 } |
4958 | 4964 |
4959 if (during_im) { | 4965 if (trace_metadata) { |
4960 // Barrier to make sure all workers passed | 4966 // Barrier to make sure all workers passed |
4961 // the strong CLD and strong nmethods phases. | 4967 // the strong CLD and strong nmethods phases. |
4962 active_strong_roots_scope()->wait_until_all_workers_done_with_threads(n_par_threads()); | 4968 active_strong_roots_scope()->wait_until_all_workers_done_with_threads(n_par_threads()); |
4963 | 4969 |
4964 // Now take the complement of the strong CLDs. | 4970 // Now take the complement of the strong CLDs. |