关闭

Java6 的类反射瓶颈

标签: javaobjectclassjdksun
3340人阅读 评论(3) 收藏 举报
分类:

用native code就不说了, 当调用次数达到一定的阀值的时候,sun jdk 会使用

MethodAccessorGenerator.generate 生成一个虚拟的class, GeneratedMethodAccessor1,2...之类

 

 

你可以在启动参数里 使用  XX:+TraceClassLoading, 可以看到 load 的虚拟的class

 

 

 从理论上来说,这样的调用等于是生成新的class,直接调用具体的类的方法,性能应该和直接调用的方法接近,或者类似,除了方法调用的入栈和出栈,当然当用hotspot编译运行的时候的,内联可以解决这样的问题。

结果却让人吃惊

 

在用类反射调用的时候100万次需要3秒,而直接调用却只要10毫秒。

 

有人说,因为是method的调用,涉及到method的quickCheckMemberAccess,ensureMemberAccess检查,这个你可以通过设置method.setAccessor(true) 绕过成员检查。

 

主要的原因是: 因为接口的通用性,java 的invoke 方法 是传object, 和object[] 数组的。

也就是如果是简单类型的话,在接口处必须封装成object, 例如 long ,在javac compile的时候 用了Long.valueOf() 转型

那也就是大量了生成了Long 的object, 同时 传入的参数是Object[]数值,那还需要额外封装object数组。

 

在调用的时候,产生了额外的不必要的内存浪费,当调用次数达到一定量的时候,最终还导致了GC。

 

接口的通用性在对性能要求不高的系统里通用性非常高,但在对性能要求高的系统里简直就是灾难。

 

 

 

 

 

1
0
查看评论

Java6 的类反射瓶颈解决方案

在前面的一篇文章中提到了类反射的瓶颈原因,为了避免大量简单类型的转型,大量的数组产生,提出解决方案首先sun的method.invoke 是不可用了,因为invoke 的使用本来产生了大量的数组为了参数。invoke(Object obj, Object... args)解决方案一般我们类反射通常这...
  • raintungli
  • raintungli
  • 2011-03-30 11:21
  • 1294

性能测试之瓶颈分析

(7)性能测试瓶颈分析   性能瓶颈分析构成图:
  • zhouyou1986
  • zhouyou1986
  • 2014-07-06 16:59
  • 4848

计算机系统中所存在的瓶颈

。。大家都知道CPU是计算机的中央处理器,但大家不知道的是CPU却不能完全决定计算机的速度! 。。这是个绝对的事实,不仅如此,其实计算机的档次、价格也不能完全由CPU来决定。 。。那么一台计算机的速度到底由什么来决定呢?影响计算机速度的因素是很多的,几乎组成计算机的每个环节都在影响着计算机的速...
  • pizi0475
  • pizi0475
  • 2012-01-05 21:54
  • 1649

关于笔记本电脑执行速度的瓶颈

今天,不谈软件。这一篇,提供初学者一些产品选购上的建议。最近有一篇Scott Guthrie的Hard Drive Speed and Visual Studio Performance谈到了开发工具和硬盘之间的关系。这部分我也感触深刻,所以稍微提一下自己的看法。很久以前我在买NB的时候就深刻的体验...
  • dotnetWalker
  • dotnetWalker
  • 2007-12-06 08:57
  • 2838

Mysql数据库的瓶颈处理一点建议

Mysql数据库的瓶颈处理一点建议         我们在使用Mysql数据库是常见的两个瓶颈是CPU和I/O的瓶颈,CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候。磁盘I/O瓶颈的出现呢发生在装入数据远大于内存...
  • lcgweb
  • lcgweb
  • 2014-05-19 19:13
  • 996

大数据时代:Hadoop解决数据处理三瓶颈

原文地址:http://www.lupaworld.com/article-213002-1.html 越来越多的大企业的数据集以及创建需要的一切技术,包括存储、网络、分析、归档和检索等,这些被认为是海量数据。这些大量信息直接推动了存储、服务器以及安全的发展。同时也是给IT部门带来了一系列必须...
  • lxpbs8851
  • lxpbs8851
  • 2012-09-19 15:40
  • 2711

思考:系统的瓶颈到底在哪儿,redis的作用?

openfire到底为什么上不去量了?内存25G了,我们的逻辑也是简单到不行了的。
  • jinzhencs
  • jinzhencs
  • 2016-01-24 22:58
  • 1045

一份简要游戏服务器缺陷、瓶颈分析报告

这还是很早之前参与创业的时候,专门
  • AlbertLi
  • AlbertLi
  • 2014-11-16 15:34
  • 1620

什么是系统瓶颈

瓶颈主要是指整个软硬件构成的软件系统某一方面或者几个方面能力不能满足用户的特定业务要求 严格的从技术角度讲,所有的系统都会有瓶颈,因为大多数系统的资源配置不是协调的,例如CPU使用率刚好达到100%时,内存也正好耗尽的系统不是很多见 因此我们讨论系统瓶颈要从应用的角度讨论: 关键是看系统能否...
  • lluozh2015
  • lluozh2015
  • 2015-10-12 20:13
  • 714

Java6 十大新特性

  Web Services. 优先支持编写 XML web service 客户端程序。你可以用过简单的annotaion将你的API发布成.NET交互的web services. Mustang 添加了新的解析和 XML 在 Java object-mapping APIs中, ...
  • hsuyuan
  • hsuyuan
  • 2007-03-17 16:20
  • 5595
    个人资料
    • 访问:500985次
    • 积分:5449
    • 等级:
    • 排名:第5872名
    • 原创:100篇
    • 转载:3篇
    • 译文:0篇
    • 评论:73条
    最新评论