Java- 虚拟机学习总结

news2024/10/6 16:17:06

Java文件编译,加载过程

写好java文件,jdk会通过javac编译class文件,classLaoder通过classpath将字节码文件加载进入jre

jvm数据区

包含栈,堆,程序计数器,方法区,本地方法栈

JAVA里的常量,静态变量在JVM的什么区,对象在什么区?

常量和静态变量在JVM的方法区

对象在JVM的堆区

JVM运行时数据区都有那些?

本地方法栈,堆,栈,程序计数器,方法区

方法区: 方法区在JVM中也是一个非常重要的区域,它与堆一样,是被线程共享的区域。

在方法区中,存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等

栈内存:是程序的运行单位,里面存储的信息都是与当前线程有关的内容,包括:局部变量,程序的运行状态,方法返回值

堆内存:JAVA的引用传递的实现就是依靠的堆内存,同一块堆内存空间可以被不同的栈内存所指向,包含:对象引用

程序计数器:是一个非常小的内存空间,这个空间主要是进行一个计数的操作,对象的晋升问题

方法栈内存:在进行递归调用的时候所保存的栈帧的内容,组成部分:局部变量表,操作数栈,当前方法所属类运行时常量的引用,返回地址

类加载器和双亲委派机制

java里,类加载器分为

Boostap ClassLoader(启动类加载器):

它是JVM的一部分,负责加载Java核心类库(如java.lang包中的类),它通常是用C/C++实现的,不是一个普通的Java类加载器

Extension ClassLoader(扩展类加载器)

也称为系统类加载器,负责加载Java的扩展类库,位于java.ext.dirs系统属性所指定的目录。

App ClassLoader(应用程序类加载器)

负责加载应用程序类路径(Classpath)上指定的类,这是大多数Java应用程序默认使用的类加载器

Custom ClassLoader(自定义类加载器)

可以由开发人员自定义实现的类加载器,用于加载特定的类或实现特定的类加载策略。

双亲委派机制

当一个类加载器收到加载类的请求时,会先检查是否可以委托给父类加载器去加载,只有当父类加载器找不到加载类时,才会交给子类加载器加载

双亲委派机制的优势

隔离性:每个类加载器只会加载自己的类,避免了不同的类加载器之间冲突

安全性:不同的类加载器分配的权限不同,防止恶意类被加载

复用性:已经加载过的类不会被重复加载,提高了运行效率

扩展性:通过扩展类加载器,可以扩展类的行为

Java类加载器和双亲委派加载机制是Java虚拟机保证类加载的安全性和隔离性的重要机制。它确保了类的唯一性和一致性,并为Java应用程序提供了高度的灵活性和可扩展性。

GC root 有哪些?

native:本地方法栈

对象:堆内存

final常量:方法区

线程:活动的线程

synchrozied引用的对象:堆内存

虚拟机栈引用的对象,在虚拟机栈内

垃圾回收算法有哪些?

标记-清除:找到有用的引用,并且标记,将没有标记的清理。

标记-复制:找到有用的引用,并且标记,然后复制到一片新的内存,将原先内存清理。

标记-整理:将标记的有用引用移到同一边内存,将另一边的内存清理。

引用计数法和根可达​​​​​​​

引用计数法:是当一个对象被引用时,引用计数加一,当一个对象被销毁或者引用失效时,引用计数减一,当引用计数为零时,就可以被回收。

缺点是,容易受循环引用的影响,比如A引用B,B引用A

根可达分析:从根对象开始,通过对象之间的引用关系遍历,能够到达的标记可达,不能到达的标记不可达,最后,回收掉不可达的垃圾对象。

优点在于,不受循环引用的困扰,不会产生额外的引用计数开销,是现代编程语言中常用的垃圾回收策略。

分代GC

分代垃圾回收(Generational Garbage Collection)是一种垃圾回收策略,通常用于管理Java堆内存。它将堆内存分为不同的代(Generation),每个代有不同的特点和回收频率。分代垃圾回收的主要思想是根据对象的生命周期将对象分为不同的代,然后对不同代的对象采用不同的回收策略,以提高垃圾回收的效率。

