-
Bug
-
Resolution: Fixed
-
P2
-
8u40, 9
-
b42
-
generic
-
generic
-
Verified
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8084712 | emb-9 | Vladimir Ivanov | P2 | Resolved | Fixed | team |
JDK-8068114 | 8u45 | Vladimir Ivanov | P2 | Resolved | Fixed | b02 |
JDK-8065969 | 8u40 | Vladimir Ivanov | P2 | Closed | Fixed | b19 |
JDK-8069979 | emb-8u47 | Vladimir Ivanov | P2 | Resolved | Fixed | team |
Patch link: http://cr.openjdk.java.net/~vlivanov/lfc/2014-07-16
JDK WS patched: http://hg.openjdk.java.net/jdk9/dev/jdk
Sequential creation of method handles garbage causes OOME in patched jdk. NO OOME happens in original JDK 9 b27.
Here is the code to check for OOME (run it with limited heap, e.g. -Xmx10m):
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
*
* @author kshefov
*/
public class LFCOOMTest {
static Random RNG = new Random();
static final MethodHandles.Lookup lookup = MethodHandles.lookup();
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws
ClassNotFoundException, NoSuchMethodException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException {
int arity;
MethodType mt;
MethodHandle mh;
while (true) {
arity = RNG.nextInt(127);
mt = randomMethodTypeGenerator(arity);
mh = methodHandleGenerator(mt.returnType(),
mt.parameterList());
}
}
private static MethodHandle methodHandleGenerator(Class<?>
returnType, List<Class<?>> argTypes) throws NoSuchMethodException,
IllegalAccessException {
MethodHandle result;
Class<?> clazz = Class1.class;
String returnTypeStr = returnType.getSimpleName();
result = lookup.findStatic(clazz, "return" + returnTypeStr,
MethodType.methodType(returnType));
return MethodHandles.dropArguments(result, 0, argTypes);
}
private static MethodType randomMethodTypeGenerator(int arity) {
List<Class<?>> list = new ArrayList<>(arity);
Class<?> argType;
for (int i = 0; i < arity; i++) {
argType = classes[RNG.nextInt(classes.length - 1)];
list.add(argType);
}
Class<?> rtype = classes[RNG.nextInt(classes.length)];
return MethodType.methodType(rtype, list);
}
private static final Class<?> classes[] = {
Object.class,
int.class,
boolean.class,
byte.class,
short.class,
char.class,
long.class,
float.class,
double.class,
void.class
};
private static class Class1 {
static Object returnObject() {
return 1;
}
static int returnint() {
return 1;
}
static char returnchar() {
return 1;
}
static boolean returnboolean() {
return true;
}
static byte returnbyte() {
return 1;
}
static short returnshort() {
return 1;
}
static long returnlong() {
return 1;
}
static float returnfloat() {
return 1;
}
static double returndouble() {
return 1;
}
static void returnvoid() {
}
}
}
- backported by
-
JDK-8068114 LambdaForm caches should support eviction
-
- Resolved
-
-
JDK-8069979 LambdaForm caches should support eviction
-
- Resolved
-
-
JDK-8084712 LambdaForm caches should support eviction
-
- Resolved
-
-
JDK-8065969 LambdaForm caches should support eviction
-
- Closed
-
- duplicates
-
JDK-8059071 java/lang/invoke/LFCaching/LFSingleThreadCachingTest.java - java.lang.OutOfMemoryError: Java heap space
-
- Closed
-
- relates to
-
JDK-8046703 JEP 210: LambdaForm Reduction and Caching
-
- Closed
-
-
JDK-8058728 TEST_BUG: Make java/lang/invoke/LFCaching/LFGarbageCollectedTest.java skip arrayElementSetter and arrayElementGetter methods
-
- Resolved
-
-
JDK-8067344 Adjust java/lang/invoke/LFCaching/LFGarbageCollectedTest.java for recent changes in java.lang.invoke
-
- Resolved
-
-
JDK-8058584 [TEST_BUG] Ignore java/lang/invoke/LFCaching/LFGarbageCollectedTest until 8057020 is fixed
-
- Resolved
-
-
JDK-8059071 java/lang/invoke/LFCaching/LFSingleThreadCachingTest.java - java.lang.OutOfMemoryError: Java heap space
-
- Closed
-