双非本科准备秋招(9.3)—— JVM2

学这个JVM还是挺抽象的,不理解的东西我尽量记忆了,毕竟刚接触两天,也没遇到过实际应用场景,所以学起来还是挺费劲的,明天再补完垃圾回收这块的知识点。U•ェ•*U

先补一下JVM运行时的栈帧结构。

        线程调用一个方法的执行和退出意味着一个栈帧的入栈和出栈,栈顶的栈帧叫当前栈帧,对应一个线程需要执行的最新的方法。其内部主要包含局部变量表、操作数栈、方法返回地址、动态链接等信息。

局部变量表(Local Variables Table)

        用来存放方法参数和方法内部定义的局部变量。编译期就能确定局部变量表的容量,所以方法运行期间容量大小不会改变

        容量大小以变量槽(Variable Slot)为单位,变量槽可以重用,这个局部变量使用完成了,它占用的内存就可以给别的变量使用了。

        每个变量槽的大小是32位,所以64位的变量会用两个连续的槽,并且JVM不允许以任何方式访问其中的一个。

操作数栈

        主要用于保存计算过程的中间结果,同时作为计算过程中变量的临时存储空间。

方法返回地址

方法正常退出:方法正常执行完成后,会将返回值返回给调用方法

方法异常退出:方法执行时发生了异常并且没有得到妥善处理,也会触发方法退出,并且不会有返回值返回给调用方。

方法正常退出,主调方法PC计数器的值就可以作为返回地址。方法的退出,就是栈帧出栈的过程。

动态链接

java源文件编译为字节码文件的过程中,所有的变量和方法会作为符号引用,保存在Class文件的常量池中。

当一个方法调用另一个方法时,就是通过常量池中指向方法的符号引用表示的。

动态链接就是能将符号引用转换成调用方法的直接引用

比如我在main里写一个method_one()方法,编译过程中首先在常量池(Constant pool)创建该方法的符号引用,然后会执行invokestatic #2指令,这个指令就是通过常量池中的符号引用#2表示的,在运行时,动态链接会根据这个符号引用真正地调用这个方法。

垃圾回收Part1

四大引用

图解

先把黑马的图粘贴过来,众所周知四大天王有五位,四大引用有五个也是正常的。

HotSpot通过直接引用来访问java对象,根据引用强弱分为四种,强软弱虚。Strong、soft、weak、Phantom。

强引用

对象的一般状态都是强引用。

一个对象有强引用,GC绝不会回收。

public class test {public static void main(String[] args) {String s = "sm";HashMap map = new HashMap();}
}

软引用

用于对象缓存,如果一个对象只有软引用,那么当内存不足,抛出OOM之前会回收软引用对象。

用法示例:

public class GCAnalization {private static final int _8MB = 8 * 1024 * 1024;private static final int _4MB = 4*1024*1024;public static void main(String[] args) {ArrayList<SoftReference<byte[]>> list1 = new ArrayList<>();for(int i = 0; i < 10; i++){list1.add(new SoftReference<>(new byte[_4MB]));}for(int i = 0; i < 10; i++){System.out.println(list1.get(i));}}
}

弱引用

用于对象缓存,弱引用更低级,只要发生GC,弱引用就会被回收。

虚引用

好像没啥用,为对象设置一个虚引用,该对象被回收时能收到系统通知,必须与引用队列关联使用。

判断对象是否能回收的算法

引用计数法

当对象被引用一次,加1,不被引用,减1。

但是可能出现循环引用,这时就会发生内存泄露。

可达性分析

通过一系列GC Root(根对象节点)对象作为起点,根据引用关系,向下搜索,能找到的对象就是可达的,表示不可回收。

什么对象能作为GC Root?

比如: 

1、虚拟机栈中引用的对象

2、方法区中类静态属性引用的对象

3、本地方法栈的Native对象

等等。

垃圾回收算法

标记清除

找出所有存活的对象,对存活的对象进行标记,清除未被标记的对象。

速度快,但会产生内存碎片。

标记整理

找出所有对象,对存活的对象进行标记,将存活对象整理到一端(紧凑),然后清除未被标记的对象。

没有内存碎片,速度慢

复制

划分两个大小相同的区域,每次只用一块,这块用完了,就把存活的对象复制到另一块,然后清理内存空间。这样交替使用两块内存。

没有内存碎片,占用空间大。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/437713.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[嵌入式软件][启蒙篇][仿真平台] STM32F103实现SPI控制OLED屏幕

