Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
e37dbca1
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看板
提交
e37dbca1
编写于
3月 25, 2011
作者:
J
jcoomes
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
ec6f65d3
0c37f5bb
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
30 addition
and
18 deletion
+30
-18
src/share/vm/memory/cardTableRS.cpp
src/share/vm/memory/cardTableRS.cpp
+26
-14
src/share/vm/oops/constantPoolKlass.cpp
src/share/vm/oops/constantPoolKlass.cpp
+4
-4
未找到文件。
src/share/vm/memory/cardTableRS.cpp
浏览文件 @
e37dbca1
...
...
@@ -318,17 +318,28 @@ private:
protected:
template
<
class
T
>
void
do_oop_work
(
T
*
p
)
{
HeapWord
*
jp
=
(
HeapWord
*
)
p
;
if
(
jp
>=
_begin
&&
jp
<
_end
)
{
oop
obj
=
oopDesc
::
load_decode_heap_oop
(
p
);
guarantee
(
obj
==
NULL
||
(
HeapWord
*
)
p
<
_boundary
||
(
HeapWord
*
)
obj
>=
_boundary
,
"pointer on clean card crosses boundary"
);
}
assert
(
jp
>=
_begin
&&
jp
<
_end
,
err_msg
(
"Error: jp "
PTR_FORMAT
" should be within "
"[_begin, _end) = ["
PTR_FORMAT
","
PTR_FORMAT
")"
,
_begin
,
_end
));
oop
obj
=
oopDesc
::
load_decode_heap_oop
(
p
);
guarantee
(
obj
==
NULL
||
(
HeapWord
*
)
obj
>=
_boundary
,
err_msg
(
"pointer "
PTR_FORMAT
" at "
PTR_FORMAT
" on "
"clean card crosses boundary"
PTR_FORMAT
,
(
HeapWord
*
)
obj
,
jp
,
_boundary
));
}
public:
VerifyCleanCardClosure
(
HeapWord
*
b
,
HeapWord
*
begin
,
HeapWord
*
end
)
:
_boundary
(
b
),
_begin
(
begin
),
_end
(
end
)
{}
_boundary
(
b
),
_begin
(
begin
),
_end
(
end
)
{
assert
(
b
<=
begin
,
err_msg
(
"Error: boundary "
PTR_FORMAT
" should be at or below begin "
PTR_FORMAT
,
b
,
begin
));
assert
(
begin
<=
end
,
err_msg
(
"Error: begin "
PTR_FORMAT
" should be strictly below end "
PTR_FORMAT
,
begin
,
end
));
}
virtual
void
do_oop
(
oop
*
p
)
{
VerifyCleanCardClosure
::
do_oop_work
(
p
);
}
virtual
void
do_oop
(
narrowOop
*
p
)
{
VerifyCleanCardClosure
::
do_oop_work
(
p
);
}
};
...
...
@@ -392,13 +403,14 @@ void CardTableRS::verify_space(Space* s, HeapWord* gen_boundary) {
}
}
// Now traverse objects until end.
HeapWord
*
cur
=
start_block
;
VerifyCleanCardClosure
verify_blk
(
gen_boundary
,
begin
,
end
);
while
(
cur
<
end
)
{
if
(
s
->
block_is_obj
(
cur
)
&&
s
->
obj_is_alive
(
cur
))
{
oop
(
cur
)
->
oop_iterate
(
&
verify_blk
);
if
(
begin
<
end
)
{
MemRegion
mr
(
begin
,
end
);
VerifyCleanCardClosure
verify_blk
(
gen_boundary
,
begin
,
end
);
for
(
HeapWord
*
cur
=
start_block
;
cur
<
end
;
cur
+=
s
->
block_size
(
cur
))
{
if
(
s
->
block_is_obj
(
cur
)
&&
s
->
obj_is_alive
(
cur
))
{
oop
(
cur
)
->
oop_iterate
(
&
verify_blk
,
mr
);
}
}
cur
+=
s
->
block_size
(
cur
);
}
cur_entry
=
first_dirty
;
}
else
{
...
...
src/share/vm/oops/constantPoolKlass.cpp
浏览文件 @
e37dbca1
...
...
@@ -245,13 +245,13 @@ int constantPoolKlass::oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr)
}
oop
*
addr
;
addr
=
cp
->
tags_addr
();
blk
->
do_oop
(
addr
);
if
(
mr
.
contains
(
addr
))
blk
->
do_oop
(
addr
);
addr
=
cp
->
cache_addr
();
blk
->
do_oop
(
addr
);
if
(
mr
.
contains
(
addr
))
blk
->
do_oop
(
addr
);
addr
=
cp
->
operands_addr
();
blk
->
do_oop
(
addr
);
if
(
mr
.
contains
(
addr
))
blk
->
do_oop
(
addr
);
addr
=
cp
->
pool_holder_addr
();
blk
->
do_oop
(
addr
);
if
(
mr
.
contains
(
addr
))
blk
->
do_oop
(
addr
);
return
size
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录