При создании моих прокси-серверов лучшее время, которое я вижу, составляет около 25 мс (процессор 3,2 ГГц). Я пытаюсь обрезать десятки миллисекунд при выполнении кода, так что интересно, это типично или я что-то не так делаю?
Я пытаюсь прокси-объект Hibernate с помощью ByteBuddy, вот настройка:
Спящий объект:
@Entity
@Table(name = "device")
public class Device implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private long id;
@Version
@Column(name = "version", nullable = false)
private int version;
// ... about 20 more annotated fields representing columns
Создание прокси:
private static ByteBuddy byteBuddy = new ByteBuddy();
// ...
private Device getProxy(long id) {
Device target = new Device();
// ... populates the target with necessary information
Device proxyDevice = byteBuddy
.subclass(Device.class)
.method(any()).intercept(to(new CatchAllInteceptor()))
.method(isGetter()
.or(isHashCode())
.or(isToString())
.or(isEquals()))
.intercept(to(target))
.make()
.load(this.getClass().getClassLoader())
.getLoaded()
.newInstance();
Я очень новичок в ByteBuddy, поэтому вполне может быть что-то явно неправильное - например, возможность многократно использовать некоторые из приведенных выше определений для ускорения каждого вызова. Этот блок кода вызывается 1200 раз в секунду, поэтому я стараюсь обрезать как можно больше жира.
Я не могу указать время, указанное в в таблице сравнения документов (885,983
- 5'408,329 нс) соответствуют моему опыту - хотя я отмечаю, что они указаны в качестве базовых Object
таймингов подкласса.