论坛首页 Java企业应用论坛

JVM 知识点题目解答之一

浏览 19306 次
精华帖 (15) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-12-30   最后修改:2011-12-30
railway 写道
第3点中的BCEL动态实现接口似乎挺有用的,但是有几点疑问:
1)BCEL性能如何
  这种动态构造实现性能如何,假设构造完后将实例缓存起来,我觉得应该不会有性能上的缺失。
2)实用性如何
  这种方式是实现接口内容,系统内动态组装成Student类,另一种方式是:用户实现接口,并将jar包放入系统classpath中,供系统调用,什么时候需求变化了,可以重新实现接口,感觉第二种方式更方便,BCEL不实用。
3)BCEL有实际的使用案例、场景吗?
4)“理论上来说只要你能手写出的代码基本上都能通过其 API 来动态生成字节码”
   “基本上”意味着还是有些个案是不支持的,楼主知道BCEL不支持哪些场景吗?


1。bcel 是动态直接生成字节码,个人认为不会比 javac 将 java 文件编译成字节码慢(因为 javac 有语义分析等等之类的工作)。而且你说的缓存起来也是一个,直接将 bytecode dump 成 class 文件获直接以byte方式存储在内存中即可。
2. 我这里例子并不是 BCEL 的应用场景,只是为了回答 BlueDavy 提的问题而已了。所以从这个例子中肯定是你说的第二种方式更方便,而不是 bcel 不实用。
3. 场景?随便说一个吧,知道 AOP 的话我想你对 AspectJ 并不陌生,aspectJ 的动态字节码对于 BCEL 来说就是很好的应用场景了。
4. 可能是用词有误吧,以我目前的了解来说 bcel 都能到做所有的 bytecode 语法的支持。

0 请登录后投票
   发表时间:2011-12-30  
好东西,先看看
0 请登录后投票
   发表时间:2011-12-31  
增加了见识,谢谢
0 请登录后投票
   发表时间:2011-12-31  
问下你getAllClassRelativePathInDirectory()方法是在那写的我看下apiclassloader,没有这个方法啊
0 请登录后投票
   发表时间:2011-12-31   最后修改:2011-12-31
wowbosess 写道
问下你getAllClassRelativePathInDirectory()方法是在那写的我看下apiclassloader,没有这个方法啊

这个是定义在 DirectoryClassLoader 中,上面贴出来的代码只是部分,完整的在附件中。
0 请登录后投票
   发表时间:2012-01-02  
还不错。。。。。对jvm理解还算到位啊。。。我也正在学习中了。、。、
0 请登录后投票
   发表时间:2012-01-02   最后修改:2012-01-02
m635674608 写道
还不错。。。。。对jvm理解还算到位啊。。。我也正在学习中了。、。、

额,惭愧,其实在学习上面的有些题目时有些时候无法继续深入下去。比如  invokeinterface,  invokevirtual 的具体的区别还比较模糊,这可能对 JVM Specification 不熟悉。再比如不知道 CloasLoader 如果判断一个类是否已经加载了,它的 findLoadedClass 是 C++ 实现的,看的不是很明白.... 而且上面题目其实还能分析的更深入的,而我....
0 请登录后投票
   发表时间:2012-01-05  
类加载器果然充满玄机啊
0 请登录后投票
论坛首页 Java企业应用版

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