|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在性能方面,在windows平台下,.net网页编程可能是占强项,要是把.net网页编程放在sun开发的操作系统上去运行呢?根本就运行不了,.net网页编程对其它操作系统的支持也很弱,性能也可能比不上java。要完成本人的classreload机制,起首必要分明我们面对甚么样的成绩,起首,假造机中利用到的Class都是由各类ClassLoader装载出去的,而尽年夜部分程序的开辟者都不必要体贴这个历程,我们面对的第一个成绩就是必要将class装载这个历程拦阻上去,让一切的必要reload的class的装载都经由我们的机制,我们才无机会往实行我们的reload机制,因而我们必要拦阻体系的ClassLoader,在class装载的时分完成本人的逻辑
jdk供应JVMTI(JVMDI,JVMPI),能够从底层的假造机里猎取几近一切假造机里产生的事务,我们能够经由过程捕捉这些事务,加以处置,来完成我们的目标,可是操纵jvm外部的事务必需十分当心,不然十分简单形成假造机事情不一般,乃至溃散。同时,要利用JVMTI这些底层的api,我们必要利用c/c++来完成功效,关于我们要完成的目标来讲,太庞大了点,并且,关于我来讲,几近没正派写过c/c++代码,因而这条路不予思索。
从java5入手下手,jdk入手下手供应一种新的机制来匡助我们完成这类功效,javaagent能够方面的匡助我们完成这一功效,我们能够经由过程复杂的完成一个包括premain办法的类就能够作为javaagent在假造机里实行,详细能够参考文档。因而,我们能够经由过程完成一个agent,在体系起来的时分经由过程instrmentation修正体系的ClassLoader,到场我们本人逻辑的代码来拦阻class装载的历程。注重,这里只能修正已无方法的办法体,比方修正findClass办法,在这些办法体里能够到场挪用我们真正逻辑的类的办法挪用,来完成本人的class装载测律。
关于jdk1.4及之前的版本呢?没有更好的举措,只能完成将体系的ClassLoader等相干类举行静态的enhance,然后经由过程bootclasspath在rt.jar之前加载出去,用本人的类盖住体系本人的类,来完成我们的逻辑,除这个拦阻的体例纷歧样之外,其他的逻辑处置和jdk5没有区分,因而今后的会商不必要辨别jdk版本的区分。
class装载的历程由我们把持了,可是因为jvm本身的限定,关于已装载进假造机的类(正确的说是装载进某一个ClassLoader的类),是没法做太年夜的修正的,只能修正办法的代码段,关于类布局是没法变动的,因而,我们面对的又一个成绩就是怎样奇妙的绕过这个限定。
实在想一想也复杂,既然已装载出去的类没法做很年夜的修正,那我们就不让他装载出去!
嘿嘿,干活了,下次再说。罪恶吧?!
java也能做一些底层语言开发做的事情(难度很高,不是java顶尖高手是做不来的), |
|