This is an automated email from the ASF dual-hosted git repository.

dongjoon pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/spark.git


The following commit(s) were added to refs/heads/master by this push:
     new 3b1d843da2de [SPARK-46567][CORE] Remove ThreadLocal for 
ReadAheadInputStream
3b1d843da2de is described below

commit 3b1d843da2de524c781757b4823cc8b8e7d2f5f7
Author: beliefer <belie...@163.com>
AuthorDate: Wed Jan 3 05:50:44 2024 -0800

    [SPARK-46567][CORE] Remove ThreadLocal for ReadAheadInputStream
    
    ### What changes were proposed in this pull request?
    This PR propose to remove `ThreadLocal` for `ReadAheadInputStream`.
    
    ### Why are the changes needed?
    `ReadAheadInputStream` has a field `oneByte` declared as `TheadLocal`.
    In fact, `oneByte` only used in read.
    We can remove it by the way that the closure of local variables in instance 
methods can provide thread safety guarantees.
    
    On the other hand, the `TheadLocal` occupies a certain amount of space in 
the heap and there are allocation and GC costs.
    
    ### Does this PR introduce _any_ user-facing change?
    'No'.
    
    ### How was this patch tested?
    Exists test cases.
    
    ### Was this patch authored or co-authored using generative AI tooling?
    'No'.
    
    Closes #44563 from beliefer/SPARK-46567.
    
    Authored-by: beliefer <belie...@163.com>
    Signed-off-by: Dongjoon Hyun <dh...@apple.com>
---
 core/src/main/java/org/apache/spark/io/ReadAheadInputStream.java | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/core/src/main/java/org/apache/spark/io/ReadAheadInputStream.java 
b/core/src/main/java/org/apache/spark/io/ReadAheadInputStream.java
index 1b76aae8dd22..33dfa4422906 100644
--- a/core/src/main/java/org/apache/spark/io/ReadAheadInputStream.java
+++ b/core/src/main/java/org/apache/spark/io/ReadAheadInputStream.java
@@ -89,8 +89,6 @@ public class ReadAheadInputStream extends InputStream {
 
   private final Condition asyncReadComplete = stateChangeLock.newCondition();
 
-  private static final ThreadLocal<byte[]> oneByte = 
ThreadLocal.withInitial(() -> new byte[1]);
-
   /**
    * Creates a <code>ReadAheadInputStream</code> with the specified buffer 
size and read-ahead
    * threshold
@@ -247,7 +245,7 @@ public class ReadAheadInputStream extends InputStream {
       // short path - just get one byte.
       return activeBuffer.get() & 0xFF;
     } else {
-      byte[] oneByteArray = oneByte.get();
+      byte[] oneByteArray = new byte[1];
       return read(oneByteArray, 0, 1) == -1 ? -1 : oneByteArray[0] & 0xFF;
     }
   }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@spark.apache.org
For additional commands, e-mail: commits-h...@spark.apache.org

Reply via email to