Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
8dd6c5df
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看板
提交
8dd6c5df
编写于
2月 20, 2015
作者:
A
amurillo
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
74385e93
af3572b0
变更
26
显示空白变更内容
内联
并排
Showing
26 changed file
with
808 addition
and
50 deletion
+808
-50
agent/src/os/linux/ps_proc.c
agent/src/os/linux/ps_proc.c
+11
-0
agent/src/share/classes/sun/jvm/hotspot/gc_interface/G1YCType.java
.../share/classes/sun/jvm/hotspot/gc_interface/G1YCType.java
+45
-0
agent/src/share/classes/sun/jvm/hotspot/gc_interface/GCCause.java
...c/share/classes/sun/jvm/hotspot/gc_interface/GCCause.java
+69
-0
agent/src/share/classes/sun/jvm/hotspot/gc_interface/GCName.java
...rc/share/classes/sun/jvm/hotspot/gc_interface/GCName.java
+50
-0
agent/src/share/classes/sun/jvm/hotspot/gc_interface/GCWhen.java
...rc/share/classes/sun/jvm/hotspot/gc_interface/GCWhen.java
+45
-0
agent/src/share/classes/sun/jvm/hotspot/gc_interface/ReferenceType.java
...e/classes/sun/jvm/hotspot/gc_interface/ReferenceType.java
+45
-0
agent/src/share/classes/sun/jvm/hotspot/memory/AdaptiveFreeList.java
...hare/classes/sun/jvm/hotspot/memory/AdaptiveFreeList.java
+77
-0
agent/src/share/classes/sun/jvm/hotspot/memory/CompactibleFreeListSpace.java
...sses/sun/jvm/hotspot/memory/CompactibleFreeListSpace.java
+21
-17
agent/src/share/classes/sun/jvm/hotspot/memory/Universe.java
agent/src/share/classes/sun/jvm/hotspot/memory/Universe.java
+18
-2
agent/src/share/classes/sun/jvm/hotspot/oops/Klass.java
agent/src/share/classes/sun/jvm/hotspot/oops/Klass.java
+11
-1
agent/src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java
.../src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java
+13
-1
agent/src/share/classes/sun/jvm/hotspot/opto/CompilerPhaseType.java
...share/classes/sun/jvm/hotspot/opto/CompilerPhaseType.java
+67
-0
agent/src/share/classes/sun/jvm/hotspot/runtime/Flags.java
agent/src/share/classes/sun/jvm/hotspot/runtime/Flags.java
+48
-0
agent/src/share/classes/sun/jvm/hotspot/runtime/Thread.java
agent/src/share/classes/sun/jvm/hotspot/runtime/Thread.java
+8
-1
agent/src/share/classes/sun/jvm/hotspot/runtime/VMOps.java
agent/src/share/classes/sun/jvm/hotspot/runtime/VMOps.java
+86
-0
make/bsd/makefiles/sa.make
make/bsd/makefiles/sa.make
+3
-1
make/hotspot_version
make/hotspot_version
+1
-1
make/solaris/makefiles/sa.make
make/solaris/makefiles/sa.make
+5
-1
make/windows/makefiles/sa.make
make/windows/makefiles/sa.make
+17
-1
src/os_cpu/linux_sparc/vm/vm_version_linux_sparc.cpp
src/os_cpu/linux_sparc/vm/vm_version_linux_sparc.cpp
+18
-6
src/share/vm/c1/c1_LIRGenerator.cpp
src/share/vm/c1/c1_LIRGenerator.cpp
+1
-1
src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp
...m/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp
+2
-2
src/share/vm/opto/loopnode.cpp
src/share/vm/opto/loopnode.cpp
+13
-0
src/share/vm/runtime/vmStructs.cpp
src/share/vm/runtime/vmStructs.cpp
+45
-15
src/share/vm/runtime/vmStructs_trace.hpp
src/share/vm/runtime/vmStructs_trace.hpp
+35
-0
test/compiler/loopopts/CountedLoopProblem.java
test/compiler/loopopts/CountedLoopProblem.java
+54
-0
未找到文件。
agent/src/os/linux/ps_proc.c
浏览文件 @
8dd6c5df
...
@@ -27,9 +27,11 @@
...
@@ -27,9 +27,11 @@
#include <string.h>
#include <string.h>
#include <signal.h>
#include <signal.h>
#include <errno.h>
#include <errno.h>
#include <elf.h>
#include <sys/types.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/wait.h>
#include <sys/ptrace.h>
#include <sys/ptrace.h>
#include <sys/uio.h>
#include "libproc_impl.h"
#include "libproc_impl.h"
#if defined(x86_64) && !defined(amd64)
#if defined(x86_64) && !defined(amd64)
...
@@ -138,6 +140,15 @@ static bool process_get_lwp_regs(struct ps_prochandle* ph, pid_t pid, struct use
...
@@ -138,6 +140,15 @@ static bool process_get_lwp_regs(struct ps_prochandle* ph, pid_t pid, struct use
return
false
;
return
false
;
}
}
return
true
;
return
true
;
#elif defined(PTRACE_GETREGSET)
struct
iovec
iov
;
iov
.
iov_base
=
user
;
iov
.
iov_len
=
sizeof
(
*
user
);
if
(
ptrace
(
PTRACE_GETREGSET
,
pid
,
NT_PRSTATUS
,
(
void
*
)
&
iov
)
<
0
)
{
print_debug
(
"ptrace(PTRACE_GETREGSET, ...) failed for lwp %d
\n
"
,
pid
);
return
false
;
}
return
true
;
#else
#else
print_debug
(
"ptrace(PTRACE_GETREGS, ...) not supported
\n
"
);
print_debug
(
"ptrace(PTRACE_GETREGS, ...) not supported
\n
"
);
return
false
;
return
false
;
...
...
agent/src/share/classes/sun/jvm/hotspot/gc_interface/G1YCType.java
0 → 100644
浏览文件 @
8dd6c5df
/*
* Copyright (c) 2015, 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.
*
*/
package
sun.jvm.hotspot.gc_interface
;
//These definitions should be kept in sync with the definitions in the HotSpot
//code.
public
enum
G1YCType
{
Normal
(
"Normal"
),
InitialMark
(
"Initial Mark"
),
DuringMark
(
"During Mark"
),
Mixed
(
"Mixed"
),
G1YCTypeEndSentinel
(
"Unknown"
);
private
final
String
value
;
G1YCType
(
String
val
)
{
this
.
value
=
val
;
}
public
String
value
()
{
return
value
;
}
}
agent/src/share/classes/sun/jvm/hotspot/gc_interface/GCCause.java
0 → 100644
浏览文件 @
8dd6c5df
/*
* Copyright (c) 2015, 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.
*
*/
package
sun.jvm.hotspot.gc_interface
;
//These definitions should be kept in sync with the definitions in the HotSpot code.
public
enum
GCCause
{
_java_lang_system_gc
(
"System.gc()"
),
_full_gc_alot
(
"FullGCAlot"
),
_scavenge_alot
(
"ScavengeAlot"
),
_allocation_profiler
(
"Allocation Profiler"
),
_jvmti_force_gc
(
"JvmtiEnv ForceGarbageCollection"
),
_gc_locker
(
"GCLocker Initiated GC"
),
_heap_inspection
(
"Heap Inspection Initiated GC"
),
_heap_dump
(
"Heap Dump Initiated GC"
),
_no_gc
(
"No GC"
),
_no_cause_specified
(
"Unknown GCCause"
),
_allocation_failure
(
"Allocation Failure"
),
_tenured_generation_full
(
"Tenured Generation Full"
),
_metadata_GC_threshold
(
"Metadata GC Threshold"
),
_cms_generation_full
(
"CMS Generation Full"
),
_cms_initial_mark
(
"CMS Initial Mark"
),
_cms_final_remark
(
"CMS Final Remark"
),
_cms_concurrent_mark
(
"CMS Concurrent Mark"
),
_old_generation_expanded_on_last_scavenge
(
"Old Generation Expanded On Last Scavenge"
),
_old_generation_too_full_to_scavenge
(
"Old Generation Too Full To Scavenge"
),
_adaptive_size_policy
(
"Ergonomics"
),
_g1_inc_collection_pause
(
"G1 Evacuation Pause"
),
_g1_humongous_allocation
(
"G1 Humongous Allocation"
),
_last_ditch_collection
(
"Last ditch collection"
),
_last_gc_cause
(
"ILLEGAL VALUE - last gc cause - ILLEGAL VALUE"
);
private
final
String
value
;
GCCause
(
String
val
)
{
this
.
value
=
val
;
}
public
String
value
()
{
return
value
;
}
}
agent/src/share/classes/sun/jvm/hotspot/gc_interface/GCName.java
0 → 100644
浏览文件 @
8dd6c5df
/*
* Copyright (c) 2015, 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.
*
*/
package
sun.jvm.hotspot.gc_interface
;
//These definitions should be kept in sync with the definitions in the HotSpot code.
public
enum
GCName
{
ParallelOld
(
"ParallelOld"
),
SerialOld
(
"SerialOld"
),
PSMarkSweep
(
"PSMarkSweep"
),
ParallelScavenge
(
"ParallelScavenge"
),
DefNew
(
"DefNew"
),
ParNew
(
"ParNew"
),
G1New
(
"G1New"
),
ConcurrentMarkSweep
(
"ConcurrentMarkSweep"
),
G1Old
(
"G1Old"
),
GCNameEndSentinel
(
"GCNameEndSentinel"
);
private
final
String
value
;
GCName
(
String
val
)
{
this
.
value
=
val
;
}
public
String
value
()
{
return
value
;
}
}
agent/src/share/classes/sun/jvm/hotspot/gc_interface/GCWhen.java
0 → 100644
浏览文件 @
8dd6c5df
/*
* Copyright (c) 2015, 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.
*
*/
package
sun.jvm.hotspot.gc_interface
;
//These definitions should be kept in sync with the definitions in the HotSpot code.
public
enum
GCWhen
{
BeforeGC
(
"Before GC"
),
AfterGC
(
"After GC"
),
GCWhenEndSentinel
(
"GCWhenEndSentinel"
);
private
final
String
value
;
GCWhen
(
String
val
)
{
this
.
value
=
val
;
}
public
String
value
()
{
return
value
;
}
}
agent/src/share/classes/sun/jvm/hotspot/gc_interface/ReferenceType.java
0 → 100644
浏览文件 @
8dd6c5df
/*
* Copyright (c) 2015, 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.
*
*/
package
sun.jvm.hotspot.gc_interface
;
//These definitions should be kept in sync with the definitions in the HotSpot code.
public
enum
ReferenceType
{
REF_NONE
(
"None reference"
),
// Regular class
REF_OTHER
(
"Other reference"
),
// Subclass of java/lang/ref/Reference, but not subclass of one of the classes below
REF_SOFT
(
"Soft reference"
),
// Subclass of java/lang/ref/SoftReference
REF_WEAK
(
"Weak reference"
),
// Subclass of java/lang/ref/WeakReference
REF_FINAL
(
"Final reference"
),
// Subclass of java/lang/ref/FinalReference
REF_PHANTOM
(
"Phantom reference"
);
// Subclass of java/lang/ref/PhantomReference
private
final
String
value
;
ReferenceType
(
String
val
)
{
this
.
value
=
val
;
}
public
String
value
()
{
return
value
;
}
}
agent/src/share/classes/sun/jvm/hotspot/memory/AdaptiveFreeList.java
0 → 100644
浏览文件 @
8dd6c5df
/*
* @(#)AdaptiveFreeList.java
*
* Copyright (c) 2000, 2014, 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.
*
*/
package
sun.jvm.hotspot.memory
;
import
java.util.Observable
;
import
java.util.Observer
;
import
sun.jvm.hotspot.debugger.Address
;
import
sun.jvm.hotspot.runtime.VM
;
import
sun.jvm.hotspot.runtime.VMObject
;
import
sun.jvm.hotspot.types.CIntegerField
;
import
sun.jvm.hotspot.types.Type
;
import
sun.jvm.hotspot.types.TypeDataBase
;
public
class
AdaptiveFreeList
extends
VMObject
{
static
{
VM
.
registerVMInitializedObserver
(
new
Observer
()
{
public
void
update
(
Observable
o
,
Object
data
)
{
initialize
(
VM
.
getVM
().
getTypeDataBase
());
}
});
}
private
static
synchronized
void
initialize
(
TypeDataBase
db
)
{
Type
type
=
db
.
lookupType
(
"AdaptiveFreeList<FreeChunk>"
);
sizeField
=
type
.
getCIntegerField
(
"_size"
);
countField
=
type
.
getCIntegerField
(
"_count"
);
headerSize
=
type
.
getSize
();
}
// Fields
private
static
CIntegerField
sizeField
;
private
static
CIntegerField
countField
;
private
static
long
headerSize
;
//Constructor
public
AdaptiveFreeList
(
Address
address
)
{
super
(
address
);
}
// Accessors
public
long
size
()
{
return
sizeField
.
getValue
(
addr
);
}
public
long
count
()
{
return
countField
.
getValue
(
addr
);
}
public
static
long
sizeOf
()
{
return
headerSize
;
}
}
agent/src/share/classes/sun/jvm/hotspot/memory/CompactibleFreeListSpace.java
浏览文件 @
8dd6c5df
/*
/*
* Copyright (c) 2003, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 201
4
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -24,25 +24,29 @@
...
@@ -24,25 +24,29 @@
package
sun.jvm.hotspot.memory
;
package
sun.jvm.hotspot.memory
;
import
java.io.*
;
import
java.io.PrintStream
;
import
java.util.*
;
import
java.util.ArrayList
;
import
sun.jvm.hotspot.debugger.*
;
import
java.util.Iterator
;
import
sun.jvm.hotspot.oops.*
;
import
java.util.List
;
import
sun.jvm.hotspot.runtime.*
;
import
java.util.Observable
;
import
sun.jvm.hotspot.types.*
;
import
java.util.Observer
;
import
sun.jvm.hotspot.utilities.*
;
import
sun.jvm.hotspot.debugger.Address
;
import
sun.jvm.hotspot.debugger.Debugger
;
import
sun.jvm.hotspot.oops.ObjectHeap
;
import
sun.jvm.hotspot.oops.Oop
;
import
sun.jvm.hotspot.runtime.VM
;
import
sun.jvm.hotspot.runtime.VMObjectFactory
;
import
sun.jvm.hotspot.types.AddressField
;
import
sun.jvm.hotspot.types.Type
;
import
sun.jvm.hotspot.types.TypeDataBase
;
import
sun.jvm.hotspot.utilities.Assert
;
public
class
CompactibleFreeListSpace
extends
CompactibleSpace
{
public
class
CompactibleFreeListSpace
extends
CompactibleSpace
{
private
static
AddressField
collectorField
;
private
static
AddressField
collectorField
;
// for free size, three fields
// FreeBlockDictionary* _dictionary; // ptr to dictionary for large size blocks
// FreeList _indexedFreeList[IndexSetSize]; // indexed array for small size blocks
// LinearAllocBlock _smallLinearAllocBlock; // small linear alloc in TLAB
private
static
AddressField
indexedFreeListField
;
private
static
AddressField
indexedFreeListField
;
private
static
AddressField
dictionaryField
;
private
static
AddressField
dictionaryField
;
private
static
long
smallLinearAllocBlockFieldOffset
;
private
static
long
smallLinearAllocBlockFieldOffset
;
private
static
long
indexedFreeListSizeOf
;
private
int
heapWordSize
;
// 4 for 32bit, 8 for 64 bits
private
int
heapWordSize
;
// 4 for 32bit, 8 for 64 bits
private
int
IndexSetStart
;
// for small indexed list
private
int
IndexSetStart
;
// for small indexed list
...
@@ -109,11 +113,11 @@ public class CompactibleFreeListSpace extends CompactibleSpace {
...
@@ -109,11 +113,11 @@ public class CompactibleFreeListSpace extends CompactibleSpace {
// small chunks
// small chunks
long
size
=
0
;
long
size
=
0
;
Address
cur
=
addr
.
addOffsetTo
(
indexedFreeListField
.
getOffset
()
);
Address
cur
=
addr
.
addOffsetTo
(
indexedFreeListField
.
getOffset
()
);
cur
=
cur
.
addOffsetTo
(
IndexSetStart
*
FreeList
.
sizeOf
());
cur
=
cur
.
addOffsetTo
(
IndexSetStart
*
Adaptive
FreeList
.
sizeOf
());
for
(
int
i
=
IndexSetStart
;
i
<
IndexSetSize
;
i
+=
IndexSetStride
)
{
for
(
int
i
=
IndexSetStart
;
i
<
IndexSetSize
;
i
+=
IndexSetStride
)
{
FreeList
freeList
=
(
FreeList
)
VMObjectFactory
.
newObject
(
FreeList
.
class
,
cur
);
AdaptiveFreeList
freeList
=
(
AdaptiveFreeList
)
VMObjectFactory
.
newObject
(
Adaptive
FreeList
.
class
,
cur
);
size
+=
i
*
freeList
.
count
();
size
+=
i
*
freeList
.
count
();
cur
=
cur
.
addOffsetTo
(
IndexSetStride
*
FreeList
.
sizeOf
());
cur
=
cur
.
addOffsetTo
(
IndexSetStride
*
Adaptive
FreeList
.
sizeOf
());
}
}
// large block
// large block
...
...
agent/src/share/classes/sun/jvm/hotspot/memory/Universe.java
浏览文件 @
8dd6c5df
/*
/*
* Copyright (c) 2000, 201
2
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 201
5
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -56,6 +56,12 @@ public class Universe {
...
@@ -56,6 +56,12 @@ public class Universe {
private
static
AddressField
narrowKlassBaseField
;
private
static
AddressField
narrowKlassBaseField
;
private
static
CIntegerField
narrowKlassShiftField
;
private
static
CIntegerField
narrowKlassShiftField
;
public
enum
NARROW_OOP_MODE
{
UnscaledNarrowOop
,
ZeroBasedNarrowOop
,
HeapBasedNarrowOop
}
static
{
static
{
VM
.
registerVMInitializedObserver
(
new
Observer
()
{
VM
.
registerVMInitializedObserver
(
new
Observer
()
{
public
void
update
(
Observable
o
,
Object
data
)
{
public
void
update
(
Observable
o
,
Object
data
)
{
...
@@ -94,7 +100,17 @@ public class Universe {
...
@@ -94,7 +100,17 @@ public class Universe {
public
Universe
()
{
public
Universe
()
{
}
}
public
static
String
narrowOopModeToString
(
NARROW_OOP_MODE
mode
)
{
switch
(
mode
)
{
case
UnscaledNarrowOop:
return
"32-bits Oops"
;
case
ZeroBasedNarrowOop:
return
"zero based Compressed Oops"
;
case
HeapBasedNarrowOop:
return
"Compressed Oops with base"
;
}
return
""
;
}
public
CollectedHeap
heap
()
{
public
CollectedHeap
heap
()
{
try
{
try
{
return
(
CollectedHeap
)
heapConstructor
.
instantiateWrapperFor
(
collectedHeapField
.
getValue
());
return
(
CollectedHeap
)
heapConstructor
.
instantiateWrapperFor
(
collectedHeapField
.
getValue
());
...
...
agent/src/share/classes/sun/jvm/hotspot/oops/Klass.java
浏览文件 @
8dd6c5df
/*
/*
* Copyright (c) 2000, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 201
5
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -55,6 +55,10 @@ public class Klass extends Metadata implements ClassConstants {
...
@@ -55,6 +55,10 @@ public class Klass extends Metadata implements ClassConstants {
layoutHelper
=
new
IntField
(
type
.
getJIntField
(
"_layout_helper"
),
0
);
layoutHelper
=
new
IntField
(
type
.
getJIntField
(
"_layout_helper"
),
0
);
name
=
type
.
getAddressField
(
"_name"
);
name
=
type
.
getAddressField
(
"_name"
);
accessFlags
=
new
CIntField
(
type
.
getCIntegerField
(
"_access_flags"
),
0
);
accessFlags
=
new
CIntField
(
type
.
getCIntegerField
(
"_access_flags"
),
0
);
try
{
traceIDField
=
type
.
getField
(
"_trace_id"
);
}
catch
(
Exception
e
)
{
}
subklass
=
new
MetadataField
(
type
.
getAddressField
(
"_subklass"
),
0
);
subklass
=
new
MetadataField
(
type
.
getAddressField
(
"_subklass"
),
0
);
nextSibling
=
new
MetadataField
(
type
.
getAddressField
(
"_next_sibling"
),
0
);
nextSibling
=
new
MetadataField
(
type
.
getAddressField
(
"_next_sibling"
),
0
);
...
@@ -86,6 +90,7 @@ public class Klass extends Metadata implements ClassConstants {
...
@@ -86,6 +90,7 @@ public class Klass extends Metadata implements ClassConstants {
private
static
CIntField
accessFlags
;
private
static
CIntField
accessFlags
;
private
static
MetadataField
subklass
;
private
static
MetadataField
subklass
;
private
static
MetadataField
nextSibling
;
private
static
MetadataField
nextSibling
;
private
static
sun
.
jvm
.
hotspot
.
types
.
Field
traceIDField
;
private
Address
getValue
(
AddressField
field
)
{
private
Address
getValue
(
AddressField
field
)
{
return
addr
.
getAddressAt
(
field
.
getOffset
());
return
addr
.
getAddressAt
(
field
.
getOffset
());
...
@@ -107,6 +112,11 @@ public class Klass extends Metadata implements ClassConstants {
...
@@ -107,6 +112,11 @@ public class Klass extends Metadata implements ClassConstants {
public
Klass
getSubklassKlass
()
{
return
(
Klass
)
subklass
.
getValue
(
this
);
}
public
Klass
getSubklassKlass
()
{
return
(
Klass
)
subklass
.
getValue
(
this
);
}
public
Klass
getNextSiblingKlass
()
{
return
(
Klass
)
nextSibling
.
getValue
(
this
);
}
public
Klass
getNextSiblingKlass
()
{
return
(
Klass
)
nextSibling
.
getValue
(
this
);
}
public
long
traceID
()
{
if
(
traceIDField
==
null
)
return
0
;
return
traceIDField
.
getJLong
(
addr
);
}
// computed access flags - takes care of inner classes etc.
// computed access flags - takes care of inner classes etc.
// This is closer to actual source level than getAccessFlags() etc.
// This is closer to actual source level than getAccessFlags() etc.
public
long
computeModifierFlags
()
{
public
long
computeModifierFlags
()
{
...
...
agent/src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java
浏览文件 @
8dd6c5df
/*
/*
* Copyright (c) 2000, 201
2
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 201
5
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -54,6 +54,8 @@ public class OopUtilities implements /* imports */ JVMTIThreadState {
...
@@ -54,6 +54,8 @@ public class OopUtilities implements /* imports */ JVMTIThreadState {
private
static
OopField
threadNameField
;
private
static
OopField
threadNameField
;
private
static
OopField
threadGroupField
;
private
static
OopField
threadGroupField
;
private
static
LongField
threadEETopField
;
private
static
LongField
threadEETopField
;
//tid field is new since 1.5
private
static
LongField
threadTIDField
;
// threadStatus field is new since 1.5
// threadStatus field is new since 1.5
private
static
IntField
threadStatusField
;
private
static
IntField
threadStatusField
;
// parkBlocker field is new since 1.6
// parkBlocker field is new since 1.6
...
@@ -220,6 +222,7 @@ public class OopUtilities implements /* imports */ JVMTIThreadState {
...
@@ -220,6 +222,7 @@ public class OopUtilities implements /* imports */ JVMTIThreadState {
threadNameField
=
(
OopField
)
k
.
findField
(
"name"
,
"[C"
);
threadNameField
=
(
OopField
)
k
.
findField
(
"name"
,
"[C"
);
threadGroupField
=
(
OopField
)
k
.
findField
(
"group"
,
"Ljava/lang/ThreadGroup;"
);
threadGroupField
=
(
OopField
)
k
.
findField
(
"group"
,
"Ljava/lang/ThreadGroup;"
);
threadEETopField
=
(
LongField
)
k
.
findField
(
"eetop"
,
"J"
);
threadEETopField
=
(
LongField
)
k
.
findField
(
"eetop"
,
"J"
);
threadTIDField
=
(
LongField
)
k
.
findField
(
"tid"
,
"J"
);
threadStatusField
=
(
IntField
)
k
.
findField
(
"threadStatus"
,
"I"
);
threadStatusField
=
(
IntField
)
k
.
findField
(
"threadStatus"
,
"I"
);
threadParkBlockerField
=
(
OopField
)
k
.
findField
(
"parkBlocker"
,
threadParkBlockerField
=
(
OopField
)
k
.
findField
(
"parkBlocker"
,
"Ljava/lang/Object;"
);
"Ljava/lang/Object;"
);
...
@@ -268,6 +271,15 @@ public class OopUtilities implements /* imports */ JVMTIThreadState {
...
@@ -268,6 +271,15 @@ public class OopUtilities implements /* imports */ JVMTIThreadState {
return
VM
.
getVM
().
getThreads
().
createJavaThreadWrapper
(
addr
);
return
VM
.
getVM
().
getThreads
().
createJavaThreadWrapper
(
addr
);
}
}
public
static
long
threadOopGetTID
(
Oop
threadOop
)
{
initThreadFields
();
if
(
threadTIDField
!=
null
)
{
return
threadTIDField
.
getValue
(
threadOop
);
}
else
{
return
0
;
}
}
/** returns value of java.lang.Thread.threadStatus field */
/** returns value of java.lang.Thread.threadStatus field */
public
static
int
threadOopGetThreadStatus
(
Oop
threadOop
)
{
public
static
int
threadOopGetThreadStatus
(
Oop
threadOop
)
{
initThreadFields
();
initThreadFields
();
...
...
agent/src/share/classes/sun/jvm/hotspot/opto/CompilerPhaseType.java
0 → 100644
浏览文件 @
8dd6c5df
/*
* Copyright (c) 2015, 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.
*
*/
package
sun.jvm.hotspot.opto
;
//These definitions should be kept in sync with the definitions in the HotSpot code.
public
enum
CompilerPhaseType
{
PHASE_BEFORE_STRINGOPTS
(
"Before StringOpts"
),
PHASE_AFTER_STRINGOPTS
(
"After StringOpts"
),
PHASE_BEFORE_REMOVEUSELESS
(
"Before RemoveUseless"
),
PHASE_AFTER_PARSING
(
"After Parsing"
),
PHASE_ITER_GVN1
(
"Iter GVN 1"
),
PHASE_PHASEIDEAL_BEFORE_EA
(
"PhaseIdealLoop before EA"
),
PHASE_ITER_GVN_AFTER_EA
(
"Iter GVN after EA"
),
PHASE_ITER_GVN_AFTER_ELIMINATION
(
"Iter GVN after eliminating allocations and locks"
),
PHASE_PHASEIDEALLOOP1
(
"PhaseIdealLoop 1"
),
PHASE_PHASEIDEALLOOP2
(
"PhaseIdealLoop 2"
),
PHASE_PHASEIDEALLOOP3
(
"PhaseIdealLoop 3"
),
PHASE_CPP1
(
"PhaseCPP 1"
),
PHASE_ITER_GVN2
(
"Iter GVN 2"
),
PHASE_PHASEIDEALLOOP_ITERATIONS
(
"PhaseIdealLoop iterations"
),
PHASE_OPTIMIZE_FINISHED
(
"Optimize finished"
),
PHASE_GLOBAL_CODE_MOTION
(
"Global code motion"
),
PHASE_FINAL_CODE
(
"Final Code"
),
PHASE_AFTER_EA
(
"After Escape Analysis"
),
PHASE_BEFORE_CLOOPS
(
"Before CountedLoop"
),
PHASE_AFTER_CLOOPS
(
"After CountedLoop"
),
PHASE_BEFORE_BEAUTIFY_LOOPS
(
"Before beautify loops"
),
PHASE_AFTER_BEAUTIFY_LOOPS
(
"After beautify loops"
),
PHASE_BEFORE_MATCHING
(
"Before Matching"
),
PHASE_INCREMENTAL_INLINE
(
"Incremental Inline"
),
PHASE_INCREMENTAL_BOXING_INLINE
(
"Incremental Boxing Inline"
),
PHASE_END
(
"End"
),
PHASE_FAILURE
(
"Failure"
),
PHASE_NUM_TYPES
(
"Number of Phase Types"
);
private
final
String
value
;
CompilerPhaseType
(
String
val
)
{
this
.
value
=
val
;
}
public
String
value
()
{
return
value
;
}
}
agent/src/share/classes/sun/jvm/hotspot/runtime/Flags.java
0 → 100644
浏览文件 @
8dd6c5df
/*
* Copyright (c) 2015, 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.
*
*/
package
sun.jvm.hotspot.runtime
;
//These definitions should be kept in sync with the definitions in the HotSpot code.
public
enum
Flags
{
// value origin
DEFAULT
(
"Default"
),
COMMAND_LINE
(
"Command line"
),
ENVIRON_VAR
(
"Environment variable"
),
CONFIG_FILE
(
"Config file"
),
MANAGEMENT
(
"Management"
),
ERGONOMIC
(
"Ergonomic"
),
ATTACH_ON_DEMAND
(
"Attach on demand"
),
INTERNAL
(
"Internal"
);
private
final
String
value
;
Flags
(
String
val
)
{
this
.
value
=
val
;
}
public
String
value
()
{
return
value
;
}
}
agent/src/share/classes/sun/jvm/hotspot/runtime/Thread.java
浏览文件 @
8dd6c5df
/*
/*
* Copyright (c) 2000, 201
1
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 201
5
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -41,6 +41,8 @@ public class Thread extends VMObject {
...
@@ -41,6 +41,8 @@ public class Thread extends VMObject {
private
static
AddressField
currentPendingMonitorField
;
private
static
AddressField
currentPendingMonitorField
;
private
static
AddressField
currentWaitingMonitorField
;
private
static
AddressField
currentWaitingMonitorField
;
private
static
JLongField
allocatedBytesField
;
static
{
static
{
VM
.
registerVMInitializedObserver
(
new
Observer
()
{
VM
.
registerVMInitializedObserver
(
new
Observer
()
{
public
void
update
(
Observable
o
,
Object
data
)
{
public
void
update
(
Observable
o
,
Object
data
)
{
...
@@ -61,6 +63,7 @@ public class Thread extends VMObject {
...
@@ -61,6 +63,7 @@ public class Thread extends VMObject {
activeHandlesField
=
type
.
getAddressField
(
"_active_handles"
);
activeHandlesField
=
type
.
getAddressField
(
"_active_handles"
);
currentPendingMonitorField
=
type
.
getAddressField
(
"_current_pending_monitor"
);
currentPendingMonitorField
=
type
.
getAddressField
(
"_current_pending_monitor"
);
currentWaitingMonitorField
=
type
.
getAddressField
(
"_current_waiting_monitor"
);
currentWaitingMonitorField
=
type
.
getAddressField
(
"_current_waiting_monitor"
);
allocatedBytesField
=
type
.
getJLongField
(
"_allocated_bytes"
);
}
}
public
Thread
(
Address
addr
)
{
public
Thread
(
Address
addr
)
{
...
@@ -104,6 +107,10 @@ public class Thread extends VMObject {
...
@@ -104,6 +107,10 @@ public class Thread extends VMObject {
return
new
JNIHandleBlock
(
a
);
return
new
JNIHandleBlock
(
a
);
}
}
public
long
allocatedBytes
()
{
return
allocatedBytesField
.
getValue
(
addr
);
}
public
boolean
isVMThread
()
{
return
false
;
}
public
boolean
isVMThread
()
{
return
false
;
}
public
boolean
isJavaThread
()
{
return
false
;
}
public
boolean
isJavaThread
()
{
return
false
;
}
public
boolean
isCompilerThread
()
{
return
false
;
}
public
boolean
isCompilerThread
()
{
return
false
;
}
...
...
agent/src/share/classes/sun/jvm/hotspot/runtime/VMOps.java
0 → 100644
浏览文件 @
8dd6c5df
/*
* Copyright (c) 2015, 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.
*
*/
package
sun.jvm.hotspot.runtime
;
//These definitions should be kept in sync with the definitions in the HotSpot code.
public
enum
VMOps
{
Dummy
,
ThreadStop
,
ThreadDump
,
PrintThreads
,
FindDeadlocks
,
ForceSafepoint
,
ForceAsyncSafepoint
,
Deoptimize
,
DeoptimizeFrame
,
DeoptimizeAll
,
ZombieAll
,
UnlinkSymbols
,
Verify
,
PrintJNI
,
HeapDumper
,
DeoptimizeTheWorld
,
CollectForMetadataAllocation
,
GC_HeapInspection
,
GenCollectFull
,
GenCollectFullConcurrent
,
GenCollectForAllocation
,
ParallelGCFailedAllocation
,
ParallelGCSystemGC
,
CGC_Operation
,
CMS_Initial_Mark
,
CMS_Final_Remark
,
G1CollectFull
,
G1CollectForAllocation
,
G1IncCollectionPause
,
EnableBiasedLocking
,
RevokeBias
,
BulkRevokeBias
,
PopulateDumpSharedSpace
,
JNIFunctionTableCopier
,
RedefineClasses
,
GetOwnedMonitorInfo
,
GetObjectMonitorUsage
,
GetCurrentContendedMonitor
,
GetStackTrace
,
GetMultipleStackTraces
,
GetAllStackTraces
,
GetThreadListStackTraces
,
GetFrameCount
,
GetFrameLocation
,
ChangeBreakpoints
,
GetOrSetLocal
,
GetCurrentLocation
,
EnterInterpOnlyMode
,
ChangeSingleStep
,
HeapWalkOperation
,
HeapIterateOperation
,
ReportJavaOutOfMemory
,
JFRCheckpoint
,
Exit
,
LinuxDllLoad
,
Terminating
}
make/bsd/makefiles/sa.make
浏览文件 @
8dd6c5df
#
#
# Copyright (c) 2003, 201
2
, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2003, 201
5
, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
#
# This code is free software; you can redistribute it and/or modify it
# This code is free software; you can redistribute it and/or modify it
...
@@ -34,6 +34,8 @@ AGENT_DIR = $(GAMMADIR)/agent
...
@@ -34,6 +34,8 @@ AGENT_DIR = $(GAMMADIR)/agent
include
$(GAMMADIR)/make/sa.files
include
$(GAMMADIR)/make/sa.files
-include
$(HS_ALT_MAKE)/bsd/makefiles/sa.make
TOPDIR
=
$(
shell
echo
`
pwd
`
)
TOPDIR
=
$(
shell
echo
`
pwd
`
)
GENERATED
=
$(TOPDIR)
/../generated
GENERATED
=
$(TOPDIR)
/../generated
...
...
make/hotspot_version
浏览文件 @
8dd6c5df
...
@@ -35,7 +35,7 @@ HOTSPOT_VM_COPYRIGHT=Copyright 2015
...
@@ -35,7 +35,7 @@ HOTSPOT_VM_COPYRIGHT=Copyright 2015
HS_MAJOR_VER=25
HS_MAJOR_VER=25
HS_MINOR_VER=60
HS_MINOR_VER=60
HS_BUILD_NUMBER=0
3
HS_BUILD_NUMBER=0
4
JDK_MAJOR_VER=1
JDK_MAJOR_VER=1
JDK_MINOR_VER=8
JDK_MINOR_VER=8
...
...
make/solaris/makefiles/sa.make
浏览文件 @
8dd6c5df
#
#
# Copyright (c) 2003, 201
2
, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2003, 201
5
, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
#
# This code is free software; you can redistribute it and/or modify it
# This code is free software; you can redistribute it and/or modify it
...
@@ -29,8 +29,12 @@
...
@@ -29,8 +29,12 @@
# and generate JNI header file for native methods.
# and generate JNI header file for native methods.
include
$(GAMMADIR)/make/solaris/makefiles/rules.make
include
$(GAMMADIR)/make/solaris/makefiles/rules.make
include
$(GAMMADIR)/make/defs.make
AGENT_DIR
=
$(GAMMADIR)
/agent
AGENT_DIR
=
$(GAMMADIR)
/agent
include
$(GAMMADIR)/make/sa.files
include
$(GAMMADIR)/make/sa.files
-include
$(HS_ALT_MAKE)/solaris/makefiles/sa.make
GENERATED
=
../generated
GENERATED
=
../generated
# tools.jar is needed by the JDI - SA binding
# tools.jar is needed by the JDI - SA binding
...
...
make/windows/makefiles/sa.make
浏览文件 @
8dd6c5df
#
#
# Copyright (c) 2003, 201
3
, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2003, 201
5
, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
#
# This code is free software; you can redistribute it and/or modify it
# This code is free software; you can redistribute it and/or modify it
...
@@ -38,6 +38,22 @@ checkAndBuildSA::
...
@@ -38,6 +38,22 @@ checkAndBuildSA::
GENERATED
=
../generated
GENERATED
=
../generated
HS_COMMON_SRC_REL
=
src
!if
"$(OPENJDK)"
!=
"true"
HS_ALT_SRC_REL
=
src/closed
HS_ALT_SRC
=
$(WorkSpace)
/
$(HS_ALT_SRC_REL)
!
ifndef
HS_ALT_MAKE
HS_ALT_MAKE
=
$(WorkSpace)
/make/closed
!
endif
!
endif
HS_COMMON_SRC
=
$(WorkSpace)
/
$(HS_COMMON_SRC_REL)
!
ifdef
HS_ALT_MAKE
!
include
$(HS_ALT_MAKE)/windows/makefiles/sa.make
!
endif
# tools.jar is needed by the JDI - SA binding
# tools.jar is needed by the JDI - SA binding
SA_CLASSPATH
=
$(BOOT_JAVA_HOME)
/lib/tools.jar
SA_CLASSPATH
=
$(BOOT_JAVA_HOME)
/lib/tools.jar
...
...
src/os_cpu/linux_sparc/vm/vm_version_linux_sparc.cpp
浏览文件 @
8dd6c5df
...
@@ -26,8 +26,8 @@
...
@@ -26,8 +26,8 @@
#include "runtime/os.hpp"
#include "runtime/os.hpp"
#include "vm_version_sparc.hpp"
#include "vm_version_sparc.hpp"
static
bool
detect_niagara
(
)
{
static
bool
cpuinfo_field_contains
(
const
char
*
field
,
const
char
*
value
)
{
char
cpu
[
128
];
char
line
[
1024
];
bool
rv
=
false
;
bool
rv
=
false
;
FILE
*
fp
=
fopen
(
"/proc/cpuinfo"
,
"r"
);
FILE
*
fp
=
fopen
(
"/proc/cpuinfo"
,
"r"
);
...
@@ -35,9 +35,10 @@ static bool detect_niagara() {
...
@@ -35,9 +35,10 @@ static bool detect_niagara() {
return
rv
;
return
rv
;
}
}
while
(
!
feof
(
fp
))
{
while
(
fgets
(
line
,
sizeof
(
line
),
fp
)
!=
NULL
)
{
if
(
fscanf
(
fp
,
"cpu
\t\t
: %100[^
\n
]"
,
&
cpu
)
==
1
)
{
assert
(
strlen
(
line
)
<
sizeof
(
line
)
-
1
,
"buffer line[1024] is too small."
);
if
(
strstr
(
cpu
,
"Niagara"
)
!=
NULL
)
{
if
(
strncmp
(
line
,
field
,
strlen
(
field
))
==
0
)
{
if
(
strstr
(
line
,
value
)
!=
NULL
)
{
rv
=
true
;
rv
=
true
;
}
}
break
;
break
;
...
@@ -45,10 +46,17 @@ static bool detect_niagara() {
...
@@ -45,10 +46,17 @@ static bool detect_niagara() {
}
}
fclose
(
fp
);
fclose
(
fp
);
return
rv
;
return
rv
;
}
}
static
bool
detect_niagara
()
{
return
cpuinfo_field_contains
(
"cpu"
,
"Niagara"
);
}
static
bool
detect_blkinit
()
{
return
cpuinfo_field_contains
(
"cpucaps"
,
"blkinit"
);
}
int
VM_Version
::
platform_features
(
int
features
)
{
int
VM_Version
::
platform_features
(
int
features
)
{
// Default to generic v9
// Default to generic v9
features
=
generic_v9_m
;
features
=
generic_v9_m
;
...
@@ -58,5 +66,9 @@ int VM_Version::platform_features(int features) {
...
@@ -58,5 +66,9 @@ int VM_Version::platform_features(int features) {
features
=
niagara1_m
|
T_family_m
;
features
=
niagara1_m
|
T_family_m
;
}
}
if
(
detect_blkinit
())
{
features
|=
blk_init_instructions_m
;
}
return
features
;
return
features
;
}
}
src/share/vm/c1/c1_LIRGenerator.cpp
浏览文件 @
8dd6c5df
...
@@ -2561,7 +2561,7 @@ void LIRGenerator::do_Goto(Goto* x) {
...
@@ -2561,7 +2561,7 @@ void LIRGenerator::do_Goto(Goto* x) {
// need to free up storage used for OSR entry point
// need to free up storage used for OSR entry point
LIR_Opr
osrBuffer
=
block
()
->
next
()
->
operand
();
LIR_Opr
osrBuffer
=
block
()
->
next
()
->
operand
();
BasicTypeList
signature
;
BasicTypeList
signature
;
signature
.
append
(
T_INT
);
signature
.
append
(
NOT_LP64
(
T_INT
)
LP64_ONLY
(
T_LONG
));
// pass a pointer to osrBuffer
CallingConvention
*
cc
=
frame_map
()
->
c_calling_convention
(
&
signature
);
CallingConvention
*
cc
=
frame_map
()
->
c_calling_convention
(
&
signature
);
__
move
(
osrBuffer
,
cc
->
args
()
->
at
(
0
));
__
move
(
osrBuffer
,
cc
->
args
()
->
at
(
0
));
__
call_runtime_leaf
(
CAST_FROM_FN_PTR
(
address
,
SharedRuntime
::
OSR_migration_end
),
__
call_runtime_leaf
(
CAST_FROM_FN_PTR
(
address
,
SharedRuntime
::
OSR_migration_end
),
...
...
src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp
浏览文件 @
8dd6c5df
/*
/*
* Copyright (c) 2007, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2007, 201
4
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -41,7 +41,7 @@
...
@@ -41,7 +41,7 @@
nonstatic_field(LinearAllocBlock, _word_size, size_t) \
nonstatic_field(LinearAllocBlock, _word_size, size_t) \
nonstatic_field(AFLBinaryTreeDictionary, _total_size, size_t) \
nonstatic_field(AFLBinaryTreeDictionary, _total_size, size_t) \
nonstatic_field(CompactibleFreeListSpace, _dictionary, AFLBinaryTreeDictionary*) \
nonstatic_field(CompactibleFreeListSpace, _dictionary, AFLBinaryTreeDictionary*) \
nonstatic_field(CompactibleFreeListSpace, _indexedFreeList[0],
FreeList<FreeChunk>)
\
nonstatic_field(CompactibleFreeListSpace, _indexedFreeList[0],
AdaptiveFreeList<FreeChunk>)
\
nonstatic_field(CompactibleFreeListSpace, _smallLinearAllocBlock, LinearAllocBlock)
nonstatic_field(CompactibleFreeListSpace, _smallLinearAllocBlock, LinearAllocBlock)
...
...
src/share/vm/opto/loopnode.cpp
浏览文件 @
8dd6c5df
...
@@ -436,6 +436,19 @@ bool PhaseIdealLoop::is_counted_loop( Node *x, IdealLoopTree *loop ) {
...
@@ -436,6 +436,19 @@ bool PhaseIdealLoop::is_counted_loop( Node *x, IdealLoopTree *loop ) {
return
false
;
// cyclic loop or this loop trips only once
return
false
;
// cyclic loop or this loop trips only once
}
}
if
(
phi_incr
!=
NULL
)
{
// check if there is a possiblity of IV overflowing after the first increment
if
(
stride_con
>
0
)
{
if
(
init_t
->
_hi
>
max_jint
-
stride_con
)
{
return
false
;
}
}
else
{
if
(
init_t
->
_lo
<
min_jint
-
stride_con
)
{
return
false
;
}
}
}
// =================================================
// =================================================
// ---- SUCCESS! Found A Trip-Counted Loop! -----
// ---- SUCCESS! Found A Trip-Counted Loop! -----
//
//
...
...
src/share/vm/runtime/vmStructs.cpp
浏览文件 @
8dd6c5df
/*
/*
* Copyright (c) 2000, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 201
5
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -103,6 +103,7 @@
...
@@ -103,6 +103,7 @@
#include "utilities/globalDefinitions.hpp"
#include "utilities/globalDefinitions.hpp"
#include "utilities/hashtable.hpp"
#include "utilities/hashtable.hpp"
#include "utilities/macros.hpp"
#include "utilities/macros.hpp"
#ifdef TARGET_ARCH_x86
#ifdef TARGET_ARCH_x86
# include "vmStructs_x86.hpp"
# include "vmStructs_x86.hpp"
#endif
#endif
...
@@ -167,6 +168,11 @@
...
@@ -167,6 +168,11 @@
#include "gc_implementation/parallelScavenge/vmStructs_parallelgc.hpp"
#include "gc_implementation/parallelScavenge/vmStructs_parallelgc.hpp"
#include "gc_implementation/g1/vmStructs_g1.hpp"
#include "gc_implementation/g1/vmStructs_g1.hpp"
#endif // INCLUDE_ALL_GCS
#endif // INCLUDE_ALL_GCS
#if INCLUDE_TRACE
#include "runtime/vmStructs_trace.hpp"
#endif
#ifdef COMPILER2
#ifdef COMPILER2
#include "opto/addnode.hpp"
#include "opto/addnode.hpp"
#include "opto/block.hpp"
#include "opto/block.hpp"
...
@@ -248,7 +254,6 @@ typedef TwoOopHashtable<Klass*, mtClass> KlassTwoOopHashtable;
...
@@ -248,7 +254,6 @@ typedef TwoOopHashtable<Klass*, mtClass> KlassTwoOopHashtable;
typedef
Hashtable
<
Klass
*
,
mtClass
>
KlassHashtable
;
typedef
Hashtable
<
Klass
*
,
mtClass
>
KlassHashtable
;
typedef
HashtableEntry
<
Klass
*
,
mtClass
>
KlassHashtableEntry
;
typedef
HashtableEntry
<
Klass
*
,
mtClass
>
KlassHashtableEntry
;
typedef
TwoOopHashtable
<
Symbol
*
,
mtClass
>
SymbolTwoOopHashtable
;
typedef
TwoOopHashtable
<
Symbol
*
,
mtClass
>
SymbolTwoOopHashtable
;
typedef
BinaryTreeDictionary
<
Metablock
,
FreeList
<
Metablock
>
>
MetablockTreeDictionary
;
//--------------------------------------------------------------------------------
//--------------------------------------------------------------------------------
// VM_STRUCTS
// VM_STRUCTS
...
@@ -1290,11 +1295,8 @@ typedef BinaryTreeDictionary<Metablock, FreeList<Metablock> > MetablockTreeDicti
...
@@ -1290,11 +1295,8 @@ typedef BinaryTreeDictionary<Metablock, FreeList<Metablock> > MetablockTreeDicti
volatile_nonstatic_field(FreeChunk, _size, size_t) \
volatile_nonstatic_field(FreeChunk, _size, size_t) \
nonstatic_field(FreeChunk, _next, FreeChunk*) \
nonstatic_field(FreeChunk, _next, FreeChunk*) \
nonstatic_field(FreeChunk, _prev, FreeChunk*) \
nonstatic_field(FreeChunk, _prev, FreeChunk*) \
nonstatic_field(FreeList<FreeChunk>, _size, size_t) \
nonstatic_field(AdaptiveFreeList<FreeChunk>, _size, size_t) \
nonstatic_field(FreeList<Metablock>, _size, size_t) \
nonstatic_field(AdaptiveFreeList<FreeChunk>, _count, ssize_t)
nonstatic_field(FreeList<FreeChunk>, _count, ssize_t) \
nonstatic_field(FreeList<Metablock>, _count, ssize_t) \
nonstatic_field(MetablockTreeDictionary, _total_size, size_t)
//--------------------------------------------------------------------------------
//--------------------------------------------------------------------------------
...
@@ -1386,6 +1388,8 @@ typedef BinaryTreeDictionary<Metablock, FreeList<Metablock> > MetablockTreeDicti
...
@@ -1386,6 +1388,8 @@ typedef BinaryTreeDictionary<Metablock, FreeList<Metablock> > MetablockTreeDicti
/* unsigned short on Win32 */
\
/* unsigned short on Win32 */
\
declare_unsigned_integer_type(u1) \
declare_unsigned_integer_type(u1) \
declare_unsigned_integer_type(u2) \
declare_unsigned_integer_type(u2) \
declare_unsigned_integer_type(u4) \
declare_unsigned_integer_type(u8) \
declare_unsigned_integer_type(unsigned) \
declare_unsigned_integer_type(unsigned) \
\
\
/*****************************/
\
/*****************************/
\
...
@@ -2166,14 +2170,8 @@ typedef BinaryTreeDictionary<Metablock, FreeList<Metablock> > MetablockTreeDicti
...
@@ -2166,14 +2170,8 @@ typedef BinaryTreeDictionary<Metablock, FreeList<Metablock> > MetablockTreeDicti
\
\
/* freelist */
\
/* freelist */
\
declare_toplevel_type(FreeChunk*) \
declare_toplevel_type(FreeChunk*) \
declare_toplevel_type(Metablock*) \
declare_toplevel_type(AdaptiveFreeList<FreeChunk>*) \
declare_toplevel_type(FreeBlockDictionary<FreeChunk>*) \
declare_toplevel_type(AdaptiveFreeList<FreeChunk>)
declare_toplevel_type(FreeList<FreeChunk>*) \
declare_toplevel_type(FreeList<FreeChunk>) \
declare_toplevel_type(FreeBlockDictionary<Metablock>*) \
declare_toplevel_type(FreeList<Metablock>*) \
declare_toplevel_type(FreeList<Metablock>) \
declare_type(MetablockTreeDictionary, FreeBlockDictionary<Metablock>)
//--------------------------------------------------------------------------------
//--------------------------------------------------------------------------------
...
@@ -2915,6 +2913,11 @@ VMStructEntry VMStructs::localHotSpotVMStructs[] = {
...
@@ -2915,6 +2913,11 @@ VMStructEntry VMStructs::localHotSpotVMStructs[] = {
GENERATE_STATIC_VM_STRUCT_ENTRY
)
GENERATE_STATIC_VM_STRUCT_ENTRY
)
#endif // INCLUDE_ALL_GCS
#endif // INCLUDE_ALL_GCS
#if INCLUDE_TRACE
VM_STRUCTS_TRACE
(
GENERATE_NONSTATIC_VM_STRUCT_ENTRY
,
GENERATE_STATIC_VM_STRUCT_ENTRY
)
#endif
VM_STRUCTS_CPU
(
GENERATE_NONSTATIC_VM_STRUCT_ENTRY
,
VM_STRUCTS_CPU
(
GENERATE_NONSTATIC_VM_STRUCT_ENTRY
,
GENERATE_STATIC_VM_STRUCT_ENTRY
,
GENERATE_STATIC_VM_STRUCT_ENTRY
,
GENERATE_UNCHECKED_NONSTATIC_VM_STRUCT_ENTRY
,
GENERATE_UNCHECKED_NONSTATIC_VM_STRUCT_ENTRY
,
...
@@ -2960,6 +2963,11 @@ VMTypeEntry VMStructs::localHotSpotVMTypes[] = {
...
@@ -2960,6 +2963,11 @@ VMTypeEntry VMStructs::localHotSpotVMTypes[] = {
GENERATE_TOPLEVEL_VM_TYPE_ENTRY
)
GENERATE_TOPLEVEL_VM_TYPE_ENTRY
)
#endif // INCLUDE_ALL_GCS
#endif // INCLUDE_ALL_GCS
#if INCLUDE_TRACE
VM_TYPES_TRACE
(
GENERATE_VM_TYPE_ENTRY
,
GENERATE_TOPLEVEL_VM_TYPE_ENTRY
)
#endif
VM_TYPES_CPU
(
GENERATE_VM_TYPE_ENTRY
,
VM_TYPES_CPU
(
GENERATE_VM_TYPE_ENTRY
,
GENERATE_TOPLEVEL_VM_TYPE_ENTRY
,
GENERATE_TOPLEVEL_VM_TYPE_ENTRY
,
GENERATE_OOP_VM_TYPE_ENTRY
,
GENERATE_OOP_VM_TYPE_ENTRY
,
...
@@ -2995,6 +3003,10 @@ VMIntConstantEntry VMStructs::localHotSpotVMIntConstants[] = {
...
@@ -2995,6 +3003,10 @@ VMIntConstantEntry VMStructs::localHotSpotVMIntConstants[] = {
VM_INT_CONSTANTS_PARNEW
(
GENERATE_VM_INT_CONSTANT_ENTRY
)
VM_INT_CONSTANTS_PARNEW
(
GENERATE_VM_INT_CONSTANT_ENTRY
)
#endif // INCLUDE_ALL_GCS
#endif // INCLUDE_ALL_GCS
#if INCLUDE_TRACE
VM_INT_CONSTANTS_TRACE
(
GENERATE_VM_INT_CONSTANT_ENTRY
)
#endif
VM_INT_CONSTANTS_CPU
(
GENERATE_VM_INT_CONSTANT_ENTRY
,
VM_INT_CONSTANTS_CPU
(
GENERATE_VM_INT_CONSTANT_ENTRY
,
GENERATE_PREPROCESSOR_VM_INT_CONSTANT_ENTRY
,
GENERATE_PREPROCESSOR_VM_INT_CONSTANT_ENTRY
,
GENERATE_C1_VM_INT_CONSTANT_ENTRY
,
GENERATE_C1_VM_INT_CONSTANT_ENTRY
,
...
@@ -3057,8 +3069,14 @@ VMStructs::init() {
...
@@ -3057,8 +3069,14 @@ VMStructs::init() {
VM_STRUCTS_G1
(
CHECK_NONSTATIC_VM_STRUCT_ENTRY
,
VM_STRUCTS_G1
(
CHECK_NONSTATIC_VM_STRUCT_ENTRY
,
CHECK_STATIC_VM_STRUCT_ENTRY
);
CHECK_STATIC_VM_STRUCT_ENTRY
);
#endif // INCLUDE_ALL_GCS
#endif // INCLUDE_ALL_GCS
#if INCLUDE_TRACE
VM_STRUCTS_TRACE
(
CHECK_NONSTATIC_VM_STRUCT_ENTRY
,
CHECK_STATIC_VM_STRUCT_ENTRY
);
#endif
VM_STRUCTS_CPU
(
CHECK_NONSTATIC_VM_STRUCT_ENTRY
,
VM_STRUCTS_CPU
(
CHECK_NONSTATIC_VM_STRUCT_ENTRY
,
CHECK_STATIC_VM_STRUCT_ENTRY
,
CHECK_STATIC_VM_STRUCT_ENTRY
,
CHECK_NO_OP
,
CHECK_NO_OP
,
...
@@ -3097,8 +3115,14 @@ VMStructs::init() {
...
@@ -3097,8 +3115,14 @@ VMStructs::init() {
VM_TYPES_G1
(
CHECK_VM_TYPE_ENTRY
,
VM_TYPES_G1
(
CHECK_VM_TYPE_ENTRY
,
CHECK_SINGLE_ARG_VM_TYPE_NO_OP
);
CHECK_SINGLE_ARG_VM_TYPE_NO_OP
);
#endif // INCLUDE_ALL_GCS
#endif // INCLUDE_ALL_GCS
#if INCLUDE_TRACE
VM_TYPES_TRACE
(
CHECK_VM_TYPE_ENTRY
,
CHECK_SINGLE_ARG_VM_TYPE_NO_OP
);
#endif
VM_TYPES_CPU
(
CHECK_VM_TYPE_ENTRY
,
VM_TYPES_CPU
(
CHECK_VM_TYPE_ENTRY
,
CHECK_SINGLE_ARG_VM_TYPE_NO_OP
,
CHECK_SINGLE_ARG_VM_TYPE_NO_OP
,
CHECK_SINGLE_ARG_VM_TYPE_NO_OP
,
CHECK_SINGLE_ARG_VM_TYPE_NO_OP
,
...
@@ -3161,6 +3185,12 @@ VMStructs::init() {
...
@@ -3161,6 +3185,12 @@ VMStructs::init() {
debug_only
(
VM_STRUCTS_G1
(
ENSURE_FIELD_TYPE_PRESENT
,
debug_only
(
VM_STRUCTS_G1
(
ENSURE_FIELD_TYPE_PRESENT
,
ENSURE_FIELD_TYPE_PRESENT
));
ENSURE_FIELD_TYPE_PRESENT
));
#endif // INCLUDE_ALL_GCS
#endif // INCLUDE_ALL_GCS
#if INCLUDE_TRACE
debug_only
(
VM_STRUCTS_TRACE
(
ENSURE_FIELD_TYPE_PRESENT
,
ENSURE_FIELD_TYPE_PRESENT
));
#endif
debug_only
(
VM_STRUCTS_CPU
(
ENSURE_FIELD_TYPE_PRESENT
,
debug_only
(
VM_STRUCTS_CPU
(
ENSURE_FIELD_TYPE_PRESENT
,
ENSURE_FIELD_TYPE_PRESENT
,
ENSURE_FIELD_TYPE_PRESENT
,
CHECK_NO_OP
,
CHECK_NO_OP
,
...
...
src/share/vm/runtime/vmStructs_trace.hpp
0 → 100644
浏览文件 @
8dd6c5df
/*
* Copyright (c) 2015, 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.
*
*/
#ifndef SHARE_VM_RUNTIME_VMSTRUCTS_TRACE_HPP
#define SHARE_VM_RUNTIME_VMSTRUCTS_TRACE_HPP
#define VM_INT_CONSTANTS_TRACE(a)
#define VM_STRUCTS_TRACE(a, b)
#define VM_TYPES_TRACE(a, b)
#endif // SHARE_VM_RUNTIME_VMSTRUCTS_TRACE_HPP
agent/src/share/classes/sun/jvm/hotspot/memory/FreeList
.java
→
test/compiler/loopopts/CountedLoopProblem
.java
浏览文件 @
8dd6c5df
/*
/*
* @(#)FreeList.java
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
*
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -24,49 +22,33 @@
...
@@ -24,49 +22,33 @@
*
*
*/
*/
package
sun.jvm.hotspot.memory
;
/**
* @test
* @bug 8072753
* @summary Inner loop induction variable increment occurs before compare which causes integer overflow
* @run main/othervm CountedLoopProblem
*
*/
import
java.util.*
;
import
java.util.*
;
import
sun.jvm.hotspot.debugger.*
;
import
sun.jvm.hotspot.types.*
;
import
sun.jvm.hotspot.runtime.*
;
public
class
FreeList
extends
VMObject
{
static
{
VM
.
registerVMInitializedObserver
(
new
Observer
()
{
public
void
update
(
Observable
o
,
Object
data
)
{
initialize
(
VM
.
getVM
().
getTypeDataBase
());
}
});
}
private
static
synchronized
void
initialize
(
TypeDataBase
db
)
{
Type
type
=
db
.
lookupType
(
"FreeList<FreeChunk>"
);
sizeField
=
type
.
getCIntegerField
(
"_size"
);
countField
=
type
.
getCIntegerField
(
"_count"
);
headerSize
=
type
.
getSize
();
}
// Fields
private
static
CIntegerField
sizeField
;
private
static
CIntegerField
countField
;
private
static
long
headerSize
;
//Constructor
public
class
CountedLoopProblem
{
public
FreeList
(
Address
address
)
{
public
static
void
main
(
String
[]
args
)
throws
Exception
{
super
(
address
);
Random
r
=
new
Random
(
42
);
int
x
=
0
;
StringBuilder
sb
=
new
StringBuilder
();
for
(
int
i
=
0
;
i
<
1000000
;
++
i
)
{
int
v
=
Math
.
abs
(
r
.
nextInt
());
sb
.
append
(
'+'
).
append
(
v
).
append
(
'\n'
);
x
+=
v
;
// To trigger the problem we must OSR in the following loop
// To make the problem 100% reproducible run with -XX:-TieredCompilation -XX:OSROnlyBCI=62
while
(
x
<
0
)
x
+=
1000000000
;
sb
.
append
(
'='
).
append
(
x
).
append
(
'\n'
);
}
}
if
(
sb
.
toString
().
hashCode
()
!=
0xaba94591
)
{
// Accessors
throw
new
Exception
(
"Unexpected result"
);
public
long
size
()
{
return
sizeField
.
getValue
(
addr
);
}
}
public
long
count
()
{
return
countField
.
getValue
(
addr
);
}
public
static
long
sizeOf
()
{
return
headerSize
;
}
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录