-
Enhancement
-
Resolution: Unresolved
-
P4
-
11
Optimize the reference processing phases for Remark; some of the operations done are not required at all, just wasting time. ~kbarrett explains this:
"For concurrent marking, except for finalize references (and soft references during phase1), keep_alive is an expensive nop; the call to deal_with_reference will call make_reference_grey, which will find the object is already marked (else the is_alive closure would have said no, and we wouldn't even be calling the keep_alive closure). So if increasing the drain interval gives a significant performance improvement, we could cut off that part of things by somehow noticing that keep_alive didn't do anything (ideally by not calling it at all :), That latter probably requires a change to the ReferenceProcessor API."
There are probably more "shortcuts" that can be made for non-moving reference processing.
"For concurrent marking, except for finalize references (and soft references during phase1), keep_alive is an expensive nop; the call to deal_with_reference will call make_reference_grey, which will find the object is already marked (else the is_alive closure would have said no, and we wouldn't even be calling the keep_alive closure). So if increasing the drain interval gives a significant performance improvement, we could cut off that part of things by somehow noticing that keep_alive didn't do anything (ideally by not calling it at all :), That latter probably requires a change to the ReferenceProcessor API."
There are probably more "shortcuts" that can be made for non-moving reference processing.
- relates to
-
JDK-8201487 Do not rebalance reference processing queues if not doing parallel reference processing
- Resolved
-
JDK-8201490 Improve concurrent mark keep alive closure performance
- Resolved