在Java中,通常将堆内存分为以下三代:

  1. 年轻代(Young Generation):年轻代是新创建的对象的归宿。大多数对象在被创建后很快变成不可达,所以年轻代的垃圾回收频率比较高。年轻代通常被分为三部分:Eden区和两个Survivor区(通常称为S0和S1)。

  2. 老年代(Old Generation):老年代存放已经存活了一段时间的对象。对象在年轻代经历了多次垃圾回收后,仍然存活,就会被移到老年代。

  3. 永久代(Permanent Generation):永久代用于存放类的元数据、方法信息和静态变量等,不同于年轻代和老年代。在Java 8及更早版本中使用永久代,但在Java 8中被元数据区(Metaspace)所替代。

分代垃圾回收的工作原理如下:

  1. 新创建的对象会被分配到年轻代的Eden区。

  2. 当Eden区满了,触发一次年轻代垃圾回收。在回收过程中,存活的对象会被移到Survivor区,同时清空Eden区。

  3. 对Survivor区也会进行垃圾回收,将存活的对象移到另一个Survivor区。这个过程会多次迭代。

  4. 当一个对象在年轻代经历了多次回收后仍然存活,它会被晋升到老年代。

  5. 当老年代的空间满了,触发一次老年代垃圾回收,清理掉不再使用的对象。

分代垃圾回收的优点是,年轻代的垃圾回收频率高,能够快速释放短期存活的对象,而老年代的垃圾回收频率低,可以减少长期存活对象的回收成本。这种策略通常能够提高垃圾回收的效率和系统的性能。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

‘XXX‘ module: ‘XXX‘ facet resources问题解决(已解决)

问题描述:XXX module: XXX facet resources 在创建web工程的时候,出现说模块没有创建,但是我们返回我们的模块,web模块是添加好的。 通过多次实验,解决问题:就是web框架它的名称不能是一样的,必…

用迅为i.MX6ULL开发板同一个网段概念

