论坛首页 编程语言技术论坛

PHP会倒掉吗?

浏览 41771 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2009-12-11  

icewubin 写道
你列了个JavaEE6?唉,原来之前的那些JavaEE或者J2EE都不算的啊。(到此发现原来你说的J2EE Container的前提条件是要实现JavaEE6,不讨论了,真累啊。)
 resin只支持ejb 3.0啊,列表中技术跟J2EE 5.0的差不多,多数只是版本号不同而已,但我要是找更老一点儿的版本,你又好找理由开脱了,哈哈。
0 请登录后投票
   发表时间:2009-12-11   最后修改:2009-12-11
yipsilon 写道
icewubin 写道
yipsilon 写道

 

 

哎,算了,还是给你找个吧 http://java.sun.com/javase/technologies/hotspot/index.jsp


拜托,我刚才还看过,哪里有说-server会自动加载所有关联的class,没有的吧,不要给个目录啊,给出具体的URL啊。

http://java.sun.com/products/hotspot/2.0/README.html

 

http://download.oracle.com/docs/cd/E13155_01/wlp/docs103/quickstart/memory.html

 

http://java.sun.com/j2se/1.5.0/docs/guide/vm/server-class.html

 

http://java.sun.com/products/hotspot/docs/general/hs2.html

 

先找这四个,你多多理解吧。


第一个相关的说了如何Using,第二个相关的说了Settings,第三个相关的说了各平台的Default VM,第四个说了Server VM的特性:Security、Robustness、Dynamic Compilation、Summary,连个class loader的影子都没有。

0 请登录后投票
   发表时间:2009-12-11  
icewubin 写道
你说的“不难想象”和“大都数情况下”都是没有依据的:

例如A引用了Z,B引用了Z,classloader加载了A,也只会加载Z,而不会加载B。

所以我反而认为大多数情况下,一个jar包里的类是不相关联的,当然我这里说的不相关联是指classloader不会从Z加载到B的,因为B引用Z是单向的。

这个你说对了,但是如果A引用B、B引用C了,那么在server版中ABC都会被预先加载,而client版中只有在调用A中使用B的方法时B才会被真正加载。

 

J2EE中,同技术中API之间的关联性很大,其实现中关联度也可想而知了。在j2ee container启动时,势必要加载大部分的类数据,启动缓慢是正常的,但是由于都是预先加载且优化好了,在执行时速度比client版快多了。

 

从你的观点来考虑,这也是有可能的,比如你做了个工具类库包,里面的类不依赖于任何其他技术的API,这样可以做到,但是大多数情况下可能么?呵呵。

0 请登录后投票
   发表时间:2009-12-11  
icewubin 写道

第一个相关的说了如何Using,第二个相关的说了Settings,第三个相关的说了各平台的Default VM,第四个说了Server VM的特性:Security、Robustness、Dynamic Compilation、Summary,连个class loader的影子都没有。

找文章很累的,不要轻易地浪费掉别人的工作成果。你本来就有断章取义的习惯,麻烦你一句一句仔细看完吧,不要用搜索功能搜那些词组啦。

0 请登录后投票
   发表时间:2009-12-11  
yipsilon 写道
icewubin 写道
你说的“不难想象”和“大都数情况下”都是没有依据的:

例如A引用了Z,B引用了Z,classloader加载了A,也只会加载Z,而不会加载B。

所以我反而认为大多数情况下,一个jar包里的类是不相关联的,当然我这里说的不相关联是指classloader不会从Z加载到B的,因为B引用Z是单向的。

这个你说对了,但是如果A引用B、B引用C了,那么在server版中ABC都会被预先加载,而client版中只有在调用A中使用B的方法时B才会被真正加载。

 

J2EE中,同技术中API之间的关联性很大,其实现中关联度也可想而知了。在j2ee container启动时,势必要加载大部分的类数据,启动缓慢是正常的,但是由于都是预先加载且优化好了,在执行时速度比client版快多了。

 

从你的观点来考虑,这也是有可能的,比如你做了个工具类库包,里面的类不依赖于任何其他技术的API,这样可以做到,但是大多数情况下可能么?呵呵。


大多数情况下就是这样的。

 

大多数情况下,都是单向引用的对象图,循环引用或双向引用的出现概率一般都是不高的,即使有,也只是在很小一部分类之间有循环引用、或双向引用。

0 请登录后投票
   发表时间:2009-12-11   最后修改:2009-12-11
yipsilon 写道
icewubin 写道

第一个相关的说了如何Using,第二个相关的说了Settings,第三个相关的说了各平台的Default VM,第四个说了Server VM的特性:Security、Robustness、Dynamic Compilation、Summary,连个class loader的影子都没有。

找文章很累的,不要轻易地浪费掉别人的工作成果。你本来就有断章取义的习惯,麻烦你一句一句仔细看完吧,不要用搜索功能搜那些词组啦。


拜托,如果我不仔细看,怎么知道Server VM的特性的?

 

我真是全篇看了下,最后为了保险起见再搜了把loader,真没找到啊。

 

我也知道很累,实在找不到才请教你啊。第四个我刚才就看过,所以还记得特别清楚,在你给我链接之前,我就已经看过了。

0 请登录后投票
   发表时间:2009-12-11  
icewubin 写道

大多数情况下就是这样的。

 

大多数情况下,都是单向引用的对象图,循环引用或双向引用的出现概率一般都是不高的,即使有,也只是在很小一部分类之间有循环引用、或双向引用。

我之前举的“A引用B、B引用C”是单向引用吧?这样的例子太多了啊,难道你写的工具类一点儿也不调用其他的API?就拿你之前跟别人讨论的lucene来说,你如果调用了他里面的一个类,它势必要装载包中其他相关的类进入到内存中。这对于你的工具类来说,都是单向引用。

