Java- 虚拟机学习总结

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.rhkb.cn/news/123592.html

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

相关文章

【GitHub 个人主页】适应于初学者的自定义个人主页设置

▚ 00 自定义GitHub主页的教程 🍁 【保姆级教程】手把手教你用github制作学术个人主页(学者必备) ▚ 01 优秀案例 1.1 添加Stats 🎃 网址为:Stats & Most Used Langs

【PHP】手术麻醉系统源码

手术麻醉信息管理系统覆盖了与麻醉相关的各个临床工作环节,可详细记录病人从进入手术室、手术中、到手术结束的全部数据,包括各类仪器的监测数据、麻药、用药、事件、输氧、插管、拔管、输液、出液、输血、呼吸、电子病例、检验信息、检查结果、医嘱、病…

java八股文面试[数据库]——分库分表

什么是分库分表 简单来说,就是指通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果。 分库分表解决的问题 分库分表的目的是为了解决由于数据量过大…

【学习笔记】C++ 中 static 关键字的作用

目录 前言static 作用在变量上static 作用在全局变量上static 作用在局部变量上static 作用在成员变量上 static 作用在函数上static 作用在函数上static 作用在成员函数上 前言 在 C/C 中,关键字 static 在不同的应用场景下,有不同的作用,这…

信息检索与数据挖掘 |(一)介绍

文章目录 📚信息检索🐇概念🐇结构化与非结构化数据🐇信息检索的基本假设🐇信息检索小结🐇附:IR新课题 📚数据挖掘🐇定义🐇数据挖掘 vs 机器学习 &#x1f4da…

算法训练营day42|动态规划 part04:0-1背包 (01背包问题基础(两种解决方案)、LeetCode 416.分割等和子集)

文章目录 01背包----二维dp数组01背包----滚动数组416.分割等和子集思路分析背包解法思考总结 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最…

2.4.3 【MySQL】设置系统变量

2.4.3.1 通过启动选项设置 大部分的系统变量都可以通过启动服务器时传送启动选项的方式来进行设置。如何填写启动选项就是下面两种方式: 通过命令行添加启动选项。 在启动服务器程序时用这个命令: mysqld --default-storage-engineMyISAM --max-conn…

DNS解析

1.DNS介绍 DNS 表示域名系统。此系统实质上是用于整理和识别各个域名的网络电话簿。电话簿将“Acme Pizza”之类的名称转换为要拨打的正确电话号码,而 DNS 将“www.google.com”之类的网络地址转换为托管该网站的计算机的物理 IP 地址,如“74.125.19.147…

最新暴力破解漏洞技术详解

暴力破解漏洞简介 暴力破解漏洞的产生是由于服务器端没有做限制,导致攻击者可以通过暴力的手段破解所需信息,如用户名、密码、短信验证码等。暴力破解的关键在于字典的大小及字典是否具有针对性,如登录时,需要输入4位数字的短信验…

CentOS 安装 Docker

注意:下文的命令使用的是 root 用户登录执行,不是 root 的话所有命令前面要加 sudo。 在安装 docker 之前,先说一下配置,我这里是 Centos7 Linux 内核:官方建议 3.10 以上,3.8 以上貌似也可以。 本文目录 1…

链动2+1天天秒商城商业模式

链动21天天秒商城商业模式 在当今市场,一种名为链动21天天的秒杀商城商业模式正在引发广泛关注。这种创新的商业模式具有快速拓展市场的强大能力,让许多用户和商家都感到非常惊讶。那么,这种模式究竟是什么,它又为何具有如此大的…

leetcode:268. 丢失的数字(python3解法)

难度:简单 给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。 示例 1: 输入:nums [3,0,1] 输出:2 解释:n 3,因为有 3 个数字,所以所有…

TiDB Serverless Branching:通过数据库分支简化应用开发流程

2023 年 7 月 10 日,TiDB Serverless 正式商用。这是一个完全托管的数据库服务平台(DBaaS),提供灵活的集群配置和基于用量的付费模式。紧随其后,TiDB Serverless Branching 的测试版也发布了。 TiDB Serverless Branc…

导出Excel的技术分享-综合篇

导出Excel的技术分享-综合篇 简单的EasyExcel使用 /*** 最简单的写*/public void simpleWrite() {// 注意 simpleWrite在数据量不大的情况下可以使用(5000以内,具体也要看实际情况),数据量大参照 重复多次写入// 写法1 JDK8// s…

Excel文件损坏打不开怎么办?可用这三招解决!

当你的excel文件不可读,或者出现提示“文件已经被损坏,无法打开”,这种情况让人措手不及。而且还会给我们正常的工作带来很多麻烦,文件损坏打不开怎么办?来看看这3招,详细的图文教程,小白也能轻…

2022年09月 C/C++(七级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 第1题:二叉树的深度 给定一棵二叉树,求该二叉树的深度 二叉树深度定义:从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的节点个数为树的深度 时间限制:1000 内存限制:65535 输入 第一行是一个整数n,表示…

基于vue-cli创建后台管理系统前端页面——element-ui,axios,跨域配置,布局初步,导航栏

目录 引出安装npm install安装element-ui安装axios 进行配置main.js中引入添加jwt前端跨域配置 进行初始布局HomeView.vueApp.vue 新增页面和引入home页面导航栏总结 引出 1.vue-cli创建前端工程,安装element-ui,axios和配置; 2.前端跨域的配…

HTTP介绍:一文了解什么是HTTP

目录 什么是HTTP协议 HTTP的工作流程 HTTP请求报文 HTTP响应报文 HTTP状态码 HTTP基于TCP协议的优点 持久连接与非持久连接: 详谈无状态与状态管理: 总结 HTTP协议(Hypertext Transfer Protocol)是互联网上应用最为广泛的…

CS420 课程笔记 P6 - 游戏逆向中的虚拟内存

文章目录 IntroVirtual memoryExample!Static example Intro 在上个视频中,我们知道有些地址在你重进游戏时就会无效,有的有时有效,我们需要了解称为虚拟内存的东西 记住这些信息:当你双击打开 Squally.exe 游戏时,系…

RabbitMQ:work结构

> 只需要在消费者端,添加Qos能力以及更改为手动ack即可让消费者,根据自己的能力去消费指定的消息,而不是默认情况下由RabbitMQ平均分配了,生产者不变,正常发布消息到默认的exchange > 消费者指定Qoa和手动ack …