diff --git a/java-exception-stacktraces/README.MD b/java-exception-stacktraces/README.MD new file mode 100644 index 0000000..e69de29 diff --git a/java-exception-stacktraces/pom.xml b/java-exception-stacktraces/pom.xml new file mode 100644 index 0000000..478d660 --- /dev/null +++ b/java-exception-stacktraces/pom.xml @@ -0,0 +1,48 @@ + + 4.0.0 + + com.pivovarit + 1.0 + java-exception-stacktraces + + java-exception-stacktraces + + + + org.apache.maven.plugins + maven-compiler-plugin + + 21 + 21 + + + + maven-surefire-plugin + 2.19.1 + + + org.junit.platform + junit-platform-surefire-provider + 1.1.0 + + + + + + + + + org.junit.jupiter + junit-jupiter-engine + 5.10.2 + test + + + org.assertj + assertj-core + 3.22.0 + test + + + diff --git a/java-exception-stacktraces/src/main/java/com/pivovarit/exception/ExceptionCacheExample.java b/java-exception-stacktraces/src/main/java/com/pivovarit/exception/ExceptionCacheExample.java new file mode 100644 index 0000000..de46466 --- /dev/null +++ b/java-exception-stacktraces/src/main/java/com/pivovarit/exception/ExceptionCacheExample.java @@ -0,0 +1,23 @@ +package com.pivovarit.exception; + +import java.util.Collections; +import java.util.IdentityHashMap; + +class ExceptionCacheExample { + + public static void main(String[] args) { + var exceptions = Collections.newSetFromMap(new IdentityHashMap<>()); + + String foo = null; + for (int i = 0; i < Integer.MAX_VALUE; i++) { + try { + foo.toUpperCase(); + } catch (NullPointerException e) { + exceptions.add(e); + } + } + 99327 + + System.out.println(exceptions.size()); + } +} diff --git a/java-exception-stacktraces/src/main/java/com/pivovarit/exception/StacktraceDropExample.java b/java-exception-stacktraces/src/main/java/com/pivovarit/exception/StacktraceDropExample.java new file mode 100644 index 0000000..9de102d --- /dev/null +++ b/java-exception-stacktraces/src/main/java/com/pivovarit/exception/StacktraceDropExample.java @@ -0,0 +1,28 @@ +package com.pivovarit.exception; + +import java.util.Arrays; +import java.util.concurrent.atomic.AtomicReference; + +class StacktraceDropExample { + + public static void main(String[] args) { + var previous = new AtomicReference(); + + String foo = null; + for (int i = 0; i < Integer.MAX_VALUE; i++) { + try { + foo.toUpperCase(); + } catch (NullPointerException e) { + if (e.getStackTrace().length == 0) { + System.out.printf("Stacktrace dropped at iteration %d%n", i); + System.out.printf("Last stacktrace: %s%n", + Arrays.toString(previous.get().getStackTrace())); + System.out.printf("New stacktrace: %s%n", + Arrays.toString(e.getStackTrace())); + return; + } + previous.set(e); + } + } + } +} diff --git a/java-exception-stacktraces/src/main/java/com/pivovarit/exception/StaticStacklessExceptionExample.java b/java-exception-stacktraces/src/main/java/com/pivovarit/exception/StaticStacklessExceptionExample.java new file mode 100644 index 0000000..3c75ad1 --- /dev/null +++ b/java-exception-stacktraces/src/main/java/com/pivovarit/exception/StaticStacklessExceptionExample.java @@ -0,0 +1,14 @@ +package com.pivovarit.exception; + +class StaticStacklessExceptionExample { + + private static final NullPointerException NULL_POINTER_EXCEPTION = new NullPointerException(); + + static { + NULL_POINTER_EXCEPTION.setStackTrace(new StackTraceElement[0]); + } + + public static void main(String[] args) { + throw NULL_POINTER_EXCEPTION; + } +} diff --git a/pom.xml b/pom.xml index da6f3ab..6a1d53d 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ kotlin-collections hamming-error-correction kotlin-type-inference + java-exception-stacktraces java-sneaky-throws-lambda java-priorityqueue-stream-order java-stream-mapmulti