Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
31122aaa
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看板
提交
31122aaa
编写于
12月 18, 2008
作者:
J
jcoomes
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
6786188: par compact - "SplitALot" stress mode should fill to_space
Reviewed-by: jmasa, tonyp
上级
718caf55
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
55 addition
and
3 deletion
+55
-3
src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp
.../gc_implementation/parallelScavenge/psParallelCompact.cpp
+51
-3
src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp
.../gc_implementation/parallelScavenge/psParallelCompact.hpp
+4
-0
未找到文件。
src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp
浏览文件 @
31122aaa
...
@@ -1472,9 +1472,53 @@ PSParallelCompact::summarize_new_objects(SpaceId id, HeapWord* start)
...
@@ -1472,9 +1472,53 @@ PSParallelCompact::summarize_new_objects(SpaceId id, HeapWord* start)
assert
(
result
,
"should not fail: bad filler object size"
);
assert
(
result
,
"should not fail: bad filler object size"
);
}
}
void
PSParallelCompact
::
provoke_split_fill_survivor
(
SpaceId
id
)
{
if
(
total_invocations
()
%
(
ParallelOldGCSplitInterval
*
3
)
!=
0
)
{
return
;
}
MutableSpace
*
const
space
=
_space_info
[
id
].
space
();
if
(
space
->
is_empty
())
{
HeapWord
*
b
=
space
->
bottom
();
HeapWord
*
t
=
b
+
space
->
capacity_in_words
()
/
2
;
space
->
set_top
(
t
);
if
(
ZapUnusedHeapArea
)
{
space
->
set_top_for_allocations
();
}
size_t
obj_len
=
8
;
while
(
b
+
obj_len
<=
t
)
{
CollectedHeap
::
fill_with_object
(
b
,
obj_len
);
mark_bitmap
()
->
mark_obj
(
b
,
obj_len
);
summary_data
().
add_obj
(
b
,
obj_len
);
b
+=
obj_len
;
obj_len
=
(
obj_len
&
0x18
)
+
8
;
// 8 16 24 32 8 16 24 32 ...
}
if
(
b
<
t
)
{
// The loop didn't completely fill to t (top); adjust top downward.
space
->
set_top
(
b
);
if
(
ZapUnusedHeapArea
)
{
space
->
set_top_for_allocations
();
}
}
HeapWord
**
nta
=
_space_info
[
id
].
new_top_addr
();
bool
result
=
summary_data
().
summarize
(
_space_info
[
id
].
split_info
(),
space
->
bottom
(),
space
->
top
(),
NULL
,
space
->
bottom
(),
space
->
end
(),
nta
);
assert
(
result
,
"space must fit into itself"
);
}
}
void
void
PSParallelCompact
::
provoke_split
(
bool
&
max_compaction
)
PSParallelCompact
::
provoke_split
(
bool
&
max_compaction
)
{
{
if
(
total_invocations
()
%
ParallelOldGCSplitInterval
!=
0
)
{
return
;
}
const
size_t
region_size
=
ParallelCompactData
::
RegionSize
;
const
size_t
region_size
=
ParallelCompactData
::
RegionSize
;
ParallelCompactData
&
sd
=
summary_data
();
ParallelCompactData
&
sd
=
summary_data
();
...
@@ -1587,6 +1631,12 @@ void PSParallelCompact::summarize_spaces_quick()
...
@@ -1587,6 +1631,12 @@ void PSParallelCompact::summarize_spaces_quick()
assert
(
result
,
"space must fit into itself"
);
assert
(
result
,
"space must fit into itself"
);
_space_info
[
i
].
set_dense_prefix
(
space
->
bottom
());
_space_info
[
i
].
set_dense_prefix
(
space
->
bottom
());
}
}
#ifndef PRODUCT
if
(
ParallelOldGCSplitALot
)
{
provoke_split_fill_survivor
(
to_space_id
);
}
#endif // #ifndef PRODUCT
}
}
void
PSParallelCompact
::
fill_dense_prefix_end
(
SpaceId
id
)
void
PSParallelCompact
::
fill_dense_prefix_end
(
SpaceId
id
)
...
@@ -1794,9 +1844,7 @@ void PSParallelCompact::summary_phase(ParCompactionManager* cm,
...
@@ -1794,9 +1844,7 @@ void PSParallelCompact::summary_phase(ParCompactionManager* cm,
}
}
#ifndef PRODUCT
#ifndef PRODUCT
if
(
ParallelOldGCSplitALot
&&
old_space_total_live
<
old_capacity
)
{
if
(
ParallelOldGCSplitALot
&&
old_space_total_live
<
old_capacity
)
{
if
(
total_invocations
()
%
ParallelOldGCSplitInterval
==
0
)
{
provoke_split
(
maximum_compaction
);
provoke_split
(
maximum_compaction
);
}
}
}
#endif // #ifndef PRODUCT
#endif // #ifndef PRODUCT
...
...
src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp
浏览文件 @
31122aaa
...
@@ -978,6 +978,10 @@ class PSParallelCompact : AllStatic {
...
@@ -978,6 +978,10 @@ class PSParallelCompact : AllStatic {
// Include the new objects in the summary data.
// Include the new objects in the summary data.
static
void
summarize_new_objects
(
SpaceId
id
,
HeapWord
*
start
);
static
void
summarize_new_objects
(
SpaceId
id
,
HeapWord
*
start
);
// Add live objects to a survivor space since it's rare that both survivors
// are non-empty.
static
void
provoke_split_fill_survivor
(
SpaceId
id
);
// Add live objects and/or choose the dense prefix to provoke splitting.
// Add live objects and/or choose the dense prefix to provoke splitting.
static
void
provoke_split
(
bool
&
maximum_compaction
);
static
void
provoke_split
(
bool
&
maximum_compaction
);
#endif
#endif
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录