BeeOP — это небольшой пул объектов Java.
Требуется Java 7 или выше.
<dependency>
<groupId>com.github.chris2018998</groupId>
<artifactId>beeop</artifactId>
<version>1.2.8</version>
</dependency>
Один миллион операций заимствования/возврата (1000 потоков x 1000 раз).
Тип пула | commons-pool2-2.9.0 | BeeOP-0.3_Fair | BeeOP-0.3_Compete |
---|---|---|---|
Среднее время (мс) | 2,677456 | 0,000347 | 0,000187 |
ПК: I5-4210M (2,6 Гц, двухъядерный, 4 потока), 12 ГБ памяти. Java: JAVA8_64. Пул: init-size10, max-size:10.
Файл журнала теста: https://github.com/Chris2018998/BeeOP/blob/main/doc/temp/ObjectPool.log
Исходный код теста: https://github.com/Chris2018998/BeeOP/blob/main/doc/temp/BeeOP_Test.rar
public interface Book {
public String getName();
public long getNumber();
}
public class JavaBook implements Book{
private String name;
private long number;
public JavaBook() {
this("Java核心技术·卷2", System.currentTimeMillis());
}
public JavaBook(String name, long number) {
this.name = name;
this.number = number;
}
public String getName() {
return name;
}
public long getNumber() {
return number;
}
public String toString() {
return name;
}
}
public class JavaBookFactory implements RawObjectFactory {
public Object create() throws ObjectException {
return new JavaBook("Java核心技术·卷1", System.currentTimeMillis());
}
public void setDefault(Object obj) throws ObjectException {
}
public void reset(Object obj) throws ObjectException {
}
public void destroy(Object obj) {
}
public boolean isValid(Object obj, int timeout) {
return true;
}
}
public class TestBookPool{
public static void main(String[]){
BeeObjectSourceConfig config = new BeeObjectSourceConfig();
config.setObjectFactoryClass(JavaBookFactory.class);
BeeObjectSource obs = new BeeObjectSource(config);
BeeObjectHandle handle = null;
try {
handle = obs.getObject();
Object v=handle.call("getName");
System.out.println("Book name:"+v);
} catch (BeeObjectException e) {
} finally {
if (handle != null)
handle.close();
}
}
}
1:Таймаут заимствования.
2:Режимы честного и конкурентного заимствования.
3:Безопасное закрытие прокси-объекта при возврате.
4:Очистка пула объектов при проблемах с сетью, воссоздание объектов при восстановлении сети.
5:Таймауты простоя и удержания (долгое неактивное удержание заёмщиком).
6:Закрытие пула объектов при возникновении исключения, создание нового объекта и передача его ожидающему.
7:Сброс пула объектов после возврата.
8:Возможность сброса пула.
9:Поддержка Jmx.
Поле имени | Описание | Примечание |
---|---|---|
poolName | имя пула | имя генерируется автоматически, если не задано |
fairMode | логический индикатор для заимствования | Параметр |
---------------------------- | ----------------------------------------------------------------------------- | ---------------------- |
fair mode | true: честный режим, false: соревновательный режим; по умолчанию — false | false |
initialSize | размер создания объектов в пуле при инициализации пула | 0 |
maxActive | максимальный размер экземпляров объектов в пуле | 10 |
borrowSemaphoreSize | размер параллельных потоков для заимствования | min(maxActive/2, cpu size) |
maxWait | максимальное время ожидания для заимствования одного экземпляра объекта | 8000 ms |
idleTimeout | максимальное время простоя экземпляра объекта в пуле | 18000 ms |
holdTimeout | максимально допустимое время удержания экземпляра объекта заёмщиком | 300 000 ms |
forceCloseUsingOnClear | индикатор закрытия объекта при закрытии или сбросе пула | false (ожидание возврата объекта), по умолчанию — false |
delayTimeForNextClear | время паузы перед очисткой, когда проверяемый объект используется | если forceCloseObject == true |
idleCheckTimeInterval | интервал времени потока сканирования для проверки простаивающего объекта | 300 000 ms |
objectFactoryClassName | имя класса фабрики объектов | null |
enableJmx | индикатор JMX для пула | false |
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )