|
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