java:是转换还是反射更有效?

java:是转换还是反射更有效?,java,performance,reflection,switch-statement,Java,Performance,Reflection,Switch Statement,从jsp中,我得到了一个可以用作开关的字符串 switch(value) case 0: method0(); break; case 1: method1(); break; ... 或者为了思考: c.getMethod("method"+value, parameter); ... 哪种方法更有效?如果您想要更快的性能,反射会带来很大的开销。根据报告: 由于反射涉及动态解析的类型,因此无法执行某些Java虚拟机优化。因此,反射式操作的性能比非反射式操作要慢,应该避免在性能敏感应用程序中

从jsp中,我得到了一个可以用作开关的字符串

switch(value)
case 0: method0(); break;
case 1: method1(); break;
...
或者为了思考:

c.getMethod("method"+value, parameter);
...

哪种方法更有效?

如果您想要更快的性能,反射会带来很大的开销。根据报告:

由于反射涉及动态解析的类型,因此无法执行某些Java虚拟机优化。因此,反射式操作的性能比非反射式操作要慢,应该避免在性能敏感应用程序中频繁调用的代码段中使用反射式操作

Java VM具有特殊的字节码,可用于开关盒,如
lookupswitch
tableswitch


如果能够实现,最好的方法是多态性,即面向对象的方法。

使用Switch

反射很强大,但不应不加区别地使用。如果可以在不使用反射的情况下执行操作,则最好避免使用反射


反射总是会有一些开销

因为反射涉及动态解析的类型, 无法执行某些Java虚拟机优化。 因此,反射操作的性能比其 非反射副本,并且应在代码部分避免使用 在性能敏感的应用程序中经常调用


最好使用开关选项,因为反射比内存重。如果不可用的情况下,您可以在switch语句中处理,而在反射中,您有输入*的示例,因此它可以查找不可用的方法*。

反射肯定不会更快,因为它必须通过附加层


但是,在这样的任务中使用反射将是错误的,因为它使代码更难维护,并且不能达到反射设计的真正目的。

基本上首先了解何时使用反射?它主要用于反射,以动态创建类型实例、将类型绑定到现有对象或从现有对象获取类型。然后可以调用类型的方法或访问其字段和属性

但是在这里,您没有比使用switch而不是reflection更好的情况


并且避免不必要的过程负担。

如果您有固定数量的方法,并且您只是懒得键入1000个不同的
大小写,那么您肯定会使用
开关,因为该语句在JVM字节码级别上得到了高度优化

如果方法的数量不确定,则可以使用反射(可能没有其他选择)。您仍然可以通过缓存从
getMethod()
获得的
方法
实例来加快进程


请注意,通过反射传递参数总是会创建额外的
es和
对象
s数组。

反射的使用成本总是很高。只有在没有其他方法时才使用它。你试过微基准标记吗?i、 e.编写代码并查看!我最初的猜测是开关-注意,它假设更多,通常如果你假设更多,你可以走得更快!switch语句通常意味着某种多态性,所以使用OO而不是switch如果我(从我的jsp)得到的唯一东西是一个字符串告诉我必须调用哪个方法,那么有没有办法使用多态性呢?然后使用switch case,但我还没有得到你的设计!这非常简单,用户选择一个组合框,然后返回给我一个字符串id值,从中我必须为每个id调用不同的方法