上一篇&#xff1a; [嵌入式软件][启蒙篇][仿真平台] STM32F103实现LED、按键 [嵌入式软件][启蒙篇][仿真平台] STM32F103实现串口输出输入、ADC采集 [嵌入式软件][启蒙篇][仿真平台]STM32F103实现定时器 [嵌入式软件][启蒙篇][仿真平台] STM32F103实现IIC控制OLED屏幕 文章目…

LabVIEW探测器CAN总线系统

介绍了一个基于FPGA和LabVIEW的CAN总线通信系统&#xff0c;该系统专为与各单机进行系统联调测试而设计。通过设计FPGA的CAN总线功能模块和USB功能模块&#xff0c;以及利用LabVIEW开发的上位机程序&#xff0c;系统成功实现了CAN总线信息的收发、存储、解析及显示功能。测试结…

操作系统(7)----调度相关知识点(万字总结~)

目录 一.调度的三个层次 1.高级调度 2.低级调度 3.中级调度 二.进程的挂起状态 三.进程调度的时机 四.进程调度方式 1.非剥夺调度方式 2.剥夺调度方式 五.进程的切换与过程 六.调度器/调度程序 1.调度程序 2.闲逛进程 七.评价调度算法的各个指标 1.CPU利用率 2…

Java 异常处理上篇: Throwable 详解

文章目录 前言Throwable 类ErrorException受检异常&#xff08;Checked Exception&#xff09;非受检异常&#xff08;Unchecked Exception&#xff09; 异常处理关键字try-catchfinallythrow 总结个人简介 前言 Java 异常处理是编写稳健、可靠程序的关键组成部分。在 Java 中…

verilog编程之乘法器的实现

知识储备 首先来回顾一下乘法是如何在计算机中实现的。 假设现在有两个32位带符号定点整数x和y&#xff0c;我们现在要让x和y相乘&#xff0c;然后把乘积存放在z中&#xff0c;大家知道&#xff0c;两个32位数相乘&#xff0c;结果不会超过64位&#xff0c;因此z的长度应该为64…

Mac下查看、配置和使用环境变量

Mac下查看、配置和使用环境变量 一&#xff1a;Mac怎么查看环境变量命令 printenv一&#xff1a;这个命令会一次性列出所有环境变量的键值对&#xff0c;输出格式为&#xff1a; VAR1value1 VAR2value2 ...二&#xff1a; 也可以通过给这个命令加上环境变量名参数&#xff0…

2023年CSDN年终总结:长风破浪会有时,风物长宜放眼量

目录 0 回首20231 打造垂类专栏2 个人技术成长3 首发SCI期刊4 生活中的美好5 新年新flag 0 回首2023 这是去年flag的完成情况&#xff0c;很惊喜地发现全部顺利完成了。 CSDN坚持垂类写作&#xff0c;完结机器学习和ROS机器人专栏&#xff0c;开启深度学习新篇章 粉丝数希望突…

Oracle篇—分区表和分区索引常用检查语句(第四篇,总共五篇)

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux&#xff0c;也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&#xff0c;并且也会默默的点赞收藏加关注❣…

Self-Attention 和 Multi-Head Attention 的区别——附最通俗理解!!

文章目录 前言 一、简要介绍 二、工作流程 三、两者对比 四、通俗理解 前言 随着Transformer模型的迅速普及&#xff0c;Self-Attention&#xff08;自注意力机制&#xff09;和Multi-Head Attention&#xff08;多头注意力机制&#xff09;成为了自然语言处理&#xff08;NLP…

MySQL十部曲之六:数据操作语句(DML)

文章目录 前言语法约定DELETEINSERTSELECT查询列表SELECT 选项子句FROMWHEREORDER BYGROUP BYHAVINGWINDOWLIMITFOR SELECT ... INTO连接查询CROSS JOIN和INNER JOINON和USINGOUTER JOINNATURE JOIN 子查询标量子查询使用子查询进行比较带有ANY、IN或SOME的子查询带有ALL的子查…

ThreadLocal学习笔记

ThreadLocal类图 ThreadLocal/InheritableThreadLocal/ \TransmittableThreadLocal(阿里巴巴) TransmissibleThreadLocal(阿里巴巴)ThreadLocal 这是Thread类的局部变量&#xff0c;每个线程私有。 它主要用于解决多线程中的数据共享问题&#xff0c;保…

向日葵P4智能4G插排体验:内网机房如何实现远程电源管理?

出于安全或者是其他合规需求考虑&#xff0c;内网机房是不会有外网接入的&#xff0c;自然也就没有条件部署WiFi&#xff0c;传统通过WiFi入网的智能插座无用武之地。那么这种情况下&#xff0c;我们该如何对机房的各种设备实施远程电源管理呢&#xff1f;一款通过4G联网的智能…