From 070445c346be9e2caea9239de3bf8ed583325650 Mon Sep 17 00:00:00 2001 From: Nevin Heintze Date: Tue, 27 Aug 2019 08:45:22 +1000 Subject: [PATCH] Remove use of getExitingExecutorService since we want ThreadPoolExecutor to be GC'd when StatementExecutor is finished (getExitingExecutorService will keep it around until application exits). Keeping all ThreadPoolExecutors around is effectively a memory leak, and can lead to substantial memory increase if an app uses many StatementExecutors. --- .../com/google/cloud/spanner/jdbc/StatementExecutor.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/google-cloud-clients/google-cloud-contrib/google-cloud-spanner-jdbc/src/main/java/com/google/cloud/spanner/jdbc/StatementExecutor.java b/google-cloud-clients/google-cloud-contrib/google-cloud-spanner-jdbc/src/main/java/com/google/cloud/spanner/jdbc/StatementExecutor.java index 797599816af4..994c4c44d994 100644 --- a/google-cloud-clients/google-cloud-contrib/google-cloud-spanner-jdbc/src/main/java/com/google/cloud/spanner/jdbc/StatementExecutor.java +++ b/google-cloud-clients/google-cloud-contrib/google-cloud-spanner-jdbc/src/main/java/com/google/cloud/spanner/jdbc/StatementExecutor.java @@ -130,9 +130,8 @@ public boolean hasDuration() { /** Creates an {@link ExecutorService} for a {@link StatementExecutor}. */ private static ExecutorService createExecutorService() { - return MoreExecutors.getExitingExecutorService( - new ThreadPoolExecutor( - 1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(), THREAD_FACTORY)); + return new ThreadPoolExecutor( + 1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(), THREAD_FACTORY); } private ExecutorService executor = createExecutorService();