Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
94c82122
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看板
提交
94c82122
编写于
10年前
作者:
E
ehelin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8049864: TestParallelHeapSizeFlags fails with unexpected heap size
Reviewed-by: sjohanss, jmasa
上级
701d14c9
无相关合并请求
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
89 addition
and
39 deletion
+89
-39
src/share/vm/gc_implementation/parallelScavenge/generationSizer.cpp
...vm/gc_implementation/parallelScavenge/generationSizer.cpp
+4
-3
src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp
...e/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp
+1
-1
src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp
.../gc_implementation/parallelScavenge/psParallelCompact.cpp
+1
-1
src/share/vm/memory/heap.cpp
src/share/vm/memory/heap.cpp
+7
-3
src/share/vm/prims/jni.cpp
src/share/vm/prims/jni.cpp
+2
-0
src/share/vm/runtime/os.cpp
src/share/vm/runtime/os.cpp
+66
-15
src/share/vm/runtime/os.hpp
src/share/vm/runtime/os.hpp
+5
-13
src/share/vm/runtime/virtualspace.cpp
src/share/vm/runtime/virtualspace.cpp
+3
-3
未找到文件。
src/share/vm/gc_implementation/parallelScavenge/generationSizer.cpp
浏览文件 @
94c82122
...
...
@@ -66,9 +66,10 @@ void GenerationSizer::initialize_flags() {
void
GenerationSizer
::
initialize_size_info
()
{
trace_gen_sizes
(
"ps heap raw"
);
const
size_t
page_sz
=
os
::
page_size_for_region
(
_min_heap_byte_size
,
_max_heap_byte_size
,
8
);
const
size_t
max_page_sz
=
os
::
page_size_for_region
(
_max_heap_byte_size
,
8
);
const
size_t
min_pages
=
4
;
// 1 for eden + 1 for each survivor + 1 for old
const
size_t
min_page_sz
=
os
::
page_size_for_region
(
_min_heap_byte_size
,
min_pages
);
const
size_t
page_sz
=
MIN2
(
max_page_sz
,
min_page_sz
);
// Can a page size be something else than a power of two?
assert
(
is_power_of_2
((
intptr_t
)
page_sz
),
"must be a power of 2"
);
...
...
This diff is collapsed.
Click to expand it.
src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp
浏览文件 @
94c82122
...
...
@@ -55,7 +55,7 @@ ParMarkBitMap::initialize(MemRegion covered_region)
const
size_t
words
=
bits
/
BitsPerWord
;
const
size_t
raw_bytes
=
words
*
sizeof
(
idx_t
);
const
size_t
page_sz
=
os
::
page_size_for_region
(
raw_bytes
,
raw_bytes
,
10
);
const
size_t
page_sz
=
os
::
page_size_for_region
(
raw_bytes
,
10
);
const
size_t
granularity
=
os
::
vm_allocation_granularity
();
_reserved_byte_size
=
align_size_up
(
raw_bytes
,
MAX2
(
page_sz
,
granularity
));
...
...
This diff is collapsed.
Click to expand it.
src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp
浏览文件 @
94c82122
...
...
@@ -401,7 +401,7 @@ PSVirtualSpace*
ParallelCompactData
::
create_vspace
(
size_t
count
,
size_t
element_size
)
{
const
size_t
raw_bytes
=
count
*
element_size
;
const
size_t
page_sz
=
os
::
page_size_for_region
(
raw_bytes
,
raw_bytes
,
10
);
const
size_t
page_sz
=
os
::
page_size_for_region
(
raw_bytes
,
10
);
const
size_t
granularity
=
os
::
vm_allocation_granularity
();
_reserved_byte_size
=
align_size_up
(
raw_bytes
,
MAX2
(
page_sz
,
granularity
));
...
...
This diff is collapsed.
Click to expand it.
src/share/vm/memory/heap.cpp
浏览文件 @
94c82122
...
...
@@ -97,9 +97,13 @@ bool CodeHeap::reserve(size_t reserved_size, size_t committed_size,
_log2_segment_size
=
exact_log2
(
segment_size
);
// Reserve and initialize space for _memory.
const
size_t
page_size
=
os
::
can_execute_large_page_memory
()
?
os
::
page_size_for_region
(
committed_size
,
reserved_size
,
8
)
:
os
::
vm_page_size
();
size_t
page_size
=
os
::
vm_page_size
();
if
(
os
::
can_execute_large_page_memory
())
{
const
size_t
min_pages
=
8
;
page_size
=
MIN2
(
os
::
page_size_for_region
(
committed_size
,
min_pages
),
os
::
page_size_for_region
(
reserved_size
,
min_pages
));
}
const
size_t
granularity
=
os
::
vm_allocation_granularity
();
const
size_t
r_align
=
MAX2
(
page_size
,
granularity
);
const
size_t
r_size
=
align_size_up
(
reserved_size
,
r_align
);
...
...
This diff is collapsed.
Click to expand it.
src/share/vm/prims/jni.cpp
浏览文件 @
94c82122
...
...
@@ -5071,6 +5071,7 @@ _JNI_IMPORT_OR_EXPORT_ jint JNICALL JNI_GetDefaultJavaVMInitArgs(void *args_) {
unit_test_function_call
// Forward declaration
void
TestOS_test
();
void
TestReservedSpace_test
();
void
TestReserveMemorySpecial_test
();
void
TestVirtualSpace_test
();
...
...
@@ -5092,6 +5093,7 @@ void FreeRegionList_test();
void
execute_internal_vm_tests
()
{
if
(
ExecuteInternalVMTests
)
{
tty
->
print_cr
(
"Running internal VM tests"
);
run_unit_test
(
TestOS_test
());
run_unit_test
(
TestReservedSpace_test
());
run_unit_test
(
TestReserveMemorySpecial_test
());
run_unit_test
(
TestVirtualSpace_test
());
...
...
This diff is collapsed.
Click to expand it.
src/share/vm/runtime/os.cpp
浏览文件 @
94c82122
...
...
@@ -1315,24 +1315,15 @@ bool os::stack_shadow_pages_available(Thread *thread, methodHandle method) {
return
(
sp
>
(
stack_limit
+
reserved_area
));
}
size_t
os
::
page_size_for_region
(
size_t
region_min_size
,
size_t
region_max_size
,
uint
min_pages
)
{
size_t
os
::
page_size_for_region
(
size_t
region_size
,
size_t
min_pages
)
{
assert
(
min_pages
>
0
,
"sanity"
);
if
(
UseLargePages
)
{
const
size_t
max_page_size
=
region_max_size
/
min_pages
;
for
(
unsigned
int
i
=
0
;
_page_sizes
[
i
]
!=
0
;
++
i
)
{
const
size_t
sz
=
_page_sizes
[
i
];
const
size_t
mask
=
sz
-
1
;
if
((
region_min_size
&
mask
)
==
0
&&
(
region_max_size
&
mask
)
==
0
)
{
// The largest page size with no fragmentation.
return
sz
;
}
const
size_t
max_page_size
=
region_size
/
min_pages
;
if
(
sz
<=
max_page_size
)
{
// The largest page size that satisfies the min_pages requirement.
return
sz
;
for
(
size_t
i
=
0
;
_page_sizes
[
i
]
!=
0
;
++
i
)
{
const
size_t
page_size
=
_page_sizes
[
i
];
if
(
page_size
<=
max_page_size
&&
is_size_aligned
(
region_size
,
page_size
))
{
return
page_size
;
}
}
}
...
...
@@ -1574,3 +1565,63 @@ os::SuspendResume::State os::SuspendResume::switch_state(os::SuspendResume::Stat
return
result
;
}
#endif
/////////////// Unit tests ///////////////
#ifndef PRODUCT
#define assert_eq(a,b) assert(a == b, err_msg(SIZE_FORMAT " != " SIZE_FORMAT, a, b))
class
TestOS
:
AllStatic
{
static
size_t
small_page_size
()
{
return
os
::
vm_page_size
();
}
static
size_t
large_page_size
()
{
const
size_t
large_page_size_example
=
4
*
M
;
return
os
::
page_size_for_region
(
large_page_size_example
,
1
);
}
static
void
test_page_size_for_region
()
{
if
(
UseLargePages
)
{
const
size_t
small_page
=
small_page_size
();
const
size_t
large_page
=
large_page_size
();
if
(
large_page
>
small_page
)
{
size_t
num_small_pages_in_large
=
large_page
/
small_page
;
size_t
page
=
os
::
page_size_for_region
(
large_page
,
num_small_pages_in_large
);
assert_eq
(
page
,
small_page
);
}
}
}
static
void
test_page_size_for_region_alignment
()
{
if
(
UseLargePages
)
{
const
size_t
small_page
=
small_page_size
();
const
size_t
large_page
=
large_page_size
();
if
(
large_page
>
small_page
)
{
const
size_t
unaligned_region
=
large_page
+
17
;
size_t
page
=
os
::
page_size_for_region
(
unaligned_region
,
1
);
assert_eq
(
page
,
small_page
);
const
size_t
num_pages
=
5
;
const
size_t
aligned_region
=
large_page
*
num_pages
;
page
=
os
::
page_size_for_region
(
aligned_region
,
num_pages
);
assert_eq
(
page
,
large_page
);
}
}
}
public:
static
void
run_tests
()
{
test_page_size_for_region
();
test_page_size_for_region_alignment
();
}
};
void
TestOS_test
()
{
TestOS
::
run_tests
();
}
#endif // PRODUCT
This diff is collapsed.
Click to expand it.
src/share/vm/runtime/os.hpp
浏览文件 @
94c82122
...
...
@@ -265,19 +265,11 @@ class os: AllStatic {
// Return the default page size.
static
int
vm_page_size
();
// Return the page size to use for a region of memory. The min_pages argument
// is a hint intended to limit fragmentation; it says the returned page size
// should be <= region_max_size / min_pages. Because min_pages is a hint,
// this routine may return a size larger than region_max_size / min_pages.
//
// The current implementation ignores min_pages if a larger page size is an
// exact multiple of both region_min_size and region_max_size. This allows
// larger pages to be used when doing so would not cause fragmentation; in
// particular, a single page can be used when region_min_size ==
// region_max_size == a supported page size.
static
size_t
page_size_for_region
(
size_t
region_min_size
,
size_t
region_max_size
,
uint
min_pages
);
// Returns the page size to use for a region of memory.
// region_size / min_pages will always be greater than or equal to the
// returned value.
static
size_t
page_size_for_region
(
size_t
region_size
,
size_t
min_pages
);
// Return the largest page size that can be used
static
size_t
max_page_size
()
{
// The _page_sizes array is sorted in descending order.
...
...
This diff is collapsed.
Click to expand it.
src/share/vm/runtime/virtualspace.cpp
浏览文件 @
94c82122
...
...
@@ -53,7 +53,7 @@ ReservedSpace::ReservedSpace() : _base(NULL), _size(0), _noaccess_prefix(0),
}
ReservedSpace
::
ReservedSpace
(
size_t
size
)
{
size_t
page_size
=
os
::
page_size_for_region
(
size
,
size
,
1
);
size_t
page_size
=
os
::
page_size_for_region
(
size
,
1
);
bool
large_pages
=
page_size
!=
(
size_t
)
os
::
vm_page_size
();
// Don't force the alignment to be large page aligned,
// since that will waste memory.
...
...
@@ -372,7 +372,7 @@ VirtualSpace::VirtualSpace() {
bool
VirtualSpace
::
initialize
(
ReservedSpace
rs
,
size_t
committed_size
)
{
const
size_t
max_commit_granularity
=
os
::
page_size_for_region
(
rs
.
size
(),
rs
.
size
(),
1
);
const
size_t
max_commit_granularity
=
os
::
page_size_for_region
(
rs
.
size
(),
1
);
return
initialize_with_granularity
(
rs
,
committed_size
,
max_commit_granularity
);
}
...
...
@@ -995,7 +995,7 @@ class TestVirtualSpace : AllStatic {
case
Disable
:
return
vs
.
initialize_with_granularity
(
rs
,
0
,
os
::
vm_page_size
());
case
Commit
:
return
vs
.
initialize_with_granularity
(
rs
,
0
,
os
::
page_size_for_region
(
rs
.
size
(),
rs
.
size
(),
1
));
return
vs
.
initialize_with_granularity
(
rs
,
0
,
os
::
page_size_for_region
(
rs
.
size
(),
1
));
}
}
...
...
This diff is collapsed.
Click to expand it.
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录
反馈
建议
客服
返回
顶部