当前位置: 首页 > news >正文

wordpress建视频网站可以吗免费建立个人app网站

wordpress建视频网站可以吗,免费建立个人app网站,青岛设计公司排名,技术支持 如皋网站建设java 反射 速度在编译时不知道Java类的最快方法是什么#xff1f; Java框架通常会这样做。 很多。 它可以直接影响其性能。 因此#xff0c;让我们对不同的方法进行基准测试#xff0c;例如反射#xff0c;方法句柄和代码生成。 用例 假设我们有一个简单的Person类#x… java 反射 速度 在编译时不知道Java类的最快方法是什么 Java框架通常会这样做。 很多。 它可以直接影响其性能。 因此让我们对不同的方法进行基准测试例如反射方法句柄和代码生成。 用例 假设我们有一个简单的Person类其中包含名称和地址 public class Person {...public String getName() {...}public Address getAddress() {...}} 并且我们想使用诸如以下的框架 XStream JAXB或Jackson来将实例序列化为XML或JSON。 JPA /Hibernate将人员存储在数据库中。 OptaPlanner分配地址如果他们是游客或无家可归的人。 这些框架都不了解Person类。 因此他们不能简单地调用person.getName() // Framework codepublic Object executeGetter(Object object) {// Compilation error: class Person is unknown to the frameworkreturn ((Person) object).getName();} 相反代码使用反射方法句柄或代码生成。 但是这样的代码被称为很多 如果在数据库中插入1000个不同的人员则JPA / Hibernate可能会调用2000次这样的代码 1000次调用Person.getName() 同样如果您用XML或JSON编写1000个不同的人则XStreamJAXB或Jackson可能会进行2000次调用。 显然当这种代码每秒被调用x次时 其性能很重要 。 基准测试 使用JMH我在带有32GB RAM的64位8核Intel i7-4790台式机上的Linux上使用OpenJDK 1.8.0_111运行了一组微型基准测试。 JMH基准测试有3个分支1秒的5个预热迭代和1秒的20个测量迭代。 该基准测试的源代码位于此GitHub存储库中 。 TL; DR结果 Java反射很慢。 * Java MethodHandles也很慢。 * 用javax.tools生成的代码很快。 * *在用例中我以使用的工作量作为基准。 你的旅费可能会改变。 因此魔鬼在细节中。 让我们浏览一下实现以确认我应用了典型的魔术技巧例如setAccessible(true) 。 实作 直接访问基准 我使用了一个普通的person.getName()调用作为基准 public final class MyAccessor {public Object executeGetter(Object object) {return ((Person) object).getName();}} 每次操作大约需要2.7纳秒 Benchmark Mode Cnt Score Error UnitsDirectAccess avgt 60 2.667 ± 0.028 ns/op 直接访问自然是运行时最快的方法而没有引导成本。 但是它在编译时导入Person 因此每个框架都无法使用它。 反射 框架在运行时读取吸气剂而无需事先知道的明显方法是通过Java Reflection public final class MyAccessor {private final Method getterMethod;public MyAccessor() {getterMethod Person.class.getMethod(getName);// Skip Java language access checking during executeGetter()getterMethod.setAccessible(true);}public Object executeGetter(Object bean) {return getterMethod.invoke(bean);}} 添加setAccessible(true)调用可以使这些反射调用更快但是即使这样每个调用也要花费5.5纳秒。 Benchmark Mode Cnt Score Error UnitsDirectAccess avgt 60 2.667 ± 0.028 ns/op Reflection avgt 60 5.511 ± 0.081 ns/op 反射比直接访问慢106大约慢一倍。 预热还需要更长的时间。 这对我来说不是什么大惊喜因为当我使用OptaPlanner在980个城市中描述使用抽样一个人为简单的旅行推销员问题时反射成本像拇指酸痛一样突出 方法句柄 Java 7中引入了MethodHandle以支持invokedynamic指令。 根据javadoc它是对基础方法的类型化直接可执行的引用。 听起来快吧 public final class MyAccessor {private final MethodHandle getterMethodHandle;public MyAccessor() {MethodHandle temp lookup.findVirtual(Person.class, getName, MethodType.methodType(String.class));temp temp.asType(temp.type().changeParameterType(0 , Object.class));getterMethodHandle temp.asType(temp.type().changeReturnType(Object.class));}public Object executeGetter(Object bean) {return getterMethodHandle.invokeExact(bean);}} 不幸的是 MethodHandle甚至比 OpenJDK 8中的反射还要慢 。每次操作花费6.1纳秒因此比直接访问慢132。 Benchmark Mode Cnt Score Error UnitsDirectAccess avgt 60 2.667 ± 0.028 ns/op Reflection avgt 60 5.511 ± 0.081 ns/op MethodHandle avgt 60 6.188 ± 0.059 ns/op StaticMethodHandle avgt 60 5.481 ± 0.069 ns/op 话虽如此如果MethodHandle在静态字段中则每次操作仅需5.5纳秒这仍然与反射一样慢 。 此外对于大多数框架而言这是无法使用的。 例如JPA实现可能需要反映n类 Person Company Order等的m getter getName() getAddress() getBirthDate() ...因此JPA实现如何有n * m静态字段在编译时不知道n和m 我确实希望MethodHandle在将来的Java版本中能够像直接访问一样快从而取代对...的需求。 使用javax.tools.JavaCompiler生成的代码 在Java中可以在运行时编译和运行生成的Java代码。 因此使用javax.tools.JavaCompiler API我们可以在运行时生成直接访问代码 public abstract class MyAccessor {public static MyAccessor generate() {final String String fullClassName x.y.generated.MyAccessorPerson$getName;final String source package x.y.generated;\n public final class MyAccessorPerson$getName extends MyAccessor {\n public Object executeGetter(Object bean) {\n return ((Person) object).getName();\n }\n };JavaFileObject fileObject new ...(fullClassName, source);JavaCompiler compiler ToolProvider.getSystemJavaCompiler();ClassLoader classLoader ...;JavaFileManager javaFileManager new ...(..., classLoader)CompilationTask task compiler.getTask(..., javaFileManager, ..., singletonList(fileObject));boolean success task.call();...Class compiledClass classLoader.loadClass(fullClassName);return compiledClass.newInstance();}// Implemented by the generated subclasspublic abstract Object executeGetter(Object object);} 有关如何使用javax.tools.JavaCompiler更多信息请参见本文或本文的 第2页 。 除了javax.tools之外类似的方法也可以使用ASM或CGLIB但是这些方法会推断出额外的依赖性并且可能会产生不同的性能结果。 无论如何 生成的代码与直接访问一样快 Benchmark Mode Cnt Score Error UnitsDirectAccess avgt 60 2.667 ± 0.028 ns/op GeneratedCode avgt 60 2.745 ± 0.025 ns/op 因此当我再次在OptaPlanner中运行该完全相同的Traveling Salesman问题时这一次使用代码生成来访问计划变量 因此总分计算速度提高了18 。 并且分析使用采样看起来也更好 请注意在正常使用情况下由于大量CPU需要实际复杂的分数计算因此性能提升几乎是无法检测到的... 运行时代码生成的唯一缺点是它会导致可观的引导成本特别是如果生成的代码未进行批量编译时。 因此我仍然希望有一天MethodHandles能够像直接访问一样快只是为了避免启动成本。 结论 在此基准测试中反射和MethodHandles的速度是OpenJDK 8中直接访问的两倍但是生成的代码的速度是直接访问的速度。 Benchmark Mode Cnt Score Error UnitsDirectAccess avgt 60 2.667 ± 0.028 ns/op Reflection avgt 60 5.511 ± 0.081 ns/op MethodHandle avgt 60 6.188 ± 0.059 ns/op StaticMethodHandle avgt 60 5.481 ± 0.069 ns/op GeneratedCode avgt 60 2.745 ± 0.025 ns/op翻译自: https://www.javacodegeeks.com/2018/01/java-reflection-much-faster.htmljava 反射 速度
http://wiki.neutronadmin.com/news/239281/

