提交 2890559e 编写于 作者: M mduigou

Merge

...@@ -29,6 +29,8 @@ package java.lang.invoke; ...@@ -29,6 +29,8 @@ package java.lang.invoke;
* LambdaConversionException * LambdaConversionException
*/ */
public class LambdaConversionException extends Exception { public class LambdaConversionException extends Exception {
private static final long serialVersionUID = 292L + 8L;
/** /**
* Constructs a {@code LambdaConversionException}. * Constructs a {@code LambdaConversionException}.
*/ */
......
...@@ -137,6 +137,11 @@ java/lang/Class/asSubclass/BasicUnit.java generic-all ...@@ -137,6 +137,11 @@ java/lang/Class/asSubclass/BasicUnit.java generic-all
# 8015780 # 8015780
java/lang/reflect/Method/GenericStringTest.java generic-all 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 # jdk_management
......
# #
# 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. # 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
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
# #
# @test # @test
# @bug 7121600 # @bug 7121600 8016838
# @summary Redefine a big class. # @summary Redefine a big class.
# @author Daniel D. Daugherty # @author Daniel D. Daugherty
# #
......
/* /*
* 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. * 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
...@@ -21,12 +21,21 @@ ...@@ -21,12 +21,21 @@
* questions. * questions.
*/ */
import java.io.*;
public class RedefineBigClassApp { 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 { public static void main(String[] args) throws Exception {
System.out.println("Creating instance of " + System.out.println("Creating instance of " +
RedefineBigClassAgent.clz); RedefineBigClassAgent.clz);
RedefineBigClassAgent.clz.newInstance(); RedefineBigClassAgent.clz.newInstance();
long vMemBefore = getVMemSize();
int count = 0; int count = 0;
while (!RedefineBigClassAgent.doneRedefining) { while (!RedefineBigClassAgent.doneRedefining) {
System.out.println("App loop count: " + ++count); System.out.println("App loop count: " + ++count);
...@@ -37,6 +46,39 @@ public class RedefineBigClassApp { ...@@ -37,6 +46,39 @@ public class RedefineBigClassApp {
} }
System.out.println("App looped " + count + " times."); 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); 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;
}
} }
# #
# 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. # 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
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
# #
# @test # @test
# @bug 7122253 # @bug 7122253 8016838
# @summary Retransform a big class. # @summary Retransform a big class.
# @author Daniel D. Daugherty # @author Daniel D. Daugherty
# #
......
/* /*
* 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. * 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
...@@ -21,12 +21,21 @@ ...@@ -21,12 +21,21 @@
* questions. * questions.
*/ */
import java.io.*;
public class RetransformBigClassApp { 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 { public static void main(String[] args) throws Exception {
System.out.println("Creating instance of " + System.out.println("Creating instance of " +
RetransformBigClassAgent.clz); RetransformBigClassAgent.clz);
RetransformBigClassAgent.clz.newInstance(); RetransformBigClassAgent.clz.newInstance();
long vMemBefore = getVMemSize();
int count = 0; int count = 0;
while (!RetransformBigClassAgent.doneRetransforming) { while (!RetransformBigClassAgent.doneRetransforming) {
System.out.println("App loop count: " + ++count); System.out.println("App loop count: " + ++count);
...@@ -37,6 +46,39 @@ public class RetransformBigClassApp { ...@@ -37,6 +46,39 @@ public class RetransformBigClassApp {
} }
System.out.println("App looped " + count + " times."); 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); 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;
}
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册