java虚拟机(一)

本文详细介绍了Java虚拟机的关键组件,包括HotSpot的作用与优势、虚拟机栈的运作原理及栈帧结构,以及方法区的功能。同时,文章还探讨了垃圾回收机制的多种算法,并对比了重载与重写的区别。

1、Hotspot
Hotspot是交心的java虚拟机,用来代替JIT(Just in Time),可以大大提高java运行的性能
Java原先把源代码便以为字节码在虚拟机执行,这样执行效率较慢,而Hotspot将常用的部分代码便以为本地(原生,native-)代码,这样显著提高了性能

2、
在这里插入图片描述
(1)程序计数器
线程私有的内存空间,服务于线程的函数调用栈,可以存储一个字长大小的数据,从而实现类似硬件级的程序计数器
在虚拟机概念模型里,字节码解释器通过改变程序计数器的值,进而来选取下一条需要执行的字节码指令在内存中的地址,可以将它看做是当前线程所执行的字节码的行号指示器
(2)
在这里插入图片描述
jvm stack :虚拟机栈
每个线程都对应一个虚拟机栈,栈中存储的是将要执行的方法,方法进栈出栈等都是指的这个虚拟机栈,栈中存储的是栈帧,也就是方法
(3)
在这里插入图片描述
本地方法栈:执行的是native方法,执行的是c或者c++语言等)
(4)
在这里插入图片描述

(5)方法区
在这里插入图片描述
总结
在这里插入图片描述

第二部分:
1、虚拟机栈 (先进后出)
在这里插入图片描述

在这里插入图片描述
栈帧结构
在这里插入图片描述
栈帧结构详解
局部变量表:
1、一组变量值的存储空间,用于存放方法在执行过程中所需的参数和局部变量
2、局部变量表中的每个存储空间称为“变量槽” (Variable Slot) ,可存储的数据类型:byte ,short , int ,char, boolean,float, reference ,returnAddress(已过时)
总结上面的几种数据类型,发现他们的位数不超过32位,所以每个Slot的大小应该是32位
知识点补充一:九大基本类型数据
其中的八种不在说了,returnAddress:
returnAddress 类型会被 Java虚拟机的jsr、ret、合jsr_w指令所使用。、
returnAddress 类型的值指向一条虚拟机指令的操作码,与前面介绍的那些数值类的原生类型不同,returnAddress 类型在java语言之中并不存在相应的类型,也无法在程序运行期间更改returnAddress类型的值
通俗点讲就是,调用这个类型的变量就会跳转到下一个界面

操作数栈:
又称操作栈、表达式栈,是虚拟机的工作区
通过jvm字节码指令对“局部变量表”中的数据进行提取,调用,计算,存储等操作
操作数栈的深度由Code属性的max_stacks在编译器期确定

实例演示,栈帧的执行细节
该实例演示的是

    public static void main(String[] args) {
       int i = 10;
       int j = 20;
       int c = i+j;
    }

在这里插入图片描述
执行步骤:
1、主方法进栈,将main方法的参数args添加到局部变量表
2、首先 将10压进操作数栈顶,其中bipush b 代表byte,意味着 10 是byte取值范围内的Int类型的数据
3、istore_1 将10 放到局部变量表的1位置
4、同样的步骤操作变量20,放到2位置
5、将局部变量表中的1位置和2位置的数加载到操作数栈
6、使用iadd 将操作数栈的两个变量相加然后放到局部变量表3位置
7、返回数据
面试题:

public class DayOne {
     int age = 10;
    public  int test() {
       try{
           age = 20;
           throw  new NullPointerException();
       }catch (Exception e){
           age = 30;
           return age;
       }finally {
           age = 40;
       }
    }
}
class DayTwo{
    public static void main(String[] args) {
        DayOne dayOne = new DayOne();
        System.out.println(dayOne.test());
    }
}

此题的输出结果是:30
是因为在栈帧中:
在这里插入图片描述
发现在第15行,将30压栈,然后放到了局部变量表中的0位置,然后又加载出来再2位置也放入了一份,返回的时候 也是返回的2位置上的数据,也就是说返回的是30

3、
在这里插入图片描述
其中符号引用的含义:

public class DayThree {
    
    public void test(Runnable a){
        a.run();
    }
    
    
}

象上面的代码中是没有编译错误的,而Runnable对象没有具体的指向,此时就称为是一个符号引用
知识点二:
重写和重载的区别
重载: 1、必须具有 不同的参数列表(参数列表的不同,包含参数的个数,参数的类型)
2、可以有不同的返回值类型,只有参数的列表不同就可以了
3、可以有不同的访问修饰符
4、可以抛出不同的异常
重写: 1、参数列表必须完全与被重写的方法相同,方法名也要相同
2、返回的类型必须一直与被重写的 方法的返回值类型相同
3、访问修饰符的限制一定要大于被重写方法的访问修饰符
4、重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查性异常

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

第三部分 垃圾回收机制算法
算法一:
在这里插入图片描述
算法二:
在这里插入图片描述
算法三:
在这里插入图片描述
算法四:
在这里插入图片描述

标题基于Spring Boot的音乐播放网站设计与实现研究AI更换标题第1章引言介绍音乐播放网站的研究背景、意义、国内外现状及论文方法与创新点。1.1研究背景与意义阐述音乐播放网站在当今数字化时代的重要性与市场需求。1.2国内外研究现状分析国内外音乐播放网站的发展现状及技术特点。1.3研究方法以及创新点概述论文采用的研究方法及在设计与实现上的创新点。第2章相关理论与技术基础总结音乐播放网站设计与实现所需的相关理论和技术。2.1Spring Boot框架介绍介绍Spring Boot框架的基本原理、特点及其在Web开发中的应用。2.2音乐播放技术概述概述音乐播放的基本原理、流媒体技术及音频处理技术。2.3数据库技术选型分析适合音乐播放网站的数据库技术,如MySQL、MongoDB等。第3章系统设计详细介绍音乐播放网站的整体设计方案。3.1系统架构设计阐述系统的层次结构、模块划分及各模块的功能。3.2数据库设计介绍数据库表结构、关系及数据存储方式。3.3界面设计用户界面的设计原则、布局及交互方式。第4章系统实现详细介绍音乐播放网站的具体实现过程。4.1开发环境与工具介绍开发所需的软件、硬件环境及开发工具。4.2核心功能实现阐述音乐播放、搜索、推荐等核心功能的实现细节。4.3系统测试与优化介绍系统测试的方法、过程及性能优化策略。第5章研究结果与分析呈现音乐播放网站设计与实现的研究结果。5.1系统功能测试结果展示系统各项功能的测试结果,包括功能完整性、稳定性等。5.2用户反馈与评价收集并分析用户对音乐播放网站的使用反馈与评价。5.3对比方法分析将本设计与实现与其他类似系统进行对比分析,突出优势与不足。第6章结论与展望总结音乐播放网站设计与实现的研究成果,并展望未来发展方向。6.1研究结论概括音乐播放网站设计与实现的主要成果及创新点。6.2展望指出当前研究的不足,提出未来改进方向及可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值