1 Star 0 Fork 72

Anonymous_Z/openjdk-11

forked from src-openEuler/openjdk-11 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
8226536-Catch-OOM-from-deopt-that-fails-rematerializ.patch 3.32 KB
一键复制 编辑 原始数据 按行查看 历史
Noah 提交于 2020-04-26 19:46 +08:00 . Initial build from OpenJDK 11.0.6
From 7a656d6c14da1ec666ee5ebf55995c6b6bf4ab7f Mon Sep 17 00:00:00 2001
Date: Tue, 17 Mar 2020 11:06:41 +0800
Subject: [PATCH] 8226536: Catch OOM from deopt that fails rematerializing
objects
Summary: <test>: fix testcase, catch OOM from deopt that fails rematerializing objects
LLT: jtreg
Bug url: https://bugs.openjdk.java.net/browse/JDK-8226536
---
.../vmTestbase/nsk/share/gc/gp/GarbageUtils.java | 36 ++++++++++++++++++++--
1 file changed, 34 insertions(+), 2 deletions(-)
diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/gp/GarbageUtils.java b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/gp/GarbageUtils.java
index 333bf070b..4d18a6871 100644
--- a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/gp/GarbageUtils.java
+++ b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/gp/GarbageUtils.java
@@ -26,6 +26,7 @@ package nsk.share.gc.gp;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
+import java.lang.invoke.*;
import java.util.*;
import nsk.share.gc.gp.array.*;
import nsk.share.gc.gp.string.*;
@@ -193,6 +194,36 @@ public final class GarbageUtils {
return eatMemory(stresser, gp, initialFactor, minMemoryChunk, factor, OOM_TYPE.ANY);
}
+ static int numberOfOOMEs = 0;
+
+ /**
+ * Minimal wrapper of the main implementation. Catches any OOM
+ * that might be thrown when rematerializing Objects when deoptimizing.
+ *
+ * It is Important that the impl is not inlined.
+ */
+
+ public static int eatMemory(ExecutionController stresser, GarbageProducer gp, long initialFactor, long minMemoryChunk, long factor, OOM_TYPE type) {
+ try {
+ // Using a methodhandle invoke of eatMemoryImpl to prevent inlining of it
+ MethodHandles.Lookup lookup = MethodHandles.lookup();
+ MethodType mt = MethodType.methodType(
+ int.class,
+ ExecutionController.class,
+ GarbageProducer.class,
+ long.class,
+ long.class,
+ long.class,
+ OOM_TYPE.class);
+ MethodHandle eat = lookup.findStatic(GarbageUtils.class, "eatMemoryImpl", mt);
+ return (int) eat.invoke(stresser, gp, initialFactor, minMemoryChunk, factor, type);
+ } catch (OutOfMemoryError e) {
+ return numberOfOOMEs++;
+ } catch (Throwable t) {
+ throw new RuntimeException(t);
+ }
+ }
+
/**
* Eat memory using given garbage producer.
*
@@ -210,8 +241,9 @@ public final class GarbageUtils {
* @param type of OutOfMemory Exception: Java heap space or Metadata space
* @return number of OOME occured
*/
- public static int eatMemory(ExecutionController stresser, GarbageProducer gp, long initialFactor, long minMemoryChunk, long factor, OOM_TYPE type) {
- int numberOfOOMEs = 0;
+
+ public static int eatMemoryImpl(ExecutionController stresser, GarbageProducer gp, long initialFactor, long minMemoryChunk, long factor, OOM_TYPE type) {
+ numberOfOOMEs = 0;
try {
StringWriter sw = new StringWriter(10000);
PrintWriter pw = new PrintWriter(sw);
--
2.12.3
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/anonymous_z/openjdk-11.git
git@gitee.com:anonymous_z/openjdk-11.git
anonymous_z
openjdk-11
openjdk-11
master

搜索帮助