Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
59e241c6
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看板
提交
59e241c6
编写于
9月 18, 2012
作者:
Z
zgu
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
686c7a53
c151d2ae
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
143 addition
and
7 deletion
+143
-7
src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.cpp
...ntation/concurrentMarkSweep/concurrentMarkSweepThread.cpp
+1
-0
src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
+0
-1
src/share/vm/runtime/os.cpp
src/share/vm/runtime/os.cpp
+9
-2
src/share/vm/runtime/thread.cpp
src/share/vm/runtime/thread.cpp
+14
-4
test/runtime/7194254/Test7194254.java
test/runtime/7194254/Test7194254.java
+119
-0
未找到文件。
src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.cpp
浏览文件 @
59e241c6
...
...
@@ -230,6 +230,7 @@ void ConcurrentMarkSweepThread::print_on(outputStream* st) const {
void
ConcurrentMarkSweepThread
::
print_all_on
(
outputStream
*
st
)
{
if
(
_cmst
!=
NULL
)
{
_cmst
->
print_on
(
st
);
st
->
cr
();
}
if
(
_collector
!=
NULL
)
{
AbstractWorkGang
*
gang
=
_collector
->
conc_workers
();
...
...
src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
浏览文件 @
59e241c6
...
...
@@ -3420,7 +3420,6 @@ void G1CollectedHeap::print_gc_threads_on(outputStream* st) const {
st
->
cr
();
_cm
->
print_worker_threads_on
(
st
);
_cg1r
->
print_worker_threads_on
(
st
);
st
->
cr
();
}
void
G1CollectedHeap
::
gc_threads_do
(
ThreadClosure
*
tc
)
const
{
...
...
src/share/vm/runtime/os.cpp
浏览文件 @
59e241c6
...
...
@@ -201,14 +201,21 @@ OSReturn os::set_priority(Thread* thread, ThreadPriority p) {
}
}
// The mapping from OS priority back to Java priority may be inexact because
// Java priorities can map M:1 with native priorities. If you want the definite
// Java priority then use JavaThread::java_priority()
OSReturn
os
::
get_priority
(
const
Thread
*
const
thread
,
ThreadPriority
&
priority
)
{
int
p
;
int
os_prio
;
OSReturn
ret
=
get_native_priority
(
thread
,
&
os_prio
);
if
(
ret
!=
OS_OK
)
return
ret
;
for
(
p
=
MaxPriority
;
p
>
MinPriority
&&
java_to_os_priority
[
p
]
>
os_prio
;
p
--
)
;
if
(
java_to_os_priority
[
MaxPriority
]
>
java_to_os_priority
[
MinPriority
])
{
for
(
p
=
MaxPriority
;
p
>
MinPriority
&&
java_to_os_priority
[
p
]
>
os_prio
;
p
--
)
;
}
else
{
// niceness values are in reverse order
for
(
p
=
MaxPriority
;
p
>
MinPriority
&&
java_to_os_priority
[
p
]
<
os_prio
;
p
--
)
;
}
priority
=
(
ThreadPriority
)
p
;
return
OS_OK
;
}
...
...
src/share/vm/runtime/thread.cpp
浏览文件 @
59e241c6
...
...
@@ -842,7 +842,11 @@ void Thread::metadata_do(void f(Metadata*)) {
void
Thread
::
print_on
(
outputStream
*
st
)
const
{
// get_priority assumes osthread initialized
if
(
osthread
()
!=
NULL
)
{
st
->
print
(
"prio=%d tid="
INTPTR_FORMAT
" "
,
get_priority
(
this
),
this
);
int
os_prio
;
if
(
os
::
get_native_priority
(
this
,
&
os_prio
)
==
OS_OK
)
{
st
->
print
(
"os_prio=%d "
,
os_prio
);
}
st
->
print
(
"tid="
INTPTR_FORMAT
" "
,
this
);
osthread
()
->
print_on
(
st
);
}
debug_only
(
if
(
WizardMode
)
print_owned_locks_on
(
st
);)
...
...
@@ -2749,7 +2753,11 @@ void JavaThread::print_thread_state() const {
void
JavaThread
::
print_on
(
outputStream
*
st
)
const
{
st
->
print
(
"
\"
%s
\"
"
,
get_thread_name
());
oop
thread_oop
=
threadObj
();
if
(
thread_oop
!=
NULL
&&
java_lang_Thread
::
is_daemon
(
thread_oop
))
st
->
print
(
"daemon "
);
if
(
thread_oop
!=
NULL
)
{
st
->
print
(
"#"
INT64_FORMAT
" "
,
java_lang_Thread
::
thread_id
(
thread_oop
));
if
(
java_lang_Thread
::
is_daemon
(
thread_oop
))
st
->
print
(
"daemon "
);
st
->
print
(
"prio=%d "
,
java_lang_Thread
::
priority
(
thread_oop
));
}
Thread
::
print_on
(
st
);
// print guess for valid stack memory region (assume 4K pages); helps lock debugging
st
->
print_cr
(
"["
INTPTR_FORMAT
"]"
,
(
intptr_t
)
last_Java_sp
()
&
~
right_n_bits
(
12
));
...
...
@@ -4276,8 +4284,10 @@ void Threads::print_on(outputStream* st, bool print_stacks, bool internal_format
st
->
cr
();
Universe
::
heap
()
->
print_gc_threads_on
(
st
);
WatcherThread
*
wt
=
WatcherThread
::
watcher_thread
();
if
(
wt
!=
NULL
)
wt
->
print_on
(
st
);
st
->
cr
();
if
(
wt
!=
NULL
)
{
wt
->
print_on
(
st
);
st
->
cr
();
}
CompileBroker
::
print_compiler_threads_on
(
st
);
st
->
flush
();
}
...
...
test/runtime/7194254/Test7194254.java
0 → 100644
浏览文件 @
59e241c6
/*
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 7194254
* @summary Creates several threads with different java priorities and checks
* whether jstack reports correct priorities for them.
*
* @run main T7194254
*/
import
java.io.BufferedReader
;
import
java.io.InputStreamReader
;
import
java.lang.management.ManagementFactory
;
import
java.lang.management.RuntimeMXBean
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.concurrent.CyclicBarrier
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
public
class
Test7194254
{
public
static
void
main
(
String
[]
args
)
throws
Exception
{
final
int
NUMBER_OF_JAVA_PRIORITIES
=
Thread
.
MAX_PRIORITY
-
Thread
.
MIN_PRIORITY
+
1
;
final
CyclicBarrier
barrier
=
new
CyclicBarrier
(
NUMBER_OF_JAVA_PRIORITIES
+
1
);
for
(
int
p
=
Thread
.
MIN_PRIORITY
;
p
<=
Thread
.
MAX_PRIORITY
;
++
p
)
{
final
int
priority
=
p
;
new
Thread
(
"Priority="
+
p
)
{
{
setPriority
(
priority
);
}
public
void
run
()
{
try
{
barrier
.
await
();
// 1st
barrier
.
await
();
// 2nd
}
catch
(
Exception
exc
)
{
// ignore
}
}
}.
start
();
}
barrier
.
await
();
// 1st
int
matches
=
0
;
List
<
String
>
failed
=
new
ArrayList
<>();
try
{
String
pid
=
getPid
();
String
jstack
=
System
.
getProperty
(
"java.home"
)
+
"/../bin/jstack"
;
Process
process
=
new
ProcessBuilder
(
jstack
,
pid
)
.
redirectErrorStream
(
true
).
start
();
Pattern
pattern
=
Pattern
.
compile
(
"\\\"Priority=(\\d+)\\\".* prio=(\\d+).*"
);
try
(
BufferedReader
reader
=
new
BufferedReader
(
new
InputStreamReader
(
process
.
getInputStream
())))
{
String
line
;
while
((
line
=
reader
.
readLine
())
!=
null
)
{
Matcher
matcher
=
pattern
.
matcher
(
line
);
if
(
matcher
.
matches
())
{
matches
+=
1
;
String
expected
=
matcher
.
group
(
1
);
String
actual
=
matcher
.
group
(
2
);
if
(!
expected
.
equals
(
actual
))
{
failed
.
add
(
line
);
}
}
}
}
barrier
.
await
();
// 2nd
}
finally
{
barrier
.
reset
();
}
if
(
matches
!=
NUMBER_OF_JAVA_PRIORITIES
)
{
throw
new
AssertionError
(
"matches: expected "
+
NUMBER_OF_JAVA_PRIORITIES
+
", but was "
+
matches
);
}
if
(!
failed
.
isEmpty
())
{
throw
new
AssertionError
(
failed
.
size
()
+
":"
+
failed
);
}
System
.
out
.
println
(
"Test passes."
);
}
static
String
getPid
()
{
RuntimeMXBean
runtimebean
=
ManagementFactory
.
getRuntimeMXBean
();
String
vmname
=
runtimebean
.
getName
();
int
i
=
vmname
.
indexOf
(
'@'
);
if
(
i
!=
-
1
)
{
vmname
=
vmname
.
substring
(
0
,
i
);
}
return
vmname
;
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录