Objective-C 的 Runtime 与 Java 的 Runtime
2015-07-01 11:14
603 查看
运行:Objective-C runtime 运行 native code 。Java VM 运行 byte code。
垃圾回收:Objective-C runtime 有过短暂的使用 conservative GC。但是 conservative GC 对于 native code,特别是经过优化的 native code 并不有效。所以目前 Objective-C
没有 GC(只有 ref-counting 的内存管理策略)。Java VM 有 generational GC。
动态机制:Objective-C runtime 对 class method 的调用是通过全局名称查询。而 Java VM 是通过类似 C++ 的虚表机制。所以 Objective-C 无须 explicit interface 就能实现多态,能动态的给
class 添加方法,Java 则不行。这是很讽刺的,一个基于 byte code 的语言居然不如一个 native code 的语言动态。(Java 有 reflection 机制,但是这套机制是独立于 JVM 本身的静态调用机制的。Reflection 给予了你操作虚表的能力,但是基本的 JVM 仍然是通过虚表这个静态机制完成的。)
对象:Objective-C 考虑到和 C 的交互,对象不能 relocatable。Java 的对象可以 relocate,因为没有 raw pointer 。
obj-c是直接编译成二进制运行,动态特性是一种模拟,和c++有点像,但比c++的有些特征要好用,如arc(相对于java).
java是运行中间码,由jvm不断翻译成二进制运行,所以跨平台好,现在java为了提高性能,部门代码也可以在开始运行时直接翻译成二进制,如android的java虚拟机。
垃圾回收:Objective-C runtime 有过短暂的使用 conservative GC。但是 conservative GC 对于 native code,特别是经过优化的 native code 并不有效。所以目前 Objective-C
没有 GC(只有 ref-counting 的内存管理策略)。Java VM 有 generational GC。
动态机制:Objective-C runtime 对 class method 的调用是通过全局名称查询。而 Java VM 是通过类似 C++ 的虚表机制。所以 Objective-C 无须 explicit interface 就能实现多态,能动态的给
class 添加方法,Java 则不行。这是很讽刺的,一个基于 byte code 的语言居然不如一个 native code 的语言动态。(Java 有 reflection 机制,但是这套机制是独立于 JVM 本身的静态调用机制的。Reflection 给予了你操作虚表的能力,但是基本的 JVM 仍然是通过虚表这个静态机制完成的。)
对象:Objective-C 考虑到和 C 的交互,对象不能 relocatable。Java 的对象可以 relocate,因为没有 raw pointer 。
obj-c是直接编译成二进制运行,动态特性是一种模拟,和c++有点像,但比c++的有些特征要好用,如arc(相对于java).
java是运行中间码,由jvm不断翻译成二进制运行,所以跨平台好,现在java为了提高性能,部门代码也可以在开始运行时直接翻译成二进制,如android的java虚拟机。
相关文章推荐
- GitHub排名前50的Objective-C开发者(Objective-C top 50 GitHub developers)
- Objective-C基础内容简单介绍
- GitHub排名前50的Objective-C开发者
- [Objective-C] 释放对象时在release之后要设成nil
- Objective-C - 字符串换行
- 解析Json——操纵JsonObject
- 码讲——JavaBean与Object
- OC基础2:一些基本概念
- GitHub Top Users Objective-C World
- “Core Data could not fulfill a fault” for objects that were not deleted
- Objective-C 内存管理之 _ARC
- C#取硬盘、CPU、主板、网卡的序号 ManagementObjectSearcher
- block的实现原理
- [Objective-C]SEL类型、@selector选择器
- 面向对象 object 内部类
- [object-c]格式化时间
- JSONObject与JSONArray的使用
- objective-c类初始化
- Coroutine couldn't be started because the the game object 'GameController' is inactive!
- Understanding the Objective-C Runtime