开发语言环境
JIT的基本原理
申请一块既有写权限又有执行权限的内存,然后把比较热点的Java方法,翻译成机器码,写入到这块内存里。当再需要调用原来的Java方法时,就转向调用这块内存。
对象布局(object layout)相关介绍
对象头(header)有和GC相关的元数据,也有和语言相关的元数据,可有可无,和具体语言、虚拟机有关,元数据可以集中放在一块特定区域;字段(field,也叫“域”);运行时(虚拟机)有能力识别对象哪些字段是值,哪些字段是引用。
根集合(root set)具体包含什么?
根集合中的引用可以被应用程序直接访问,因此根指向的对象都是活的。具体包括:局部变量、静态(全局)变量、被外部接口保留的、例如JNI的LocalRef等、其他根、由语言、虚拟机、运行环境定义。
类型对象全景图
以代表列表的list对象为例,ListKlass既要能充当类型的功能,又要充当对象的功能,最直观的办法就是为ListKlass关联一个普通对象,这个对象被称为TypeObject。
动态类型和弱类型相关介绍
动态类型是指变量在声明时不指定类型,可以使用任意的值为该变量赋值。而且对象往往可以在运行时增加或者删除某一个成员变量。弱类型是指在某一种语言中不存在类型的概念。Python实际上是强类型的,也就是说它的变量都是有类型的。
Klass的有什么作用?
同一类对象的Klass指针都会指向同一个Klass对象。例如所有的整数对象的指针都会指向IntegerKlass。通过这个指针可以区分对象类型。
什么是Klass和Oop?
Python源代码里缺少类型信息,更加完全依赖于对象类型识别机制;即使C++做为静态语言的代表,也依赖虚表指针进行dynamic_cast时的类型检查Klass机制。