通过源码中的 Object.h 中可以看到
typedef struct Object {
/* ptr to class object */
ClassObject* clazz;
/*
* A word containing either a "thin" lock or a "fat" monitor. See
* the comments in Sync.c for a description of its layout.
*/
u4 lock;
} Object;
用这个结构体定义的基本类的实现,这里有二个变量,值得研究一下
lock 看名字即可知道,对应Obejct对像中的锁实现,即 notify wait 的处理。可以放下。
clazz 这个结构体指针,姑且不看结构体内容,这里用了指针的定义,肯定有一定含义,我们下面分析看看!
下面会有更多的结构体:
struct DataObject {
Object obj; /* MUST be first item */
/* variable #of u4 slots; u8 uses 2 slots */
u4 instanceData[1];
};
struct StringObject {
Object obj; /* MUST be first item */
/* variable #of u4 slots; u8 uses 2 slots */
u4 instanceData[1];
};
我们看到最熟悉的一个词 StringObject,先看看这个把这个结构体展开即是这样:
struct StringObject {
/* ptr to class object */
ClassObject* clazz;
/*
* A word containing either a "thin" lock or a "fat" monitor. See
* the comments in Sync.c for a description of its layout.
*/
u4 lock;
/* variable #of u4 slots; u8 uses 2 slots */
u4 instanceData[1];
};
我们不难发现,任何对像的内存结构体中第一行都是 Object 结构体,而这个结构体第一个总是一个ClassObejct,第二个总是lock.
按照C++中的技巧,这些结构体可以当成Object结构体使用,因此所有的类在内存中都具有“对像”的功能,即可以找到一个类(ClassObject),可以有一个锁(lock)
由此完成了基本类型最基本的内存管理。
如果没有估计错的话 DataObject 完成了基本数据类型对像,比如 int long bool 等类型管理,而 instanceData 刚是实际的数据存储,有待确认。
StringObject 则是对 String 类进行管理的数据对像。
ArrayObejct 是数据相关的管理
具体的实现,以后细细分析!
这里最为重要的是 ClassObject 结构体,可以参考 http://blog.csdn.net/bazookier/article/details/4427404