Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
c60f9f1a
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看板
提交
c60f9f1a
编写于
8月 20, 2008
作者:
A
apangin
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
b0171305
c3c358d0
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
19 addition
and
8 deletion
+19
-8
src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp
...ion/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp
+19
-8
未找到文件。
src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp
浏览文件 @
c60f9f1a
...
...
@@ -6867,11 +6867,9 @@ void MarkFromRootsClosure::do_bit(size_t offset) {
// during the preclean or remark phase. (CMSCleanOnEnter)
if
(
CMSCleanOnEnter
)
{
size_t
sz
=
_collector
->
block_size_using_printezis_bits
(
addr
);
HeapWord
*
start_card_addr
=
(
HeapWord
*
)
round_down
(
(
intptr_t
)
addr
,
CardTableModRefBS
::
card_size
);
HeapWord
*
end_card_addr
=
(
HeapWord
*
)
round_to
(
(
intptr_t
)(
addr
+
sz
),
CardTableModRefBS
::
card_size
);
MemRegion
redirty_range
=
MemRegion
(
start_card_
addr
,
end_card_addr
);
MemRegion
redirty_range
=
MemRegion
(
addr
,
end_card_addr
);
assert
(
!
redirty_range
.
is_empty
(),
"Arithmetical tautology"
);
// Bump _threshold to end_card_addr; note that
// _threshold cannot possibly exceed end_card_addr, anyhow.
...
...
@@ -7460,12 +7458,25 @@ void PushAndMarkClosure::do_oop(oop obj) {
)
if
(
simulate_overflow
||
!
_mark_stack
->
push
(
obj
))
{
if
(
_concurrent_precleaning
)
{
// During precleaning we can just dirty the appropriate card
// During precleaning we can just dirty the appropriate card
(s)
// in the mod union table, thus ensuring that the object remains
// in the grey set and continue. Note that no one can be intefering
// with us in this action of dirtying the mod union table, so
// no locking is required.
_mod_union_table
->
mark
(
addr
);
// in the grey set and continue. In the case of object arrays
// we need to dirty all of the cards that the object spans,
// since the rescan of object arrays will be limited to the
// dirty cards.
// Note that no one can be intefering with us in this action
// of dirtying the mod union table, so no locking or atomics
// are required.
if
(
obj
->
is_objArray
())
{
size_t
sz
=
obj
->
size
();
HeapWord
*
end_card_addr
=
(
HeapWord
*
)
round_to
(
(
intptr_t
)(
addr
+
sz
),
CardTableModRefBS
::
card_size
);
MemRegion
redirty_range
=
MemRegion
(
addr
,
end_card_addr
);
assert
(
!
redirty_range
.
is_empty
(),
"Arithmetical tautology"
);
_mod_union_table
->
mark_range
(
redirty_range
);
}
else
{
_mod_union_table
->
mark
(
addr
);
}
_collector
->
_ser_pmc_preclean_ovflw
++
;
}
else
{
// During the remark phase, we need to remember this oop
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录