jvm听课随记01

1、 JVM架构图

2、类加载器

类装载器ClassLoader是负责加载class的文件的,将class文件字节码加载到内存中,并将这些内容转换成方法区的运行时数据结构。classLoader只负责文件的加载,至于它是否可运行,则由执行引擎Eception Engine决定。

这里要区分一下classClass,小写的class是指编译Java代码后生成的以 .class为后缀名的字节码文件。而大写的Class,是JDK提供的java.lang.class,可以理解的为封装类的模板。多用于反射场景,例如JDBC的加载驱动,Class.forName("com.mysql.jdbc.Driver");

接下来观察下图,Car.class字节码文件被classLoader类装载器加载并初始化,在方法区中生成一个Car class的类模板,而我们平时用到的实例化,就是在这个类模板的基础上,形成了一个个的实例,即car1,car2,反过来讲我们可以对某个具体的实例进行getClass操作,就可以得到该实例的类模板,即Car Class。再接着我们对这个类模板进行getClassLoader操作,就可以得到这个类模板由哪个类装载器进行加载的。 

在这里插入图片描述

 扩展一下 :JVM并不仅仅只是通过检查文件后缀名是.class来判断是否加载,最主要是通过class文件中特定的文件标示,即下图的text.class文件中的cafe babe

在这里插入图片描述

 

下边第一个得到是 c++语言写的(启动类加载器 Bootstrap)

第二个得到的是扩展类加载器(Extension )

第三个是应用程序类加载器 也叫系统类加载器

这里需要掌握小维度的点

2.1 有哪几种类加载器 3种类加载器

2.2 双亲委派 我爸是李刚 有事找我爹 俗称往上捅 也就是先从根加载找的到直接用 找不到再从扩展加载器  扩展里边找的到直接用 找不到就再往下找  一直到你自己的  如果自己也找不到  就报类没有找的异常

2.3 沙箱安全制 以上这么做的理由 往上捅 理由是沙箱安全机制

3、Native

场景

当我们线程strat 就是立刻启动线程吗  答案不是的    他是新建完成到就绪状态  他得调用底层c++的方法才能启动  也就是说start不一定是启动线程  那么什么时候启动  待cpu和操作系统调度

3.1  Native是关键字

3.2  声明有,实现无 why  因为凡是Native的方法 代表java的势力范围  接下来他的实现是靠的C语言(也就是第三方函数库) 

接下来由于Native方法的装载和运行在一个叫栈里边 这时候我们衍生出一个栈叫 Native Method Stack  普通放在在栈里边  标志着Native方法走另外一条绿色通道

4、pc寄存器

4.1 记录了方法之间的调用和执行情况,类似于排班值日表;他就是一个指针;他只是记录一个内存地址;我们说了pc寄存器是一个硬件 他在哪  他是在CPU里边的 他用来存储指向下一条指令的地址,也就是将要执行的指令代码 他是当前线程所执行的字节码行号指示器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值