Java 如何以高效的方式快速创建多个对象?

Java 如何以高效的方式快速创建多个对象?,java,Java,我有一个类似的方法: public boolean myMethod(MyObject object) { return new MethodHook(object).getReturnValue(); } 我正在钩住这个方法,并将MyObject值传递到钩子中,以便使用数据确定“getReturnValue”将是什么。问题是我有多个线程(许多线程)同时调用这个方法,我很容易看到在每次线程调用时创建新MethodHook对象的性能问题 我如何做这个精确的操作(是的,我需要MethodH

我有一个类似的方法:

public boolean myMethod(MyObject object)
{
    return new MethodHook(object).getReturnValue();
}
我正在钩住这个方法,并将MyObject值传递到钩子中,以便使用数据确定“getReturnValue”将是什么。问题是我有多个线程(许多线程)同时调用这个方法,我很容易看到在每次线程调用时创建新MethodHook对象的性能问题

我如何做这个精确的操作(是的,我需要MethodHook对象)既能提高性能又能保证线程安全?(我尝试了单例,但没有成功,因为我意识到不能在单个对象中存储不同线程使用的多个“MyObject”——单例)

您可以尝试以下“MethodHookPool”:

公共类方法钩子池{
私有堆栈自由钩子;
带FreeHook的公共布尔值(MyObject对象){
方法钩钩;
同步(自由挂钩){
hook=freeHooks.isEmpty()?新方法hook():freeHooks.pop();
}
试一试{
hook.setMyObject(对象);
return hook.getReturnValue();
}
最后{
同步(自由挂钩){
推(钩);
}
}
}
}
方法游泳池;
公共布尔myMethod(MyObject对象){
返回池。带Freehook(对象);
}

但是我不确定这是否会提高性能。

您可以使用
ThreadLocal
在每个线程上有一个
MethodHook
对象。您可以尝试实现方法
getReturnValue()
静态并将
对象作为参数传递吗?为什么每次都要创建一个新对象?@Amongalen我不能将其设置为静态,因为每个线程都提供了一个不同的“对象”值,需要MethodHook来处理。我正在创建新的MethodHooks,以便处理所有线程的MyObject。@Oleg我尝试使用ThreadLocal。虽然程序的行为保持一致,但性能明显下降。非常感谢您的回答。我尝试了这个方法,但不幸的是性能没有得到改善。我认为如果不深入了解MethodHook,就很难找出瓶颈。MethodHook基本上只是一个用来操作“myMethod”返回值的存储对象,它存储“object”参数,以便处理程序可以使用该数据确定要输出的返回值。我基本上运行的是一个事件总线,需要以一种性能高效的方式调用事件(MethodHook)。
public class MethodHookPool {
   private Stack<MethodHook> freeHooks;

   public boolean withFreeHook(MyObject object) {
      MethodHook hook;
      synchronized(freeHooks) {
         hook = freeHooks.isEmpty() ? new MethodHook() : freeHooks.pop(); 
      }

      try {
         hook.setMyObject(object);
         return hook.getReturnValue();
      }
      finally {
         synchronized(freeHooks) {
            freeHooks.push(hook);
         }
      }
   }
}

MethodHookPool pool;

public boolean myMethod(MyObject object) {
   return pool.withFreeHook(object);
}