-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
use ObjectPool instead of ThreadLocal during encode/decode (#822)
* 优化threadlocal * use simple objectpool replace Cache of Threadlocal * 缩小pool初始化大小 * 调整一下pool大小和包位置 * java encode * java encode2 * test 优化 * retest * retest2
- Loading branch information
Showing
13 changed files
with
333 additions
and
123 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
50 changes: 50 additions & 0 deletions
50
jetcache-core/src/main/java/com/alicp/jetcache/support/ObjectPool.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
package com.alicp.jetcache.support; | ||
|
||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
|
||
import java.util.concurrent.ArrayBlockingQueue; | ||
|
||
/** | ||
* @Description | ||
* @author: zhangtong | ||
* @create: 2023/10/6 3:27 PM | ||
*/ | ||
public class ObjectPool<T> { | ||
private final ArrayBlockingQueue<T> queue; | ||
private final int size; | ||
private final ObjectFactory<T> factory; | ||
private static final Logger logger = LoggerFactory.getLogger(ObjectPool.class); | ||
|
||
public ObjectPool(int size, ObjectFactory<T> factory) { | ||
this.size = size; | ||
this.factory = factory; | ||
queue = new ArrayBlockingQueue<>(size); | ||
for (int i = 0; i < size; i++) { | ||
queue.add(factory.create()); | ||
} | ||
logger.debug("Init the object pool with size {}", size); | ||
} | ||
|
||
public T borrowObject() { | ||
T t = queue.poll(); | ||
if(t == null) { | ||
logger.debug("The pool is not enough, create a new object"); | ||
return factory.create(); | ||
} | ||
return t; | ||
} | ||
|
||
public void returnObject(T obj) { | ||
if (obj == null) { | ||
return; | ||
} | ||
factory.reset(obj); | ||
queue.offer(obj); | ||
} | ||
|
||
public interface ObjectFactory<T> { | ||
T create(); | ||
void reset(T obj); | ||
} | ||
} |
Oops, something went wrong.