Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
55a8f298
D
dragonwell8_hotspot
项目概览
openanolis
/
dragonwell8_hotspot
通知
2
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_hotspot
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
55a8f298
编写于
4月 26, 2013
作者:
S
stefank
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8013160: NPG: Remove unnecessary mark stack draining after CodeCache::do_unloading
Reviewed-by: coleenp, mgerdin
上级
c09d6baa
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
41 addition
and
47 deletion
+41
-47
src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp
...ion/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp
+7
-11
src/share/vm/gc_implementation/g1/g1MarkSweep.cpp
src/share/vm/gc_implementation/g1/g1MarkSweep.cpp
+9
-13
src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp
...are/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp
+9
-9
src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp
.../gc_implementation/parallelScavenge/psParallelCompact.cpp
+8
-6
src/share/vm/memory/genMarkSweep.cpp
src/share/vm/memory/genMarkSweep.cpp
+8
-8
未找到文件。
src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp
浏览文件 @
55a8f298
...
...
@@ -6007,26 +6007,23 @@ void CMSCollector::refProcessingWork(bool asynch, bool clear_all_soft_refs) {
&
cmsDrainMarkingStackClosure
,
NULL
);
}
verify_work_stacks_empty
();
}
// This is the point where the entire marking should have completed.
verify_work_stacks_empty
();
if
(
should_unload_classes
())
{
{
TraceTime
t
(
"class unloading"
,
PrintGCDetails
,
false
,
gclog_or_tty
);
//
Follow SystemDictionary roots and unload classes
//
Unload classes and purge the SystemDictionary.
bool
purged_class
=
SystemDictionary
::
do_unloading
(
&
_is_alive_closure
);
//
Follow CodeCache roots and unload any methods marked for unloading
//
Unload nmethods.
CodeCache
::
do_unloading
(
&
_is_alive_closure
,
purged_class
);
cmsDrainMarkingStackClosure
.
do_void
();
verify_work_stacks_empty
();
// Update subklass/sibling/implementor links in KlassKlass descendants
// Prune dead klasses from subklass/sibling/implementor lists.
Klass
::
clean_weak_klass_links
(
&
_is_alive_closure
);
// Nothing should have been pushed onto the working stacks.
verify_work_stacks_empty
();
}
{
...
...
@@ -6040,11 +6037,10 @@ void CMSCollector::refProcessingWork(bool asynch, bool clear_all_soft_refs) {
// Need to check if we really scanned the StringTable.
if
((
roots_scanning_options
()
&
SharedHeap
::
SO_Strings
)
==
0
)
{
TraceTime
t
(
"scrub string table"
,
PrintGCDetails
,
false
,
gclog_or_tty
);
//
Now clean up stale oops in StringTable
//
Delete entries for dead interned strings.
StringTable
::
unlink
(
&
_is_alive_closure
);
}
verify_work_stacks_empty
();
// Restore any preserved marks as a result of mark stack or
// work queue overflow
restore_preserved_marks_if_any
();
// done single-threaded for now
...
...
src/share/vm/gc_implementation/g1/g1MarkSweep.cpp
浏览文件 @
55a8f298
...
...
@@ -144,29 +144,25 @@ void G1MarkSweep::mark_sweep_phase1(bool& marked_for_unloading,
&
GenMarkSweep
::
follow_stack_closure
,
NULL
);
// Follow system dictionary roots and unload classes
// This is the point where the entire marking should have completed.
assert
(
GenMarkSweep
::
_marking_stack
.
is_empty
(),
"Marking should have completed"
);
// Unload classes and purge the SystemDictionary.
bool
purged_class
=
SystemDictionary
::
do_unloading
(
&
GenMarkSweep
::
is_alive
);
assert
(
GenMarkSweep
::
_marking_stack
.
is_empty
(),
"stack should be empty by now"
);
// Follow code cache roots (has to be done after system dictionary,
// assumes all live klasses are marked)
// Unload nmethods.
CodeCache
::
do_unloading
(
&
GenMarkSweep
::
is_alive
,
purged_class
);
GenMarkSweep
::
follow_stack
();
//
Update subklass/sibling/implementor links of live klasses
//
Prune dead klasses from subklass/sibling/implementor lists.
Klass
::
clean_weak_klass_links
(
&
GenMarkSweep
::
is_alive
);
assert
(
GenMarkSweep
::
_marking_stack
.
is_empty
(),
"stack should be empty by now"
);
//
Visit interned string tables and delete unmarked oops
//
Delete entries for dead interned strings.
StringTable
::
unlink
(
&
GenMarkSweep
::
is_alive
);
// Clean up unreferenced symbols in symbol table.
SymbolTable
::
unlink
();
assert
(
GenMarkSweep
::
_marking_stack
.
is_empty
(),
"stack should be empty by now"
);
if
(
VerifyDuringGC
)
{
HandleMark
hm
;
// handle scope
COMPILER2_PRESENT
(
DerivedPointerTableDeactivate
dpt_deact
);
...
...
src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp
浏览文件 @
55a8f298
...
...
@@ -517,23 +517,23 @@ void PSMarkSweep::mark_sweep_phase1(bool clear_all_softrefs) {
is_alive_closure
(),
mark_and_push_closure
(),
follow_stack_closure
(),
NULL
);
}
// Follow system dictionary roots and unload classes
// This is the point where the entire marking should have completed.
assert
(
_marking_stack
.
is_empty
(),
"Marking should have completed"
);
// Unload classes and purge the SystemDictionary.
bool
purged_class
=
SystemDictionary
::
do_unloading
(
is_alive_closure
());
//
Follow code cache roots
//
Unload nmethods.
CodeCache
::
do_unloading
(
is_alive_closure
(),
purged_class
);
follow_stack
();
// Flush marking stack
// Update subklass/sibling/implementor links of live klasses
Klass
::
clean_weak_klass_links
(
&
is_alive
);
assert
(
_marking_stack
.
is_empty
(),
"just drained"
);
// Prune dead klasses from subklass/sibling/implementor lists.
Klass
::
clean_weak_klass_links
(
is_alive_closure
());
//
Visit interned string tables and delete unmarked oops
//
Delete entries for dead interned strings.
StringTable
::
unlink
(
is_alive_closure
());
// Clean up unreferenced symbols in symbol table.
SymbolTable
::
unlink
();
assert
(
_marking_stack
.
is_empty
(),
"stack should be empty by now"
);
}
...
...
src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp
浏览文件 @
55a8f298
...
...
@@ -2354,22 +2354,24 @@ void PSParallelCompact::marking_phase(ParCompactionManager* cm,
}
TraceTime
tm_c
(
"class unloading"
,
print_phases
(),
true
,
gclog_or_tty
);
// This is the point where the entire marking should have completed.
assert
(
cm
->
marking_stacks_empty
(),
"Marking should have completed"
);
// Follow system dictionary roots and unload classes.
bool
purged_class
=
SystemDictionary
::
do_unloading
(
is_alive_closure
());
//
Follow code cache root
s.
//
Unload nmethod
s.
CodeCache
::
do_unloading
(
is_alive_closure
(),
purged_class
);
cm
->
follow_marking_stacks
();
// Flush marking stack.
//
Update subklass/sibling/implementor links of live klasses
//
Prune dead klasses from subklass/sibling/implementor lists.
Klass
::
clean_weak_klass_links
(
is_alive_closure
());
//
Visit interned string tables and delete unmarked oops
//
Delete entries for dead interned strings.
StringTable
::
unlink
(
is_alive_closure
());
// Clean up unreferenced symbols in symbol table.
SymbolTable
::
unlink
();
assert
(
cm
->
marking_stacks_empty
(),
"marking stacks should be empty"
);
}
void
PSParallelCompact
::
follow_klass
(
ParCompactionManager
*
cm
,
Klass
*
klass
)
{
...
...
src/share/vm/memory/genMarkSweep.cpp
浏览文件 @
55a8f298
...
...
@@ -223,23 +223,23 @@ void GenMarkSweep::mark_sweep_phase1(int level,
&
is_alive
,
&
keep_alive
,
&
follow_stack_closure
,
NULL
);
}
// Follow system dictionary roots and unload classes
// This is the point where the entire marking should have completed.
assert
(
_marking_stack
.
is_empty
(),
"Marking should have completed"
);
// Unload classes and purge the SystemDictionary.
bool
purged_class
=
SystemDictionary
::
do_unloading
(
&
is_alive
);
//
Follow code cache roots
//
Unload nmethods.
CodeCache
::
do_unloading
(
&
is_alive
,
purged_class
);
follow_stack
();
// Flush marking stack
//
Update subklass/sibling/implementor links of live klasses
//
Prune dead klasses from subklass/sibling/implementor lists.
Klass
::
clean_weak_klass_links
(
&
is_alive
);
assert
(
_marking_stack
.
is_empty
(),
"just drained"
);
//
Visit interned string tables and delete unmarked oops
//
Delete entries for dead interned strings.
StringTable
::
unlink
(
&
is_alive
);
// Clean up unreferenced symbols in symbol table.
SymbolTable
::
unlink
();
assert
(
_marking_stack
.
is_empty
(),
"stack should be empty by now"
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录