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

chaokunyang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-fury.git


The following commit(s) were added to refs/heads/main by this push:
     new 03dba113 feat(java): remove soft/weak ref values from thread safe fury 
(#1639)
03dba113 is described below

commit 03dba1130cfcbf153a9c40795a412e113bf558f7
Author: Shawn Yang <shawn.ck.y...@gmail.com>
AuthorDate: Mon May 20 14:55:55 2024 +0800

    feat(java): remove soft/weak ref values from thread safe fury (#1639)
    
    ## What does this PR do?
    
    remove soft/weak ref values from thread safe fury
    
    ## Related issues
    
    Closes #1632
    
    
    ## Does this PR introduce any user-facing change?
    
    <!--
    If any user-facing interface changes, please [open an
    issue](https://github.com/apache/incubator-fury/issues/new/choose)
    describing the need to do so and update the document if necessary.
    -->
    
    - [ ] Does this PR introduce any public API change?
    - [ ] Does this PR introduce any binary protocol compatibility change?
    
    
    ## Benchmark
    
    <!--
    When the PR has an impact on performance (if you don't know whether the
    PR will have an impact on performance, you can submit the PR first, and
    if it will have impact on performance, the code reviewer will explain
    it), be sure to attach a benchmark data here.
    -->
---
 .../main/java/org/apache/fury/ThreadLocalFury.java |  2 +-
 .../apache/fury/pool/FuryPooledObjectFactory.java  |  6 +---
 .../java/org/apache/fury/util/LoaderBinding.java   |  6 ++--
 .../java/org/apache/fury/ThreadSafeFuryTest.java   | 32 ++++++++++++++--------
 4 files changed, 25 insertions(+), 21 deletions(-)

diff --git a/java/fury-core/src/main/java/org/apache/fury/ThreadLocalFury.java 
b/java/fury-core/src/main/java/org/apache/fury/ThreadLocalFury.java
index 67928cae..dd980278 100644
--- a/java/fury-core/src/main/java/org/apache/fury/ThreadLocalFury.java
+++ b/java/fury-core/src/main/java/org/apache/fury/ThreadLocalFury.java
@@ -247,7 +247,7 @@ public class ThreadLocalFury extends AbstractThreadSafeFury 
{
 
   @Override
   public void setClassLoader(ClassLoader classLoader) {
-    setClassLoader(classLoader, StagingType.SOFT_STAGING);
+    setClassLoader(classLoader, StagingType.STRONG_STAGING);
   }
 
   @Override
diff --git 
a/java/fury-core/src/main/java/org/apache/fury/pool/FuryPooledObjectFactory.java
 
b/java/fury-core/src/main/java/org/apache/fury/pool/FuryPooledObjectFactory.java
index 1bc03403..872fd459 100644
--- 
a/java/fury-core/src/main/java/org/apache/fury/pool/FuryPooledObjectFactory.java
+++ 
b/java/fury-core/src/main/java/org/apache/fury/pool/FuryPooledObjectFactory.java
@@ -78,11 +78,7 @@ public class FuryPooledObjectFactory {
     this.furyFactory = furyFactory;
     this.factoryCallback = factoryCallback;
     classLoaderFuryPooledCache =
-        CacheBuilder.newBuilder()
-            .weakKeys()
-            .softValues()
-            .expireAfterAccess(expireTime, timeUnit)
-            .build();
+        CacheBuilder.newBuilder().expireAfterAccess(expireTime, 
timeUnit).build();
   }
 
   public Fury getFury() {
diff --git 
a/java/fury-core/src/main/java/org/apache/fury/util/LoaderBinding.java 
b/java/fury-core/src/main/java/org/apache/fury/util/LoaderBinding.java
index 79a1b611..3b747d22 100644
--- a/java/fury-core/src/main/java/org/apache/fury/util/LoaderBinding.java
+++ b/java/fury-core/src/main/java/org/apache/fury/util/LoaderBinding.java
@@ -92,7 +92,7 @@ public final class LoaderBinding {
    * {@link #setClassLoader(ClassLoader, StagingType)} and {@link 
#clearClassLoader} should be used.
    */
   public void setClassLoader(ClassLoader classLoader) {
-    setClassLoader(classLoader, StagingType.SOFT_STAGING);
+    setClassLoader(classLoader, StagingType.STRONG_STAGING);
   }
 
   /**
@@ -127,8 +127,8 @@ public final class LoaderBinding {
               fury = furyFactory.apply(classLoader);
               bindingCallback.accept(fury);
               furySoftMap.put(classLoader, new SoftReference<>(fury));
-              this.fury = fury;
             }
+            this.fury = fury;
             break;
           }
         case STRONG_STAGING:
@@ -138,8 +138,8 @@ public final class LoaderBinding {
               fury = furyFactory.apply(classLoader);
               bindingCallback.accept(fury);
               furyMap.put(classLoader, fury);
-              this.fury = fury;
             }
+            this.fury = fury;
             break;
           }
         default:
diff --git 
a/java/fury-core/src/test/java/org/apache/fury/ThreadSafeFuryTest.java 
b/java/fury-core/src/test/java/org/apache/fury/ThreadSafeFuryTest.java
index 29458572..e604bb74 100644
--- a/java/fury-core/src/test/java/org/apache/fury/ThreadSafeFuryTest.java
+++ b/java/fury-core/src/test/java/org/apache/fury/ThreadSafeFuryTest.java
@@ -279,18 +279,24 @@ public class ThreadSafeFuryTest extends FuryTestBase {
   }
 
   private WeakHashMap<Class<?>, Boolean> generateClassForGC() {
-    ThreadSafeFury fury = 
Fury.builder().requireClassRegistration(false).buildThreadSafeFury();
+    ThreadSafeFury fury1 = 
Fury.builder().requireClassRegistration(false).buildThreadSafeFury();
+    ThreadSafeFury fury2 =
+        
Fury.builder().requireClassRegistration(false).buildThreadSafeFuryPool(1, 2);
     String className = "DuplicateStruct";
     WeakHashMap<Class<?>, Boolean> map = new WeakHashMap<>();
     {
       Class<?> structClass1 = Struct.createStructClass(className, 1, false);
       Object struct1 = Struct.createPOJO(structClass1);
-      byte[] bytes = fury.serialize(struct1);
-      Assert.assertEquals(fury.deserialize(bytes), struct1);
-      map.put(structClass1, true);
-      System.out.printf(
-          "structClass1 %s %s\n",
-          structClass1.hashCode(), structClass1.getClassLoader().hashCode());
+      for (ThreadSafeFury fury : new ThreadSafeFury[] {fury1, fury2}) {
+        fury.setClassLoader(structClass1.getClassLoader());
+        byte[] bytes = fury.serialize(struct1);
+        Assert.assertEquals(fury.deserialize(bytes), struct1);
+        map.put(structClass1, true);
+        System.out.printf(
+            "structClass1 %s %s\n",
+            structClass1.hashCode(), structClass1.getClassLoader().hashCode());
+        fury.clearClassLoader(structClass1.getClassLoader());
+      }
     }
     {
       Class<?> structClass2 = Struct.createStructClass(className, 2, false);
@@ -298,11 +304,13 @@ public class ThreadSafeFuryTest extends FuryTestBase {
       System.out.printf(
           "structClass2 %s %s\n ",
           structClass2.hashCode(), structClass2.getClassLoader().hashCode());
-      fury.setClassLoader(structClass2.getClassLoader());
-      Object struct2 = Struct.createPOJO(structClass2);
-      byte[] bytes2 = fury.serialize(struct2);
-      Assert.assertEquals(fury.deserialize(bytes2), struct2);
-      fury.clearClassLoader(structClass2.getClassLoader());
+      for (ThreadSafeFury fury : new ThreadSafeFury[] {fury1, fury2}) {
+        fury.setClassLoader(structClass2.getClassLoader());
+        Object struct2 = Struct.createPOJO(structClass2);
+        byte[] bytes2 = fury.serialize(struct2);
+        Assert.assertEquals(fury.deserialize(bytes2), struct2);
+        fury.clearClassLoader(structClass2.getClassLoader());
+      }
     }
     return map;
   }


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

Reply via email to