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