jvm-day1-钢蛋逆袭日记

目录

1 为什么学习jvm

2 为什么说java是跨平台语言

3 Jdk和Jre和JVM的区别

4 jvm运行类的生命周期


1 为什么学习jvm

          为什么学java要认识jvm,因为电脑只认识00001111这些机器码,而我们平时写程序直接用的高级语言 xxx.java,可是对于计算机他不认识,且要java文件编译为字节码文件,也就是class文件,然后让java虚拟机进行编译,这样计算机能执行我们所写的代码咯。

2 为什么说java是跨平台语言

因为jvm可以部署在各个系统中,例如win,linex,mac ,这些平台都能下载对应的jvm,而java文件编译成字节码文件都能被这些jvm读取,java有JVM从软件层面屏蔽了底层硬件、指令层面的细节让他兼容各种系统,而c和c++在不同系统中实现的代码不一样

3 Jdk和Jre和JVM的区别

jre包含了jvm,而jdk包含了jre和jvm,对比之下,jre不仅有jvm还多了classload 和 java库,而jdk就多了编译环境,监控...

4 jvm运行类的生命周期

        我们平时在编写代码时,直接创建一个类就能用了,可他底层做了什么不知道吧?知其然还有知其所以然

        大致分为5个步骤  1 加载   2 连接  3 初始化  4 使用 5 卸载

        

        我们平时就是处于04使用层,在此之前还有3个步骤,简单来说一下

        加载: 读取从各个渠道获取的字节码然后加载,分别在方法区 和 堆中产生对象 ,在堆里别产生的对象类似于复制方法区的对象,是他的子集,因为要保护原对象操作数据,在jdk9后且其中一些静态变量位于堆里

        连接:连接也可以分为3个小步骤:分别为验证,准备,引用,第一为检测魔方,版本信息...

准备就是将变量赋初值,引用就是将字节码文件中的引用符给转变成对应常量池的地址

        初始化:给变量赋值,执行字节码指令,这里要知道什么情况才会导致初始化进行,一共有四种情况:1.直接new  2.使用静态方法和变量但如果使用了final就不会初始化 3.执行main()方法 4..调用class.classforname

        在继承的关系中,如果调用子类的静态方法父类会初始化,且在子类前边,而使用多态时,调用父类静态方法,子类不会进行初始化

        这三种比较重要,知道这三个就够了 

今天还要补充一下   jvm能读懂的字节码是啥     class   我直接介绍他的组成有五大部分

         1. 基本信息:继承关系,访问权限

        2. 常量池:常量引用地址下存放

·        3.字段:     字段名

        4.方法区        方法执行字段指令码

        5.属性 类的一些信息

哟西,复习完昨天学习的,分享一下心得,有错误和补充请大家鞭策我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值