-
Enhancement
-
Resolution: Unresolved
-
P4
-
23
`nmethod::dependencies_begin()` is used in `Dependencies::DepStream(nmethod*)` which has the following uses
- `nmethod::new_nmethod` for compiled Java method: It is used for `add_dependent_nmethod` methods. Evol_method dependencies are skipped.
- `nmethod::flush_dependencies`: It is used for `clean_dependency_context` methods. Evol_method dependencies are skipped.
- `nmethod::check_all_dependencies`: It is used in `CodeCache::mark_for_deoptimization(DeoptimizationScope*, KlassDepChange&)` in non-product builds when VerifyDependencies is on. All dependencies are checked.
- `nmethod::check_dependency_on`: It is used in `DependencyContext::mark_dependent_nmethods`. Evol_method dependencies are ignored.
- `nmethod::is_dependent_on_method`: It is used in `CodeCache::mark_for_deoptimization(DeoptimizationScope*, Method*)` which is used in `CodeCache::mark_dependents_on_method_for_breakpoint` which is used in `BreakpointInfo::set`. These are actual uses of evol_method dependencies.
- `nmethod::print_dependencies_on`: It outputs nmethod's dependencies in non-product builds.
From the uses we can see nmethod evol_method dependencies in nmethod's dependencies section are needed only when it is a non-product build or the JVMTI `can_generate_breakpoint_events` capability is requested.
- `nmethod::new_nmethod` for compiled Java method: It is used for `add_dependent_nmethod` methods. Evol_method dependencies are skipped.
- `nmethod::flush_dependencies`: It is used for `clean_dependency_context` methods. Evol_method dependencies are skipped.
- `nmethod::check_all_dependencies`: It is used in `CodeCache::mark_for_deoptimization(DeoptimizationScope*, KlassDepChange&)` in non-product builds when VerifyDependencies is on. All dependencies are checked.
- `nmethod::check_dependency_on`: It is used in `DependencyContext::mark_dependent_nmethods`. Evol_method dependencies are ignored.
- `nmethod::is_dependent_on_method`: It is used in `CodeCache::mark_for_deoptimization(DeoptimizationScope*, Method*)` which is used in `CodeCache::mark_dependents_on_method_for_breakpoint` which is used in `BreakpointInfo::set`. These are actual uses of evol_method dependencies.
- `nmethod::print_dependencies_on`: It outputs nmethod's dependencies in non-product builds.
From the uses we can see nmethod evol_method dependencies in nmethod's dependencies section are needed only when it is a non-product build or the JVMTI `can_generate_breakpoint_events` capability is requested.
- relates to
-
JDK-8324241 Always record evol_method deps to avoid excessive method flushing
- Resolved