Posts Tagged ‘java’

我不想在重启中浪费生命

December 4th, 2008

php比java的开发效率高几乎成了大家的共识了。为什么php开发起来会比java快很多呢?频繁的服务重启是众多原因之一。php开发者们编辑完了 php代码,只要刷新一下浏览器,就可以看到运行的效果了,从来没有编译和重启apache的问题。尽管现在的IDE能够自动编译部署和打包应用程序,但 是还是没有php便捷。这一年来一直在使用jboss 4.2 做开发,jboss号称有很强的热部署能力,但是更新一个应用后还是要等上一两分钟的时间让jboss重新部署应用,而且这种热部署时间一长就会发生内存 耗尽的错误。如果是用tomcat+spring这种轻量级解决方案,重启一次十几秒钟,还可以接受,但是jboss+seam要一两分钟,而且吃掉百兆 内存,实在让人受不了。有的时候感觉一天之中没有在专心写多少代码,都是在等待jboss重启中度过。我现在对这种工作方式越来越不满,我想要更好性能的 开发机器,使用更轻量的框架,更轻量的服务器。现在使用的seam相对spring+hibernate+struts来说,还是重量的多,而jboss 也没有tomcat那样轻巧。如果能够不用等待就可以看到程序运行的效果,java在开发效率上会离php更近一步。

jboss的热部署,是指不重启jboss的情况下部署应用,比如ear, war等。虽然不重启jboss,但是还是要卸载和装载应用,还是慢。

如何热部署jboss应用呢?如果应用是用打包方式部署的,更新一下包的修改时间就可以了。如果是以目录的方式部署的,对于ear,更新一下META-INF/application.xml的修改时间,对于war,则更新WEB-INF/web.xml的修改时间。更新修改时间,最方便的就是用touch命令了,如果你用的是windows,没有touch命令,你可以装一个cygwin,或者用ant的touch任务来代替。

  • Share/Bookmark

Console的写操作在windows和linux下的性能差异

April 9th, 2008

在做项目的时候,为了调试方便,把很多日志信息通过console打印出来。每次进行一个操作,输出的日志非常多,导致程序看起来非常慢。难道向控制台打印信息就这么慢吗?我突然想到以前用linux时好像没有这么慢,于是就做了一个简单的测试。测试程序非常简单,就是用System.out.println()向控制台写一个字符串,写十万次。在我的windows xp和ubuntu 8.04下分别测试了10次,结果发现,在linux下平均用时9.8秒,而windows下要用18.6秒,差不多是linux的两倍。两边用的都是sun的1.6版的虚拟机,没想到会有这么大的差异。

是不是java在linux上就比在windows上要快呢?我想找一些更全面,更权威的测试,但是没有找到。sun的官方论坛上,有人说在两个系统上的表现是差不多的,不知道他是从哪里得到的结论。通过这个简单的测试,至少可以看出,在x86平台上,同是sun 1.6的虚拟机,写控制台的时候,在windows xp上,比在ubunut 8.04上要慢一倍

  • Share/Bookmark

震惊!微软收购SpringSource!

April 1st, 2008

突然看到消息,SpringSource宣布被微软收购,非常震惊! 这是真的吗?
今天是个西方特殊的日子,目前还不能肯定是不是真的。但是,微软完全有动机这样做。微软提出.net已有数年,但是仍旧不无法动摇java在企业开发界的地位。我对.net没有深入的研究,但是.net界远没有像java界那样百家争鸣,思想活跃是不争的事实。当用java开发有无数的方案可选时,.net世界里基本上只有MS自己的解决方案一家。sping是Java世界里最丰硕的果实,虽然spring也有.net的版本,但是一直没有被足够支持和发扬。微软收购Spring,一下子就把java世界的果实摘了去。而且,微软借此收购,还可以把java界的牛人Rod Johnson收入麾下,这颗脑袋比spring的源代码还要重要。
我很不希望这是真的。我担心johnson被拉入微软后,以后spring在java界的发展变慢,甚至于停滞。但愿这不是真的!

  • Share/Bookmark

更改jboss默认使用的rmi端口,避免冲突

February 27th, 2008

最近使用jboss的时候常常出现1098端口被占,不能正常起动的错误:

10:28:57,000 WARN  [ServiceController] Problem starting service jboss:service=Naming
java.rmi.server.ExportException: Port already in use: 1098; nested exception is:
java.net.BindException: Address already in use: JVM_Bind
at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:310)
at sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:218)

也不知道是哪个程序占用了这个端口。可以通过修改jboss的配置文件,让jboss使用另外一个端口,来修正这个问题。方法如下:

1,打开jboss的jboos-service.xml文件,在我机上位于D:\prog\jboss-4.2.2.GA\server\default\conf 目录。

2,搜索1098,找到 <attribute name=”RmiPort”>1098</attribute>,修改这个端口号为一个一般不会被用到的端口号,比如12345。

再重启jboss应该就OK了。

  • Share/Bookmark