- 论坛徽章:
- 31
|
本帖最后由 ddd010 于 2013-12-27 09:29 编辑
今天我们就来讨论一些相关的问题:
1、Java instanceof 关键字是如何实现的?
传统的JDK没有研究过,我来说说android中instanceof的实现:
他实际上是调用的是class类的isAssignableFrom接口来比较的,然后陷入c层,关键代码如下:- /*
- * Perform the instanceof calculation.
- */
- static inline int isInstanceof(const ClassObject* instance,
- const ClassObject* clazz)
- {
- if (dvmIsInterfaceClass(clazz)) {
- return dvmImplements(instance, clazz);
- } else if (dvmIsArrayClass(instance)) {
- return isArrayInstanceOf(instance, clazz);
- } else {
- return dvmIsSubClass(instance, clazz);
- }
- }
- /*
- * Do the instanceof calculation, pulling the result from the cache if
- * possible.
- */
- int dvmInstanceofNonTrivial(const ClassObject* instance,
- const ClassObject* clazz)
- {
- #define ATOMIC_CACHE_CALC isInstanceof(instance, clazz)
- return ATOMIC_CACHE_LOOKUP(gDvm.instanceofCache,
- INSTANCEOF_CACHE_SIZE, instance, clazz);
- #undef ATOMIC_CACHE_CALC
- }
复制代码 就是由对象的单根模式,挨着去寻找子类,一直到寻找完。
2、如何让JVM快速释放对象的内存?
这个不太好说,如果是手动gc的话,System.gc()是个手段。但是平凡的手动gc并不是好的设计,应该更多的考虑 java.lang.ref.SoftReference和 java.lang.ref.WeakReference他们能让你的程序更健康。
当然通过调节JVM的参数来调节GC频率和算法,这算是一个非常有用的手段。
3、为什么很多语言选择在JVM上实现?JVM在跨平台上有哪些优势?
java的稳定性、执行效率、跨平台性是很多语言选择JVM的关键,当然java的类库是另外一个重要点,他的开源项目是非常非常多的,一旦选择了JVM,语言天生就具备了很多优点。出名的groovy,jruby,scala,fantom,jpython。现在的.net和jvm是最大语言实现平台。
|
|