Merge
This commit is contained in:
commit
2f1e08ffec
@ -29,6 +29,8 @@ package java.lang.invoke;
|
||||
* LambdaConversionException
|
||||
*/
|
||||
public class LambdaConversionException extends Exception {
|
||||
private static final long serialVersionUID = 292L + 8L;
|
||||
|
||||
/**
|
||||
* Constructs a {@code LambdaConversionException}.
|
||||
*/
|
||||
|
@ -137,6 +137,11 @@ java/lang/Class/asSubclass/BasicUnit.java generic-all
|
||||
# 8015780
|
||||
java/lang/reflect/Method/GenericStringTest.java generic-all
|
||||
|
||||
# 8019845 due to memleak not related to the tested fix
|
||||
java/lang/instrument/RedefineBigClass.sh linux-x64
|
||||
java/lang/instrument/RetransformBigClass.sh linux-x64
|
||||
|
||||
|
||||
############################################################################
|
||||
|
||||
# jdk_management
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2013 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
|
||||
@ -22,7 +22,7 @@
|
||||
#
|
||||
|
||||
# @test
|
||||
# @bug 7121600
|
||||
# @bug 7121600 8016838
|
||||
# @summary Redefine a big class.
|
||||
# @author Daniel D. Daugherty
|
||||
#
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2011, 2013 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
|
||||
@ -21,12 +21,21 @@
|
||||
* questions.
|
||||
*/
|
||||
|
||||
import java.io.*;
|
||||
|
||||
public class RedefineBigClassApp {
|
||||
/**
|
||||
* Memory leak is assumed, if application consumes more than specified amount of memory during its execution.
|
||||
* The number is given in Kb.
|
||||
*/
|
||||
private static final long MEM_LEAK_THRESHOLD = 32 * 1024; // 32Mb
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
System.out.println("Creating instance of " +
|
||||
RedefineBigClassAgent.clz);
|
||||
RedefineBigClassAgent.clz.newInstance();
|
||||
|
||||
long vMemBefore = getVMemSize();
|
||||
int count = 0;
|
||||
while (!RedefineBigClassAgent.doneRedefining) {
|
||||
System.out.println("App loop count: " + ++count);
|
||||
@ -37,6 +46,39 @@ public class RedefineBigClassApp {
|
||||
}
|
||||
System.out.println("App looped " + count + " times.");
|
||||
|
||||
long vMemAfter = getVMemSize();
|
||||
if (vMemBefore == 0 || vMemAfter == 0) {
|
||||
System.err.println("WARNING: Cannot perform memory leak detection on this OS");
|
||||
} else {
|
||||
long vMemDelta = vMemAfter - vMemBefore;
|
||||
if (vMemDelta > MEM_LEAK_THRESHOLD) {
|
||||
System.err.println("FAIL: Virtual memory usage increased by " + vMemDelta + "Kb " +
|
||||
"(greater than " + MEM_LEAK_THRESHOLD + "Kb)");
|
||||
System.exit(1);
|
||||
}
|
||||
System.err.println("PASS: Virtual memory usage increased by " + vMemDelta + "Kb " +
|
||||
"(not greater than " + MEM_LEAK_THRESHOLD + "Kb)");
|
||||
}
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return size of virtual memory allocated to the process in Kb.
|
||||
* Linux specific. On other platforms and in case of any errors return 0.
|
||||
*/
|
||||
private static long getVMemSize() {
|
||||
|
||||
// Refer to the Linux proc(5) man page for details about /proc/self/stat file
|
||||
//
|
||||
// In short, this file contains status information about the current process
|
||||
// written in one line. The fields are separated with spaces.
|
||||
// The 23rd field is defined as 'vsize %lu Virtual memory size in bytes'
|
||||
|
||||
try (FileReader fileReader = new FileReader("/proc/self/stat");
|
||||
BufferedReader bufferedReader = new BufferedReader(fileReader)) {
|
||||
String line = bufferedReader.readLine();
|
||||
return Long.parseLong(line.split(" ")[22]) / 1024;
|
||||
} catch (Exception ex) {}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2013 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
|
||||
@ -22,7 +22,7 @@
|
||||
#
|
||||
|
||||
# @test
|
||||
# @bug 7122253
|
||||
# @bug 7122253 8016838
|
||||
# @summary Retransform a big class.
|
||||
# @author Daniel D. Daugherty
|
||||
#
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2011, 2013 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
|
||||
@ -21,12 +21,21 @@
|
||||
* questions.
|
||||
*/
|
||||
|
||||
import java.io.*;
|
||||
|
||||
public class RetransformBigClassApp {
|
||||
/**
|
||||
* Memory leak is assumed, if application consumes more than specified amount of memory during its execution.
|
||||
* The number is given in Kb.
|
||||
*/
|
||||
private static final long MEM_LEAK_THRESHOLD = 32 * 1024; // 32Mb
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
System.out.println("Creating instance of " +
|
||||
RetransformBigClassAgent.clz);
|
||||
RetransformBigClassAgent.clz.newInstance();
|
||||
|
||||
long vMemBefore = getVMemSize();
|
||||
int count = 0;
|
||||
while (!RetransformBigClassAgent.doneRetransforming) {
|
||||
System.out.println("App loop count: " + ++count);
|
||||
@ -37,6 +46,39 @@ public class RetransformBigClassApp {
|
||||
}
|
||||
System.out.println("App looped " + count + " times.");
|
||||
|
||||
long vMemAfter = getVMemSize();
|
||||
if (vMemBefore == 0 || vMemAfter == 0) {
|
||||
System.err.println("WARNING: Cannot perform memory leak detection on this OS");
|
||||
} else {
|
||||
long vMemDelta = vMemAfter - vMemBefore;
|
||||
if (vMemDelta > MEM_LEAK_THRESHOLD) {
|
||||
System.err.println("FAIL: Virtual memory usage increased by " + vMemDelta + "Kb " +
|
||||
"(greater than " + MEM_LEAK_THRESHOLD + "Kb)");
|
||||
System.exit(1);
|
||||
}
|
||||
System.err.println("PASS: Virtual memory usage increased by " + vMemDelta + "Kb " +
|
||||
"(not greater than " + MEM_LEAK_THRESHOLD + "Kb)");
|
||||
}
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return size of virtual memory allocated to the process in Kb.
|
||||
* Linux specific. On other platforms and in case of any errors return 0.
|
||||
*/
|
||||
private static long getVMemSize() {
|
||||
|
||||
// Refer to the Linux proc(5) man page for details about /proc/self/stat file
|
||||
//
|
||||
// In short, this file contains status information about the current process
|
||||
// written in one line. The fields are separated with spaces.
|
||||
// The 23rd field is defined as 'vsize %lu Virtual memory size in bytes'
|
||||
|
||||
try (FileReader fileReader = new FileReader("/proc/self/stat");
|
||||
BufferedReader bufferedReader = new BufferedReader(fileReader)) {
|
||||
String line = bufferedReader.readLine();
|
||||
return Long.parseLong(line.split(" ")[22]) / 1024;
|
||||
} catch (Exception ex) {}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user