|
31 | 31 | import java.nio.file.Paths;
|
32 | 32 | import java.util.ArrayList;
|
33 | 33 | import java.util.HashMap;
|
| 34 | +import java.util.Iterator; |
34 | 35 | import java.util.List;
|
35 | 36 | import java.util.Map;
|
36 | 37 | import java.util.Set;
|
@@ -183,6 +184,9 @@ protected List<String> preprocessArguments(List<String> arguments, Map<String, S
|
183 | 184 | ArrayList<String> unrecognized = new ArrayList<>();
|
184 | 185 | boolean isRelaxStaticObjectSafetyChecksSet = false;
|
185 | 186 | int javaAgentIndex = 0;
|
| 187 | + boolean heapDumpOnOutOfMemoryError = false; |
| 188 | + String heapDumpPath = null; |
| 189 | + boolean ignoreUnrecognized = false; |
186 | 190 |
|
187 | 191 | List<String> expandedArguments = expandAtFiles(arguments);
|
188 | 192 |
|
@@ -231,6 +235,9 @@ protected List<String> preprocessArguments(List<String> arguments, Map<String, S
|
231 | 235 | espressoOptions.put("java.Module", mainClassName);
|
232 | 236 | launchMode = LaunchMode.LM_MODULE;
|
233 | 237 | break;
|
| 238 | + case "--limit-modules": |
| 239 | + espressoOptions.put("java.Properties.jdk.module.limitmods", args.getValue(arg, "limit-modules")); |
| 240 | + break; |
234 | 241 | case "-jar":
|
235 | 242 | jarFileName = args.getValue(arg, "jar file");
|
236 | 243 | break;
|
@@ -285,6 +292,18 @@ protected List<String> preprocessArguments(List<String> arguments, Map<String, S
|
285 | 292 | case "-XX:+PauseOnExit":
|
286 | 293 | pauseOnExit = true;
|
287 | 294 | break;
|
| 295 | + case "-XX:+HeapDumpOnOutOfMemoryError": |
| 296 | + heapDumpOnOutOfMemoryError = true; |
| 297 | + break; |
| 298 | + case "-XX:-HeapDumpOnOutOfMemoryError": |
| 299 | + heapDumpOnOutOfMemoryError = false; |
| 300 | + break; |
| 301 | + case "-XX:+IgnoreUnrecognizedVMOptions": |
| 302 | + ignoreUnrecognized = true; |
| 303 | + break; |
| 304 | + case "-XX:-IgnoreUnrecognizedVMOptions": |
| 305 | + ignoreUnrecognized = false; |
| 306 | + break; |
288 | 307 |
|
289 | 308 | case "--engine.RelaxStaticObjectSafetyChecks":
|
290 | 309 | isRelaxStaticObjectSafetyChecksSet = true;
|
@@ -331,6 +350,8 @@ protected List<String> preprocessArguments(List<String> arguments, Map<String, S
|
331 | 350 | } else if (arg.startsWith("--sun-misc-unsafe-memory-access")) {
|
332 | 351 | String value = args.getValue(arg, "sun.misc.Unsafe memory access");
|
333 | 352 | espressoOptions.put("java.SunMiscUnsafeMemoryAccess", value);
|
| 353 | + } else if (arg.startsWith("-XX:HeapDumpPath=")) { |
| 354 | + heapDumpPath = arg.substring("-XX:HeapDumpPath=".length()); |
334 | 355 | } else if (arg.startsWith("-XX:")) {
|
335 | 356 | handleXXArg(arg, unrecognized);
|
336 | 357 | } else if (arg.startsWith("-D")) {
|
@@ -408,6 +429,23 @@ protected List<String> preprocessArguments(List<String> arguments, Map<String, S
|
408 | 429 | espressoOptions.put("engine.RelaxStaticObjectSafetyChecks", "true");
|
409 | 430 | }
|
410 | 431 |
|
| 432 | + if (heapDumpOnOutOfMemoryError) { |
| 433 | + unrecognized.add("--vm.XX:+HeapDumpOnOutOfMemoryError"); |
| 434 | + } |
| 435 | + if (heapDumpPath != null) { |
| 436 | + unrecognized.add("--vm.XX:HeapDumpPath=" + heapDumpPath); |
| 437 | + } |
| 438 | + |
| 439 | + if (ignoreUnrecognized) { |
| 440 | + // We remove the unrecognized -XX options from the list to ignore them: |
| 441 | + Iterator<String> unrecognizedIt = unrecognized.iterator(); |
| 442 | + while (unrecognizedIt.hasNext()) { |
| 443 | + String option = unrecognizedIt.next(); |
| 444 | + if (option.startsWith("-XX")) { |
| 445 | + unrecognizedIt.remove(); |
| 446 | + } |
| 447 | + } |
| 448 | + } |
411 | 449 | return unrecognized;
|
412 | 450 | }
|
413 | 451 |
|
|
0 commit comments