(1)  jvm可以理解为一个由c++所编写的内存容器:包含了加载器,编译器等。当然了,我当时最困惑的就是class是怎么被执行的

java中的对象模型:OOP-Klass模型

OOP:普通对象指针,

Kcass:java类在c++中的对等体

Kclass想jvm提供的功能:

实现语言层面的java类

实现java对象的派发



。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

(2)

对于任意一门语言,如果不能被编译陈本机的可执行指令,则根本无法运行。众所周知,java编译器会将.java的文件编译成.class的文件

而.class文件在物理机上是无法执行的,所以才有了(1)中对等层的概念。

java的编译器分为:模板解析器,c++编译器       最终生产的都是机器码(别怀疑,就是这么做的)

还有一种最老的是字节码解析器---->为什么现在不用了不知道原因的说


关于热点代码的问题:在jvm执行期间,会将一些循环的代码,经常用到的代码标记为热点----->那什么是热点呢,热点是怎么运行的呢

热点代码,会被编译成本地的机器码。在执行期间,会有一个转发表,而热点代码相关的部分会与提前生成的机器码相关联----->提高运行速度





。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

(3)java的整个执行流程:

.java--->.class--->类加载(aop[asm,gcb等],安全验证[为什么说java比较安全呢],连接[在解码中的符号引用])---->生成对等体---->动态编译---->执行

执行(方法去,堆,栈)。


java将编译的过程委托给了虚拟机动态执行



(4) java的JNI

JNI即:java本地方法,在jvm想执行class中的方法是,是通过jni才jvm的内存中进行查找,在执行。对于java中的方法,对象等概念,都统一理解为jvm的运行时 数据就可以了。


(5)为什么要分方法区,常量区,堆,栈呢

个人感觉 :程序就是数据结构+方法      在jvm的角度,这些都是给你的运行资源,进行GC等


以上是这些天的一些体会,如果有说的不对的地方,希望多多指正,留言,一起学习