相关文章:

  • 做网站的没有进项票怎么办用自己电脑做服务器 网站吗
  • 手机版的网站开发上海房产网签合同查询
  • 郑州哪里有做网站的企业建站官网
  • 做网站运营需要培训吗高端婚纱摄影网站
  • html5网站建设企业最新办公室装修风格效果图
  • 什么网站做博客好免费学编程国内网站
  • 在线推广企业网站的方法是万网企业邮箱登陆界面如何嵌入到自己的网站
  • 代刷网站推广全网最便宜wordpress移动端音频播放
  • 网站开发公司福建哪家做网站的公司比较好
  • 怎么做网站的浏览量沈阳网站设计广告公司
  • 营销企业网站建设步骤北京建站公司兴田德润很赞
  • 做的网站怎样评估价值广州电子商务网站建设费用
  • 专业苏州网站建设公司哪家好宝安新闻最新消息今天
  • 网站核验点查询html5网站基础
  • 建网站科技公司域名格式大全
  • 网站建设经费方案wordpress 文章延时加载
  • 网站规划书的内容有哪些免费发布租房信息网站
  • jsp网站 值班自己制作菜单的app
  • a站app有什么网站可以做设计赚钱吗
  • 科技 响应式网站模板网站询盘量
  • 做电脑网站步骤宝安区建设工程交易服务中心
  • 公司做网站所上传的产品图片用jsp做校园网站
  • 朝阳区北京网站建设wordpress极简商城主题
  • seo与网站优化 pdf上海专业网站建站品
  • 如何成立一个网站wordpress打造cms
  • 腾讯网站建设费用赣州新闻头条最新消息
  • 网站需求分析是在建站的什么阶段做的_为什么要做?网站建设关键技术
  • 网站的动效怎么做的浪味仙儿 wordpress
  • iis7.0建设网站不用ftp可以做网站吗
  • 网站制作常见问题做网站什么语言好