JVM知识点总结

1.JVM是什么?

jvm就是java虚拟机
功能:它只识别字节码文件,能够将.class文件中的字节码指令进行识别并调用系统API,
运行环境:它是可运行在操作系统之上的,它与硬件没有直接的交互,
包括:一套字节码指令集,一组寄存器,栈,堆,方法区,垃圾回收(GC),本地方法栈

2.jvm运作在java类的那个过程?

运行过程:java源文件-----编译器----字节码文件(.class文件)—jvm(解释器)-----编译成特定机器上的机器码

科普类加载器(ClassLoader):本身也是一个类,其实质是把类文件从硬盘中读取到内存中。
类加载分为:隐式加载:通过new创建,显示加载:通过Class.formName (多用于反射)
类加载器有哪些:启动类加载器、扩展类加载器、应用程序类加载器、自定义类加载器(通过继承ClassLoader类来实现)
在这里插入图片描述

3.JVM后台系统线程主要有?

虚拟机线程:线程等待jvm到达安全点操作出现
周期性任务线程:负责定时器时间
GC线程:垃圾回收
编译器线程:运行时动态编译字节码成本地品台相关机器码
信号分发线程:这个线程接受到jvm的信号并调用适当的jvm方法处理

科普

栈帧:是用来储存数据和部分过程结果的数据结构,同时也被用来处理动态链接
永久代:用于儲存被jvm加载的类信息,常量,静态变量

4.jvm对象创建流程

第一步:虚拟机遇到new指令先去检查是否在常量池中并去检查是否已被加载、解析、初始化(对静态变量和静态方法进行初始化)
第二步:是否被加载过,未被加载则加载类(类加载器ClassLoader)
第三步:类加载检查后(class文件的正确性),内存分配
第四步:确定内存分配大小,在堆中进行划分
第五步:内存大小划分两种情况: 1.指针碰撞(通过挪·动指针划分空间)-----2.列表划分(在表格中找到空间划分)、
第六步:空间申请完成之后,jvm将内存空间都初始为0
第七步:jvm对对象进行必要设置(对象哈希值、GC年代)
第八步:jvm创建对象结束,java程序执行init开始

5.GC垃圾回收

5.1GC作用:因为编程人员会忘记内存回收或错误的内存回收导致程序不稳定甚至崩溃,GC可以做到将不合法的内存自动回收实现清理内存的目的

5.2如何确定为垃圾:引用计数法、可达性分析

5.3常见的垃圾回收算法:分代复制垃圾回收、标记-清除垃圾回收、标记-整理垃圾回收

5.4finalize()方法一般用于GC中对象清理,内存充足不清理,主要用途:回收特殊内存(JNI (java Native interface))

5.9科普

内存泄漏:所谓的内存泄露就是指一个不在被程序使用的对象一直占据在内存中。java中也可能存在内存泄漏(长生命周期引用短生命周期,例:缓存系统 )
深拷贝和浅拷贝:简单说就是复制、克隆, 区别:是否开辟新空间
双亲委派模式:是当一个类加载器请求时,不会自己类加载,会委派父类去加载,如果父类处理不了会反馈给子类

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Peak_Gao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值