(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等
以上是这些天的一些体会,如果有说的不对的地方,希望多多指正,留言,一起学习