|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
诸如RMI,EJB等一些技术并不是你说的那么复杂,而是它们把一些复杂的工具封装成不复杂的工具了,理解这些工具是需要些时间。我问你,.net网页编程里有这些工具吗?要简单多少?。Java7方才公布没两天,但来自Lucene和Solr社区的某些人当即报料了一些Java7中的严峻bug。乃至ApacheLucene项目办理委员会成员UweSchindler公布了临时不要利用Java7的告诫信息。那末究竟Java7是有甚么成绩,为何我们等了5年的Java7如今却不克不及利用呢?让我们来看看实践的情形。
这个成绩跟Java7有关,而是跟JVM有关
起首这个成绩是跟HotSpotJVM有关,而不是Java7言语自己的成绩。此次公布的GA版本包括三个bug:7070134,7044738和7068051,这三个bug间接招致JVM溃散大概举行毛病的盘算。
Hotspot是由于PorterStemmer的sigsegv而溃散的
第一个成绩(7070134)是关于毛病的编译器对轮回的优化,该特征在HotspotJVM中是默许启用的,你能够经由过程-XX:-UseLoopPredicate参数来封闭这个特征。假如你想懂得关于这个成绩的概况,请看Stemmer.java,编译并同意这个类你将会重现JVM溃散并报严峻毛病,信息以下:
#AfatalerrorhasbeendetectedbytheJavaRuntimeEnvironment:
#
#EXCEPTION_ACCESS_VIOLATION(0xc0000005)atpc=0x00000000026536da,pid=5432,t
id=6568
#
#JREversion:7.0-b135
#JavaVM:JavaHotSpot(TM)64-BitServerVM(21.0-b05mixedmodewindows-amd64
compressedoops)
#Problematicframe:
#JStemmer.step4()V
这个毛病间接在代码实行过程当中产生,在JDK1.6是体验不到的。而比来Lucene做了一些更天真的基于PulsingCodec算法的索引机制,而这个机制相称年夜的水平上会招致上述的毛病。
轮回睁开优化会招致不准确的了局
第二个bug(7044738)是“毛病的盘算”,这个毛病极其稀有的产生在OSR(On-StackReplacement)编译嵌套轮回上,把持流加入且对应的内存没有被思索到,这间接招致反复的克隆了局,想懂得编译细节请看olderoverview(PDF)
一个最复杂的办理举措就是利用-XX:LoopUnrollLimit=1参数来制止这个成绩。
Clonelooppredicateduringloopunswitch
第三个bug(7068051)跟一些老的featurerequest相干,因为一些有效的JVM统计招致利用轮回优化后的JVM溃散。
结论
依据这些bug的情形,只要在你大批的利用这些优化办法,那末你才大概已受Java7中存在的成绩所影响。一样平常情形下是不受影响的。现实上Java6的用户利用了某些优化选项也会存在成绩,但由于这些优化选项在Java7中是默许启用的才招致这个成绩影响那末年夜,比方(-XX:+OptimizeStringConcator-XX:+AggressiveOpts),因为这些成绩在Java7公布的前5天赋被发明,因而Oracle来不及办理这些bug,今朝Oracle仿佛也正在筹办下一个补钉版本,但对一些初级用户来讲,这些都不是成绩,由于源码是开放的,你能够做你想做的。
进而能拉拢大多数程序员用windows产品。并且从net网页编程网页编程AJAX可以跨平台这一点上,间接证明了我们的推断,至少证明了微软做过这方面的研究。所以如果哪一天突然听说了.net网页编程可以跨平台了,那么请不要吃惊,如果这一天真的到来,java就到了真正和.net网页编程决战的时刻。因为不到万不得以的时候微软是不会推出跨平台的.net网页编程的,如果跨平台的.net网页编程还不足以对抗java的话,那么微软还剩的手段就是开源了,呵呵。 |
|