2016-01-13 86 views
0

根据我对使用动态重新编译的Java优化的理解,JVM将不断重新编译基于实时分析的字节代码段,从而使其比即使是编写良好的C程序更快。我的一位同事发表评论说,像Spring,Hibernate或AspectJ这样的字节码处理技术将会掩盖部分被动态地重新编译。真的吗?依赖注入是否会对JVM的优化能力产生负面影响?

我使用Google Guice进行依赖注入,我想知道是否潜在的优化丢失会使它比使用普通的传统Java更慢。

+0

这里有一些混淆:1)什么时候Java优化和动态重新编译一样? 2)动态重新编译和依赖注入如何配合动态重新编译? 3)你能否提供一个资料给你的“已发表评论”来证实你的陈述? –

+0

为什么你认为“像Spring,Hibernate或AspectJ这样的字节码操作技术”与依赖注入有任何关系? - 他们不是,他们是独立的东西 –

+0

谢谢,这就是我的想法。换言之,字节码操作对动态重新编译没有影响。 –

回答

0

在大多数情况下,Spring会使用java代理(java.lang.reflect.Proxy)来获得像@Cache这样的特性,只要有一个接口可用,以及用于依赖注入的常规反射(它会调用setXxx当属性xxx是@Autowired注释)。

即使需要字节码操作,该字节码也会存储在某个应用程序的ClassLoader中,因此可供JVM进行优化。我看不出这与一些常规代码有什么不同。