Java面向对象在JVM里怎么实现

📅 2026/7/15 16:23:47
Java面向对象在JVM里怎么实现
这个问题可以从User user new User();里的new开始理解。UserusernewUser();我们每天都在写类似上面的代码但估计没多少人去想JVM到底做了什么这个对象才真正诞生new只是我们写出来的「语法」真正把对象创建出来的是JVM。实际的步骤还蛮多的:JVM先找到User对应的类型然后根据类型信息确定对象需要多大的内存申请一块空间接着把类型指针写进对象头字段区域按需要初始化。到这里一个真正的Java对象才算创建完成。对象已经创建出来了但新的问题也来了。它怎么知道自己属于哪个类型因为堆里的实例只管存数据比如name、age这类字段。对象头里有一个类型指针指向User的类型信息。对象本身并不知道有哪些方法它只知道自己属于哪个类型。真正管「我是谁、字段怎么排、有哪些方法」的是类型。但是依然还是有问题光知道自己属于哪个类型还不够。当我们写user.save();JVM又是怎么知道去执行哪个save()的方法信息不在对象里在类型里。JVM内部有一个专门描述类型的数据结构叫Klass。类型里保存着这个类的所有类型信息比如方法、字段布局、父类等。JVM不会去对象里找方法而是先根据对象头里的类型指针找到类型再从类型里找到save()对应的方法。getClass()走的也是对象到类型这条路最后才变成Java里的Class对象。那为什么不把方法直接放到对象里呢因为同一个类可能会创建N多个对象。如果每个对象都保存一份方法内存浪费就太大了。所以才把方法统一放到类型里每个对象只保存一个类型指针。同一类创建再多实例也共享同一份类型和方法信息对象本身可以保持得很轻量。你可能会觉得为啥没讲继承多态之类的这些是Java 提供了哪些面向对象的语言特性而不是面对对象怎么实现。