使用 nfs 之前,开发板、虚拟机 ubuntu、windows 电脑三者要互相 ping 通,这就涉及到了同一个网段 的概念。 概念:同一个网段是指 IP 地址和子网掩码相与得到的相同的网络地址。 快速判断同一个网段: (1&#xff09…

一个面向MCU的小型前后台系统

JxOS简介 JxOS面向MCU的小型前后台系统,提供消息、事件等服务,以及软件定时器,低功耗管理,按键,led等常用功能模块。 gitee仓库地址为(复制到浏览器打开): https://gitee.com/jer…

访问 GitHub 方法

访问 GitHub 方法 方法一:最常见的就是 fq,但这个是违法的行为,自己私下搞可以,不能教你们。 方法二:利用加速器,这是正规合法操作。这里推荐一个免费的加速器,下载安装 Watt Toolkit加速器,原名…

【Apollo学习笔记】——规划模块TASK之SPEED_HEURISTIC_OPTIMIZER

文章目录 前言SPEED_BOUNDS_PRIORI_DECIDER功能简介SPEED_BOUNDS_PRIORI_DECIDER相关配置SPEED_BOUNDS_PRIORI_DECIDER流程1. 对路程和时间进行采样以及速度限制2. 设计状态转移方程(cost计算)2.0 CalculateCostAt代价计算2.1 GetObstacleCost障碍物cost…

void指针

void指针为无类型指针,可以指向任何类型数据。 作用 C语言中引入void指针类型在于两个方面 对函数返回的限定对函数参数的限定 注意:void类型指针可以接受其他数据类型指针的赋值,但如果需要将void指针的值赋给其它类型的指针,…

嵌入式开发-SPI通信介绍

SPI(Serial Peripheral Interface)是一种串行外设接口规范,它是由摩托罗拉公司制定的一种通讯协议。它广泛应用于微控制器、存储器和其他外设之间的通信。 SPI是一种同步串行通信协议,它支持四线通信: SCK&#xff0…

ARM编程模型-内存空间和数据

ARM属于RISC体系,许多指令单周期指令,是32位读取/存储架构,对内存访问是32位,Load and store的架构,只有寄存器对内存,不能内存对内存存储,CPU通过寄存器对内存进行读写操作。 ARM的寻址空间是线…

会计--出纳实操实务小白入门

文章目录 P1、出纳基础一、出纳与会计区别二、出纳的具体工作三、出纳的工作流程(日、月、年工作安排) P2、出纳技能1:大小写金额以及日期书写规范一、数字书写要求二、小写金额“封头”与“封尾”三、大写金额“封头”与“封尾”四、日期大写…

垃圾回收 -标记清除算法

就如他的字面意思一样,由标记阶段和清除阶段构成。标记阶段是把所有的活动对象都做上标记的阶段。清除阶段是把那些没有标记的对象,也就是非活动对象回收的阶段。通过这两个阶段,就可以令不能利用的内存空间重新得到利用。 1、 标记阶段 ma…

bazel远程缓存(Remote Cache)

原理 您可以将服务器设置为构建输出(即这些操作输出)的远程缓存。这些输出由输出文件名列表及其内容的哈希值组成。借助远程缓存,您可以重复使用其他用户的 build 中的构建输出,而不是在本地构建每个新输出。 增量构建极大的提升…

音频——I2S TDM 模式(六)

I2S 基本概念飞利浦(I2S)标准模式左(MSB)对齐标准模式右(LSB)对齐标准模式DSP 模式TDM 模式 文章目录 TDM formatTDM format ATDM format BTDM format C总结 TDM format TDM 分为两种常用操作模式:TDM A mode 和 TDM B mode, 统称为TDM mode 基于 TDM mode&#x…

Docker 容器逃逸漏洞 (CVE-2020-15257)复现

漏洞概述 containerd是行业标准的容器运行时,可作为Linux和Windows的守护程序使用。在版本1.3.9和1.4.3之前的容器中,容器填充的API不正确地暴露给主机网络容器。填充程序的API套接字的访问控制验证了连接过程的有效UID为0,但没有以其他方式…

7.2 项目2 学生通讯录管理:文本文件增删改查(C 版本)(自顶向下设计+断点调试) (A)

C自学精简教程 目录(必读) 该作业是 作业 学生通讯录管理:文本文件增删改查(C版本) 的C 语言版本。 具体的作业题目描述,要求,可以参考 学生通讯录管理:文本文件增删改查(C版本)。…

性能测试有哪些常见的测试指标?

一、什么是性能测试 先看下百度百科对它的定义 <font size"3">性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。</font> 我们可以认为性能测试是&#xff1a;通过在测试环境下对系统或构件的性能进…

【数据结构】栈---C语言版(详解!!!)

文章目录 &#x1f438;一、栈的概念及结构&#x1f344;1、栈的概念定义&#x1f344;2、动图演示&#x1f332;入栈&#x1f332;出栈&#x1f332;整体过程 &#x1f438;二、栈的实现&#x1f438;三、数组结构栈详解&#x1f34e;创建栈的结构⭕接口1&#xff1a;定义结构…

2023开学礼《乡村振兴战略下传统村落文化旅游设计》许少辉师大图书馆

2023开学礼《乡村振兴战略下传统村落文化旅游设计》许少辉师大图书馆

配置keil生成asm汇编文件

简介&#xff1a;ASM是汇编语言源程序的扩展名&#xff1b;程序在编译的过程中&#xff0c;会将源代码编译会汇编代码&#xff0c;一步步生成可执行文件&#xff1b; 1&#xff1a;keil中options的配置 这个语法应该是根据工程工程哪里的配置名称来的&#xff0c;也可以使用固…

历史库存储成本节约至少 50% ,OceanBase数据压缩核心技术解读

“数据是二十一世纪的石油”&#xff0c;这个观点正在逐渐成为现实&#xff0c;现在我们有各种各样的 IT 系统不断地生产着数据&#xff0c;这些数据累积起来为我们的生产生活带来了很多便利。但在挖掘这些数据价值的同时&#xff0c;大量数据的存储与计算也带来了巨大的成本&a…

TCP和UDP通信

1.通信过程 UDP 服务器sever绑定IP地址&#xff0c;关闭套接字 TCP socket套接字&#xff08;网络通信&#xff09;