0 请登录后投票
   发表时间:2009-12-11  

 

icewubin 写道
拜托,如果我不仔细看,怎么知道Server VM的特性的?

我真是全篇看了下,最后为了保险起见再搜了把loader,真没找到啊。

我也知道很累,实在找不到才请教你啊。第四个我刚才就看过,所以还记得特别清楚,在你给我链接之前,我就已经看过了。

 

 貌似,讨论到现在,没看到你对server版jvm的特性有多少了解。

 

不过最后一句话挺好玩儿,真的仔细看过了?难道没有看到这个?

 

Checking the protection domains on the call stack presents no problem for interpreted code. For interpreted code, the stack is a true source-level call stack that exactly represents the structure of the bytecodes being executed. When compiling and inlining code, however, the information in the stack can become scrambled. Once compiled code from one method has been inlined into another method's code in a second class, the first class no longer appears on the call stack, and its protection domain cannot be checked by the platform's security mechanism. This presents a real obstacle for JIT and static compilers, and forces them to be very conservative in their inlining so they don't compromise security.
The Java HotSpot Server VM surmounts this problem by using, in effect, two call stacks. One stack reflects the fully optimized state of the dynamically compiled code, and HotSpot uses this stack for running the program. HotSpot also constructs on demand a second, ``virtual'' stack that retains the source-level call structure of the original bytecode. By referring to the virtual stack as necessary, the Java HotSpot Server VM can achieve the security of an interpreter while retaining the full performance benefits of its optimizing compiler.

还有下面的Method Inlining的话,如果英文能看懂的话,你分析一下就知道了。

 

0 请登录后投票
   发表时间:2009-12-11   最后修改:2009-12-11
yipsilon 写道
icewubin 写道

大多数情况下就是这样的。

 

大多数情况下,都是单向引用的对象图,循环引用或双向引用的出现概率一般都是不高的,即使有,也只是在很小一部分类之间有循环引用、或双向引用。

我之前举的“A引用B、B引用C”是单向引用吧?这样的例子太多了啊,难道你写的工具类一点儿也不调用其他的API?就拿你之前跟别人讨论的lucene来说,你如果调用了他里面的一个类,它势必要装载包中其他相关的类进入到内存中。这对于你的工具类来说,都是单向引用。


你没有理解我的意思,问题就处在你说的“太多”,你可以从微观上来讲,单向引用很多,但是不能推论出宏观上来讲,一个jar包中调用一个类,会牵涉到大部分的类,这一定是错误的,循环引用和双向引用在OO设计上本来就是不多见的,你自己可以看看GOF 23中设计模式中有几个是涉及到循环引用和双向引用的。

 

我再举个例子吧,如果你还是不明白,这个话题也可以打住了:

假设一个最简单的多态程序,7个类A、B、C、D、E、F、G都继承或实现了接口X,当调用A的时候,只会牵涉到A和X两个类,占整个类的数量的1/4,这还仅仅是一个package中的情况。

 

再做个比喻,撇开小部分的双向引用和循环引用,大部分的类图,更像一颗树形结构,从最下面分支开始调用,单向引用,逐渐向上,充其量不过加载了一个很小分支的类的数量,和整棵对象数比起来,根本就是很小的一部分,而不是你说的“不难想象”和“大多数情况”。

 

当然我拿不出直接的数字来说明实际的某个项目的jar包中,引用一个类到底会单向引用引出多少类,我也不想在这上和你耗费时间,有兴趣你可以自己写个小工具,或者用某些对象分析工具,把某个包中的对象图分析一下,看看对象树长什么样子。

 

 

0 请登录后投票
   发表时间:2009-12-11  
yipsilon 写道

 

icewubin 写道
拜托,如果我不仔细看,怎么知道Server VM的特性的?

我真是全篇看了下,最后为了保险起见再搜了把loader,真没找到啊。

我也知道很累,实在找不到才请教你啊。第四个我刚才就看过,所以还记得特别清楚,在你给我链接之前,我就已经看过了。

 

 貌似,讨论到现在,没看到你对server版jvm的特性有多少了解。

 

不过最后一句话挺好玩儿,真的仔细看过了?难道没有看到这个?

 

Checking the protection domains on the call stack presents no problem for interpreted code. For interpreted code, the stack is a true source-level call stack that exactly represents the structure of the bytecodes being executed. When compiling and inlining code, however, the information in the stack can become scrambled. Once compiled code from one method has been inlined into another method's code in a second class, the first class no longer appears on the call stack, and its protection domain cannot be checked by the platform's security mechanism. This presents a real obstacle for JIT and static compilers, and forces them to be very conservative in their inlining so they don't compromise security.
The Java HotSpot Server VM surmounts this problem by using, in effect, two call stacks. One stack reflects the fully optimized state of the dynamically compiled code, and HotSpot uses this stack for running the program. HotSpot also constructs on demand a second, ``virtual'' stack that retains the source-level call structure of the original bytecode. By referring to the virtual stack as necessary, the Java HotSpot Server VM can achieve the security of an interpreter while retaining the full performance benefits of its optimizing compiler.

还有下面的Method Inlining的话,如果英文能看懂的话,你分析一下就知道了。

 


server版jvm的特性(4个主要特性),在你列举的第四页上说的很清楚了,你这个“貌似”又是从哪里的出来的结论?

 

这两段段说了半天的call stack,说明只和调用的时候才有关,而且更多的是在说安全方面的特性,没有出现你说的只根据单向引用就会把class加载入call stack的内容。

0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics