新框架More即将诞生!!!!,,,More 的Ioc性能居然是 Spring2.5的7倍

哈库纳玛塔塔 2009-11-24 08:21:15
More 的Ioc性能居然是 Spring2.5的7倍。

http://blog.csdn.net/ta8210/archive/2009/11/24/4866256.aspx
有关ioc方面的测试。
...全文
222 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
哈库纳玛塔塔 2009-11-26
  • 打赏
  • 举报
回复
more眼看可以发布第一个测试版。 可怜我项目主页还没做出来。。。。。。啊 啊 啊 要风了。
哈库纳玛塔塔 2009-11-25
  • 打赏
  • 举报
回复
这也就决定了more以极少的代码量来换取更多的功能,极少的代码量一定情况下可以保证 运行质量和bug率。

今天的测试中几乎完成了除了aop之外的常规功能注入测试。 整个系统bug只出现了2~3个。 再此之前没有做过这么大规模的集成测试。
哈库纳玛塔塔 2009-11-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 panhaichun 的回复:]
先恭喜一下。。


不过IOC性能好坏对程序性能没啥影响,启动的时候要快,运行时作用不大,生产环境应该没人用延迟初始化吧
[/Quote]

你正好说反了IOC性能很重要。一个bean从容器中获取出来,加入它不是单态模式的。 那么注定每次获取都是ioc过后的。 而这种get操作一旦 数量剧增那么ioc性能瓶颈的问题就显现出来。 当然如果一切都是单态的 那就没这个问题了。

延迟初始化,这个特性spring和more都采用的默认延迟策略,很少人去配它。


你说的很对more的日志不是核心组建,只是一个工具组建。整个more框架中为了追求运行效率没有输出一行日志。 原本在开发中也有大量日志输出,但是在性能测试时候发现70%的性能瓶颈都被堆到输出日志的字符串拼接上,因此全部删除日志输出 增加不少性能。
想必apache的开源项目如果去掉日志输出会有不少性能提升。

去掉日志输出很棘手意味着不少重要信息都无法直接输出,这个问题我在考虑用一套比较完整的异常系统代替。当然第一版中不会有这些方面的改动,日志仍然不输出。

去掉日志输出的另一个原因是整个more框架拥有300个不到的类平均代码行数在300左右,算上大量的注释。
代码量少性能有所提升,在加上大量的注释 我就没在输出日志。
原本计划是发布之后会接着出一系列《核心技术解密》文章来具体解释运行原理。所以也就没把组建的日志输出放在主要地位中。


此外这位哥们说的对“如果一样东西追求的是什么都能干的话,它肯定一样也干不好”

more看似有很多很多功能,但是我要告诉你的是more从名字上看就可以不难分析更多的意思,它是大量工具集成而形成的框架。

比方说submitMVC在j2ee上应用。就需要使用more的如下工具:submit2.0、beans、classcode、copybean、task。 如果使用submitJS插件(一个可以使用js直接调用action并且获取返回值的小插件工具)那就还需要依赖serialization工具。

但是submitMVC本身是也可以独立运行,不使用这些依赖。 我手头有一个more框架开发的新闻发布系统内核使用的框架技术就是MSH(more、Spring、Hibernate)这个项目中仅仅依赖了submit2.0、copybean、submitJS这几个工具。


所以我说more的功能都是独立的。可以单独使用,包括beans的ioc和propparser(属性解析器info的一个实现),都可以独立使用。

不像其他常见框架比如hibernate所有jar包都是为了扩展hibernate或者实现它。 more的每一个工具都可以独立使用。 包括以后要加入的workFlow也是作为工具插入。 workFlow需要bean那就由bean工具提供,或者使用Spring来提供。



老张-AI 2009-11-25
  • 打赏
  • 举报
回复

支持下
panhaichun 2009-11-25
  • 打赏
  • 举报
回复
先恭喜一下。。


不过IOC性能好坏对程序性能没啥影响,启动的时候要快,运行时作用不大,生产环境应该没人用延迟初始化吧
哈库纳玛塔塔 2009-11-25
  • 打赏
  • 举报
回复
当然了目前底层XML部分还有4个基本功能没有完成许多特性都没有做测试,可能看不出什么具体东西。
即使正式发布也还有大量的demo程序需要编写这些都需要时间不能马上见到,届时我会开启有关more的项目主页。

另外

jdk动态代理的速度我不敢恭维,实在太慢我有实际测试数据来支持。最不方便的是jdk的动态代理对象不能转换为原始类对象,也就是说必须依赖接口编程从而增加复杂程度。这也是为什么目前世界上字节码工具cglib很流行的原因之一。

对于我的more,aop速度我敢说很快的原因是如下的。cglib并不是靠自身完成字节码相关操作而是借助一个更快的字节码框架asm。有关asm框架的介绍和例子在IBM网站上有介绍。我的more使用的就是asm而不是cglib。因此more代理类就有了可以与cglib做比较的资格。

在这里我也没有具体测试数据来表明aop性能与spring的比较,这个需要进一步进行测试。

但是more的字节码工具classcode的aop性能是CGLIB的92.6%~93.7%。这个测试结果是500W~1000W次调用的测试结果。对于一般项目而言已经不是性能问题了。出现8%的差距原因我由于篇幅原因我不做说明但是这个性能足够满足各种项目,在实际过程中真正性能表现是集中在业务上而不是aop上。

