-
Bug
-
Resolution: Fixed
-
P3
-
hs10, 6, 6u5, 6u7-rev
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-2172092 | 6u10 | Tom Rodriguez | P3 | Resolved | Fixed | b24 |
JDK-2164155 | OpenJDK6 | Joe Darcy | P3 | Resolved | Fixed | b11 |
JDK-2160621 | hs11 | Tom Rodriguez | P3 | Closed | Fixed | b12 |
java version "1.6.0_04"
Java(TM) SE Runtime Environment (build 1.6.0_04-b12)
Java HotSpot(TM) 64-Bit Server VM (build 10.0-b19, mixed mode)
FULL OS VERSION :
Microsoft Windows [Version 6.0.6000]
(Vista Business 64)
A DESCRIPTION OF THE PROBLEM :
Program consistently fails in 64-bit jvm (client & server) but works in 32-bit jvm. Get access violation in hotspot compiler thread (but reported as "outside the jvm in native code" - I think incorrectly).
Note that the error report below indicates an error occurred getting the native stack. During one run I attached visual studio and captured the native stack when the access violation occurred, pasted below:
> jvm.dll!0000000008093cbb()
[Frames below may be incorrect and/or missing, no symbols loaded for jvm.dll]
jvm.dll!00000000080963c7()
jvm.dll!00000000080d8aa1()
jvm.dll!00000000080d95e5()
jvm.dll!0000000008086d7d()
jvm.dll!00000000080dc132()
jvm.dll!00000000080dcf8a()
jvm.dll!00000000083db2df()
jvm.dll!000000000831be59()
msvcrt.dll!000007feff5e94e7()
msvcrt.dll!000007feff5e967d()
kernel32.dll!000000007780cdcd()
ntdll.dll!0000000077a2c6e1()
Crash Log is attached seperatly
THE PROBLEM WAS REPRODUCIBLE WITH -Xint FLAG: No
THE PROBLEM WAS REPRODUCIBLE WITH -server FLAG: Yes
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Run the sample code using a 64-bit JVM (may be vista specific? haven't tried on other platforms)
EXPECTED VERSUS ACTUAL BEHAVIOR :
Expect program to exit normally after the loop. Actual behavior is access violation on the last iteration of the loop.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
<snip>
Running test 9998 -> 1220321112
Running test 9999 -> 1468100534
#
# An unexpected error has been detected by Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION[thread 4404 also had an error] (0xc0000005)
at pc=0x0000000008093cbb, pid=2304, tid=4504
#
# Java VM: Java HotSpot(TM) 64-Bit Server VM (10.0-b19 mixed mode windows-amd64)
# Problematic frame:
# V [jvm.dll+0x93cbb]
#
# An error report file with more information is saved as:
# D:\PRWorkspace\PR05-DevTip\AccessViolationTest\hs_err_pid2304.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.util.ArrayList;
import java.util.Arrays;
public class AV64bit {
private static AV64bit oFactoryInstance = new AV64bit();
public static StringBuffer acquire(int requested) {
return (StringBuffer) oFactoryInstance.acquireObject(requested);
}
private final int[] mPoolCapacities = { 32 + 1, 64 + 1, 128 + 1, 256 + 1, 1024 + 1, 2 * 1024 + 1, 4 * 1024 + 1, 6 * 1024 + 1, 10 * 1024 + 1, 32 * 1024 + 1, 60 * 1024 + 1, 100 * 1024 + 1 };
private final int[] mPerCapacityPoolSize = { 10, 10, 50, 100, 100, 100, 10, 100, 100, 50, 10, 10 };
@SuppressWarnings("unchecked")
private ArrayList[] mPoolLists = new ArrayList[mPoolCapacities.length];
private long[] mCreateCount = new long[mPoolCapacities.length];
private long[] mReuseCount = new long[mPoolCapacities.length];
private long[] mTAL = new long[mPoolCapacities.length];
private int iOverAlloc;
private AV64bit() {
Arrays.fill(mTAL, System.currentTimeMillis());
}
@SuppressWarnings("unchecked")
private Object acquireObject(int requested) {
int which = getWhich(requested);
int capacity;
if (which > -1) {
capacity = mPoolCapacities[which];
ArrayList list = null;
synchronized (mPoolLists) {
if (mPoolLists[which] == null) {
mPoolLists[which] = new ArrayList(mPerCapacityPoolSize[which]);
}
list = mPoolLists[which];
}
// remove a Product from the allocations list,
synchronized (list) {
int size = list.size();
if (size > 0) {
mReuseCount[which]++;
return list.remove(--size);
}
}
} else {
capacity = requested;
}
// count allocations as we go for reporting
if (which == -1)
iOverAlloc++;
else
mCreateCount[which]++;
return newProduct(capacity);
}
private int getWhich(int capacity) {
if (capacity == 0)
return 0; // return FIRST bucket (zero-based)
for (int i = 0; i < mPoolCapacities.length; i++)
if (capacity <= mPoolCapacities[i])
return i;
return -1;
}
private Object newProduct(int capacity) {
return new StringBuffer(capacity);
}
public static void main(String[] args) {
for (int i = 0; i < 10000; i++) {
StringBuffer buffer = AV64bit.acquire(1024);
System.out.printf("Running test %5d -> %d\n", i, buffer.hashCode());
}
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
None found.
- backported by
-
JDK-2164155 access violation in CompilerThread0
- Resolved
-
JDK-2172092 access violation in CompilerThread0
- Resolved
-
JDK-2160621 access violation in CompilerThread0
- Closed
- relates to
-
JDK-6614100 EXCEPTION_ACCESS_VIOLATION while running Eclipse with 1.6.0_05-ea
- Resolved
-
JDK-6663854 assert(n != __null,"Bad immediate dominator info.") in C2 with -Xcomp
- Resolved
-
JDK-8331575 C2: crash when ConvL2I is split thru phi at LongCountedLoop
- Resolved
-
JDK-6675699 need comprehensive fix for unconstrained ConvI2L with narrowed type
- Closed
-
JDK-4781451 Graph test cgt2 fails with Pascal Triangle Row Computed Incorrectly
- Closed
-
JDK-4799512 CTW assertion at loopnode.hpp, 432
- Closed
-
JDK-6661016 Segmentation fault while compiling java code in eclipse
- Closed
-
JDK-8298851 C2: ConvL2I nodes should not be split through phis
- Closed
-
JDK-6260293 fix set_ctrl() inconsistencies in loopopts
- Resolved