锁定老帖子 主题:JVM 知识点题目解答之一
精华帖 (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 语法的支持。 |
|
返回顶楼 | |
发表时间:2011-12-30
好东西,先看看
|
|
返回顶楼 | |
发表时间:2011-12-31
增加了见识,谢谢
|
|
返回顶楼 | |
发表时间:2011-12-31
问下你getAllClassRelativePathInDirectory()方法是在那写的我看下apiclassloader,没有这个方法啊
|
|
返回顶楼 | |
发表时间:2011-12-31
最后修改:2011-12-31
wowbosess 写道 问下你getAllClassRelativePathInDirectory()方法是在那写的我看下apiclassloader,没有这个方法啊
这个是定义在 DirectoryClassLoader 中,上面贴出来的代码只是部分,完整的在附件中。 |
|
返回顶楼 | |
发表时间:2012-01-02
还不错。。。。。对jvm理解还算到位啊。。。我也正在学习中了。、。、
|
|
返回顶楼 | |
发表时间:2012-01-02
最后修改:2012-01-02
m635674608 写道 还不错。。。。。对jvm理解还算到位啊。。。我也正在学习中了。、。、
额,惭愧,其实在学习上面的有些题目时有些时候无法继续深入下去。比如 invokeinterface, invokevirtual 的具体的区别还比较模糊,这可能对 JVM Specification 不熟悉。再比如不知道 CloasLoader 如果判断一个类是否已经加载了,它的 findLoadedClass 是 C++ 实现的,看的不是很明白.... 而且上面题目其实还能分析的更深入的,而我.... |
|
返回顶楼 | |
发表时间:2012-01-05
类加载器果然充满玄机啊
|
|
返回顶楼 | |