spring是利用cglib来解决代理类不必必须依赖接口的要求,这个在more中也得到的支持。在以后会有更多有关more的测试例子发布直到正式发布more大家可以去下载。

此外啊在我测试过程中曾经发现这样一个问题cglib2.2创建代理类对象发现无法创建超过2000个的不同代理类,jdk崩溃原因内存溢出。经jprofiler5软件测试表明应该是cglib出现问题,原因内存一直飙升测试代码也很简单,每个创建的新对象是在创建时候就被丢弃。如如下代码一样 new CGLIBPropxyObject();
不知道在座的有没有什么想法。

cglib的新代理类对象创建速度很慢。我classcode比它要快7倍不14倍。但是这个测试数据在实际项目中没有什么太大的作用毕竟我是没见过哪个项目中要频繁生成新的代理类Class对象,但是这也是性能测试的一部分。

aop就是对方法进行切面编程,这个很容易做到至于强大要多亏spring的配置简单易懂。

more的配置文件设计多数参考了spring的设计这样做的目的也是为了在发布之后减少使用者学习的路程。
有关more的aop方面测试和功能展示估计会在1周内在我的blog发表。


在此要多谢各位的关注!我会经快努力完成第一版的测试发布。


项目简要介绍:

但是我一个人的力量还是很小,最初2年前这个项目还仅仅是10个类不到的简单ioc容器。
随后发展为以webMVC为主的工具当时struts还没有2.0由于前台技术原因没有考虑struts。
接着1年前在开发oa时候衍生为webMVC+我自己开发的工作流引擎(WorkFlow)+简单数据访问层。
直到今年下半年才正式更名为more并且重写编写webMVC为MVC摆脱了WEB环境从而成为独立的MVC。但当时由于ioc非常简陋已经在上几个版本中被抛弃所以使用Spring加Hibernate做的ioc和数据服务支持。

直到今年年底more的Spring依赖被正式砍掉,more可以独立使用其所有功能。

more有一个最重要的特性就是从不依赖任何jar包,这不意味着其他项目的java源代码成为more的一部分。
xml解析more使用的是jdk1.6新支持的Stax规范,字节码工具是自己的classcode而不是cglib,日志工具more也有自己的独立日志而不是log4j.....

使用more不必考虑某个框架使用了新jar而另外的组合框架使用的是老jar而产生的依赖冲突问题。这种问题在eclipse中经常见到。有关组建依赖的问题我在http://blog.csdn.net/ta8210/archive/2008/08/29/2850068.aspx介绍过。


更多信息请大家关注把,继续做测试去了。还有项目主页没有开发很多东西都需要做啊!!!
shine333 2009-11-25
  • 打赏
  • 举报
回复
鼓掌喝彩,而不是一个简单的“顶”
不过,你说到的日志,不选择现成框架——比如log4j(那家伙的主页都已经n年没更新了),或者commons logging, 或者slf4j——而是选择自己写log框架,如果是研究尚可,但是如果想推广你的MORE,特别是将其用于生产环境,你就必然需要花大量精力用于日志框架的性能,及其扩展性上。而很显然日志绝非more的主要功能。由此引申开来,个人感觉,现在很多国内开发的框架其实满不错的,但是一开始就太追求大而全了,忘记是谁说的:“如果一样东西追求的是什么都能干的话,它肯定一样也干不好”。IMHO,至少在前期应当专注一些。
另外不太理解“分页标签”的准确含义
zcl198715 2009-11-25
  • 打赏
  • 举报
回复
关键要稳定,稳定优于速度!
哈库纳玛塔塔 2009-11-25
  • 打赏
  • 举报
回复
jdk7 中泛型自动推断特性,和 List list=[1,2,3,4,5]; 功能非常吸引人。
在jdk6中 首次支持了动态语言。 这个是jdk5所没有的。

所以我还是认为jdk6是一种趋势。more的发行很大可能在jdk6上发行。
哈库纳玛塔塔 2009-11-25
  • 打赏
  • 举报
回复
more 其实没有使用什么特殊的jdk6专有类库。 stax早在jdk5之前就已经提出,只是jdk6将它内置了。
在jdk5中这个stax是以第三方扩展类库方式存在。

多谢5楼的 指点。Annotation的支持已经被纳入开发计划但是在第一版本中不会支持Annotation。

今天我就不放出什么有关more的新特性,由于开发时将map类型注入功能遗忘今天在测试过程中 完善map方式。

今天对beans组建的测试相关的功能也与spring提供的大体相似。

对于向像classcode,submit(MVC),task,跨平台序列化,和分页标签。 在以后在做介绍。
  • 打赏
  • 举报
回复
如果 MORE 中使用了 JDK 6 中专有类库的话,那将会失去一大半以上的用户!

从 Java EE 5 和 Java EE 6 规范来看,现在已经流行使用 Annotation,建议楼主多往这里靠拢一些。
Landor2004 2009-11-24
  • 打赏
  • 举报
回复
楼主精神可嘉,不过现在没看出什么具体的东西

配置文件和spring很类似,aop方面也没看出来有什么特别,spring的aop很功能很强大,配置已经简单到了极点,他支持jdk动态代理和cglib代理

速度方面也太片面了

不过还是支持楼主!

百岁 2009-11-24
  • 打赏
  • 举报
回复
为啥会是spring的7倍呢?难道不是用动态代理的?使用cglib?

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