侧边栏壁纸
  • 累计撰写 72 篇文章
  • 累计创建 31 个标签
  • 累计收到 5 条评论

目 录CONTENT

文章目录

JVM知识点总结-Peak-Gao

PeakGao
2024-11-27 / 0 评论 / 0 点赞 / 1 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
部分素材可能会来自网络,若不小心影响到您的利益,请联系我们删除。

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中也可能存在内存泄漏(长生命周期引用短生命周期,例:缓存系统 )
深拷贝和浅拷贝:简单说就是复制、克隆, 区别:是否开辟新空间
双亲委派模式:是当一个类加载器请求时,不会自己类加载,会委派父类去加载,如果父类处理不了会反馈给子类

0
JVM
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区