[java] java虚拟机

前言

各种知识多而且容易遗忘,还不容易复习。最好的方法当然是自己给自己提问,不断补缺查漏,缺什么补什么。本文将各类知识归类,并将全文知识点浓缩在自问自查中,并且都写好目录,自问自查时可以随时跳转过去,方便大家系统的学习复习知识。 水平有限,有错误敬请指正

食用方法
自问自查—阅读原文—自问自查–阅读原文…
无限循环


自查自问

1. JDK,JRE,JVM 关系
2. 类加载过程  双亲委派  对象创建过程
3. 垃圾回收  
4. 回收算法
5. 反射  反射创建对象
6. 垃圾回收器
7. JVM和JMM
8. 1..7,1.8方法区的区别
9. java 再不同环境下面运行的原理
10. OOM和内存泄漏
11. java对象头
12. young gc和full gc触发条件


JDK,JVM

JDK? java Development Toolkit (java开发工具包)
JRE?
JVM?

在这里插入图片描述
 JDK中包含JRE,在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和lib,在这里
可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。

javac在  通常在C:\Program Files\Java\jdk1.6.0_10\jre\lib\rt.jar下 编译

JDK是整个JAVA的核心,包括了Java运行环境JRE(Java Runtime Envirnment)、一堆Java工具
(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。

JRE是运行环境 包含了Java virtual machine(JVM),runtime class libraries和Java application
launcher,这些是运行Java程序的必要组件。

JVM是java虚拟机所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行
只有JVM还不能成class的执行,因为在解释class的时候JVM需要调用解释所需要的类库lib,而
jre包含lib类库。

加载过程

在这里插入图片描述
加载
1、通过一个类的全限定名来获取其定义的二进制字节流。 //全限定名有绝对路径的意思
2、将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。
3、在Java堆中生成一个代表这个类的java.lang.Class对象,作为对方法区中这些数据的访问入口。
连接过程
1>.验证
  是否有正确的内部结构(构造器,方法,成员变量等等),并和其他类协调一致
2>.准备
  负责为类的静态成员(包括静态成员变量和静态方法)分配内存(这些数据被放在方法区的数据共享区中,还会给这些变量做一个标记,即这些变量属于哪个类),并设置默认初始化值
3>.解析
  将类的二进制数据中的符号引用替换为直接引用 比如调用类方法就是直接引用
https://www.cnblogs.com/shinubi/articles/6116993.html
下面我们解释一下符号引用和直接引用的概念:
符号引用就是加载到方法区的一些字符串,他们有一定的规范,直接引用就是栈里面的引用指向堆里的对象。
初始化过程
初始化阶段是执行类构造器方法的过程。方法是由编译器自动收集类中的类变量的赋值操作和静态语句块中的语句合并而成的。虚拟机会保证方法执行之前,父类的方法已经执行完毕。p.s: 如果一个类中没有对静态变量赋值也没有静态语句块,那么编译器可以不为这个类生成()方法。
在这里插入图片描述

双亲委派模型的工作流程是:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把请求委托给父加载器去完成,依次向上,因此,所有的类加载请求最终都应该被传递到顶层的启动类加载器中,只有当父加载器在它的搜索范围中没有找到所需的类时,即无法完成该加载,子加载器才会尝试自己去加载该类。

使用双亲委派模型来组织类加载器之间的关系,有一个很明显的好处,就是Java类随着它的类加载器(说白了,就是它所在的目录)一起具备了一种带有优先级的层次关系,这对于保证Java程序的稳定运作很重要。例如,类java.lang.Object类存放在JDK\jre\lib下的rt.jar之中,因此无论是哪个类加载器要加载此类,最终都会委派给启动类加载器进行加载,这边保证了Object类在程序中的各种类加载器中都是同一个类。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
init是对象构造器方法

在这里插入图片描述
自定义类加载器:
在这里插入图片描述

垃圾回收

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值