12JVM基础
五、JVM
17、JVM基础
说一下堆栈的区别?
功能方面:堆是用来存放对象的,栈是用来执行程序的。 共享性:堆是线程共享的,栈是线程私有的。 空间大小:堆大小远远大于栈。
队列和栈是什么?有什么区别?
队列和栈都是被用来预存储数据的。 队列允许先进先出检索元素,但也有例外的情况,Deque 接口允许从两端检索元素。 栈和队列很相似,但它运行对元素进行后进先出进行检索。
说一下 JVM 的主要组成部分?及其作用?
类加载器(ClassLoader) 运行时数据区(Runtime Data Area) 执行引擎(Execution Engine) 本地库接口(Native Interface) 组件的作用: 首先通过类加载器(ClassLoader)会把 Java 代码转换成字节码,运行时数据区(Runtime Data Area)再把字节码加载到内存中,而字节码文件只是 JVM 的一套指令集规范,并不能直接交个底层操作系统去执行,因此需要特定的命令解析器执行引擎(Execution Engine),将字节码翻译成底层系统指令,再交由 CPU 去执行,而这个过程中需要调用其他语言的本地库接口(Native Interface)来实现整个程序的功能。
说一下 JVM 运行时数据区?
不同虚拟机的运行时数据区可能略微有所不同,但都会遵从 Java 虚拟机规范, Java 虚拟机规范规定的区域分为以下 5 个部分: 程序计数器(Program Counter Register):当前线程所执行的字节码的行号指示器,字节码解析器的工作是通过改变这个计数器的值,来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能,都需要依赖这个计数器来完成; Java 虚拟机栈(Java Virtual Machine Stacks):用于存储局部变量表、操作数栈、动态链接、方法出口等信息; 本地方法栈(Native Method Stack):与虚拟机栈的作用是一样的,只不过虚拟机栈是服务 Java 方法的,而本地方法栈是为虚拟机调用 Native 方法服务的; Java 堆(Java Heap):Java 虚拟机中内存最大的一块,是被所有线程共享的,几乎所有的对象实例都在这里分配内存; 方法区(Methed Area):用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译后的代码等数据。
什么是双亲委派模型?
在介绍双亲委派模型之前先说下类加载器。对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立在 JVM 中的唯一性,每一个类加载器,都有一个独立的类名称空间。类加载器就是根据指定全限定名称将 class 文件加载到 JVM 内存,然后再转化为 class 对象。 类加载器分类:启动类加载器(Bootstrap ClassLoader),是虚拟机自身的一部分,用来加载Java_HOME/lib/目录中的,或者被 -Xbootclasspath 参数所指定的路径中并且被虚拟机识别的类库; 其他类加载器:扩展类加载器(Extension ClassLoader):负责加载\lib\ext目录或Java. ext. dirs系统变量指定的路径中的所有类库;应用程序类加载器(Application ClassLoader)。负责加载用户类路径(classpath)上的指定类库,我们可以直接使用这个类加载器。一般情况,如果我们没有自定义类加载器默认就是用这个加载器。双亲委派模型:如果一个类加载器收到了类加载的请求,它首先不会自己去加载这个类,而是把这个请求委派给父类加载器去完成,每一层的类加载器都是如此,这样所有的加载请求都会被传送到顶层的启动类加载器中,只有当父加载无法完成加载请求(它的搜索范围中没找到所需的类)时,子加载器才会尝试去加载类。
说一下类装载的执行过程?
类装载分为以下 5 个步骤: 加载:根据查找路径找到相应的 class 文件然后导入; 检查:检查加载的 class 文件的正确性; 准备:给类中的静态变量分配内存空间; 解析:虚拟机将常量池中的符号引用替换成直接引用的过程。符号引用就理解为一个标示,而在直接引用直接指向内存中的地址; 初始化:对静态变量和静态代码块执行初始化工作。
怎么判断对象是否可以被回收?
一般有两种方法来判断: 引用计数器:为每个对象创建一个引用计数,有对象引用时计数器 +1,引用被释放时计数 -1,当计数器为 0 时就可以被回收。它有一个缺点不能解决循环引用的问题; 可达性分析:从 GC Roots 开始向下搜索,搜索所走过的路径称为引用链。当一个对象到 GC Roots 没有任何引用链相连时,则证明此对象是可以被回收的。
Java 中都有哪些引用类型?
强引用:发生 gc 的时候不会被回收。 软引用:有用但不是必须的对象,在发生内存溢出之前会被回收。 弱引用:有用但不是必须的对象,在下一次GC时会被回收。 虚引用(幽灵引用/幻影引用):无法通过虚引用获得对象,用 PhantomReference 实现虚引用,虚引用的用途是在 gc 时返回一个通知。
说一下 JVM 有哪些垃圾回收算法? (重点)
标记-清除算法:标记无用对象,然后进行清除回收。缺点:效率不高,无法清除垃圾碎片。 标记-整理算法:标记无用对象,让所有存活的对象都向一端移动,然后直接清除掉端边界以外的内存。 复制算法:按照容量划分二个大小相等的内存区域,当一块用完的时候将活着的对象复制到另一块上,然后再把已使用的内存空间一次清理掉。缺点:内存使用率不高,只有原来的一半。 分代算法:根据对象存活周期的不同将内存划分为几块,一般是新生代和老年代,新生代基本采用复制算法,老年代采用标记整理算法。
相关文章:
12JVM基础
五、JVM 17、JVM基础 说一下堆栈的区别? 功能方面:堆是用来存放对象的,栈是用来执行程序的。 共享性:堆是线程共享的,栈是线程私有的。 空间大小:堆大小远远大于栈。队列和栈是什么?有什么区别…...
07 创建型模式-单例模式
1.单例模式介绍 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一,此模式保证 某个类在运行期间,只有一个实例对外提供服务,而这个类被称为单例类。 2.使用单例模式要做的两件事 保证一个类只有一个实例…...
RunnerGo 支持UI自动化的测试平台
RunnerGo提供从API管理到API性能再到可视化的API自动化、UI自动化测试功能模块,覆盖了整个产品测试周期。 RunnerGo UI自动化基于Selenium浏览器自动化方案构建,内嵌高度可复用的测试脚本,测试团队无需复杂的代码编写即可开展低代码的自动化…...
LLM ReAct: 将推理和行为相结合的通用范式 学习记录
LLM ReAct 什么是ReAct? LLM ReAct 是一种将推理和行为相结合的通用范式,可以让大型语言模型(LLM)根据逻辑推理(Reason),构建完整系列行动(Act),从而达成期望目标。LLM ReAct 可以应用于多种语言和决策任务,例如问答、事实验证、交互式决策等,提高了 LLM 的效率、…...
聊聊分布式架构08——SpringBoot开启微服务时代
目录 微服务架构时代 快速入门 入门详解 SpringBoot的自动配置 石器时代:XML配置bean 青铜时代:SpringConfig 铁器时代:AutoConfigurationImportSelector 手写简单Starter SpringApplication启动原理 微服务架构时代 Spring Boot的…...
Vue项目中集成TinyMCE富文本编辑器(图片批量上传等)
TinyMCE富文本在Vue中的使用 关于TinyMCE 实现效果 安装使用TinyMCE 第一步 第二步 1.官网申请Your Tiny API Key,并且配置访问域名: 2.使用css隐藏(这个就不讲了,不推荐使用) 3.全部由本地加载(推荐) 第三步(汉化包) 第四步(封装组…...
前端数据可视化之【title、legend、tooltip、toolbox 】配置项
目录 🌟Echarts配置项🌟Echarts配置项之 title组件🌟Echarts配置项之 legend组件🌟Echarts配置项之 tooltip组件🌟Echarts配置项之 toolbox组件🌟写在最后 🌟Echarts配置项 ECharts开源来自百度…...
microcom串口调试工具使用
microcom串口助手使用介绍 microcom是一个在终端中使用的串口助手,类似平常使用SSCOM一样的东西,不过是在终端中使用而已。 使用的是busybox构建的文件系统 microcom源码路径:busybox/miscutils/microcom.c microcom 参数: [r…...
深入了解Golang:基本语法与核心特性解析
1. 引言 Golang(Go)是谷歌开发的一门开源编程语言,于2007年首次公开亮相,随后在2012年正式发布。Golang以其简洁、高效和可靠的设计而备受开发者青睐。作为一门编译型语言,Golang具有静态类型和垃圾回收功能ÿ…...
短视频矩阵系统源码---php搭建
一、智能剪辑、矩阵分发、无人直播、爆款文案于一体独立应用开发 抖去推----主要针对本地生活的----移动端(小程序软件系统,目前是全国源头独立开发),开发功能大拆解分享,功能大拆解: (1)数据概览&#x…...
mysql 查询表字段名,注释 , 以及sql拼接查询出的内容
#sql查询字段名,注释操作拼接 #查询字段名和注释 select COLUMN_NAME,COLUMN_COMMENT from information_schema.COLUMNS where table_name 表名 and table_schema 库名 order by ordinal_position #查询整个内容 select * from information_schema.COLUMNS wh…...
【JavaEE】_Servlet API
目录 1. HttpServlet 1.1 init方法 1.2 destroy方法 1.3 service方法 1.4 Servlet的生命周期 1.5 代码示例 1.5.1 使用postman构造请求 1.5.2 使用ajax构造请求 2. HttpServletRequest 2.1 核心方法 2.2 代码示例1:打印请求信息 3. 前端给后端传参 3.1…...
macOS下matplotlib如何显示中文字体?
一般要显示中文会使用: plt.rcParams[font.sans-serif][SimHei] #用来正常显示中文标签 plt.rcParams[axes.unicode_minus]False #用来正常显示负号不过在macOS下通常会显示方块字: 解决方案: 把上面两句注释掉,更换为…...
7-Zip怎么设置字典大小 单词大小 固实数据大小,把大文件9.35G压缩成小1.56G
环境: Win10 专业版 7-Zip v23.01 问题描述: 7-Zip怎么设置字典大小 单词大小 固实数据大小,把大文件9.28G压缩成小1.56G 解决方案: 要在7-Zip中设置字典大小、单词大小和固实数据大小,可以按照以下步骤进行操作: 打开7-Zip文件管理器,并导航到你要压缩的文件所在的…...
使用CPR库和Python编写程序
以下是一个使用CPR库和Python编写的爬虫程序,用于爬取。此程序使用了proxy的代码。 import requests from cpr import CPR def get_proxy():url "https://www.duoip.cn/get_proxy"headers {"User-Agent": "Mozilla/5.0 (Windows NT …...
axios 请求的缓存封装
前言 咱们的网站或者程序,每一个页面和操作都需要请求后端接口来获取响应和渲染页面,抛开post请求方式的接口不说,部分get请求得到的数据,短时间内不会更新,或者短时间得到的响应数据不会变化,这个时候就可…...
Oracle性能调优实践中的几点心得
很多的时侯,做OracleDBA的我们,当应用管理员向我们通告现在应用很慢、数据库很慢的时侯,我们到数据库时做几个示例的Select也发现同样的问题时,有些时侯我们会无从下手,因为我们认为数据库的各种命种率都是满足Oracle文…...
勒索病毒最新变种.halo勒索病毒来袭,如何恢复受感染的数据?
引言: 在当今数字化时代,勒索病毒的威胁不断升级,其中.halo勒索病毒引起了广泛关注。本文91数据恢复将深入研究.halo勒索病毒的特点,探讨如何有效地恢复被其加密的数据文件,并分享预防这一威胁的关键措施。 .halo勒索…...
大厂秋招真题【前缀和】美团20230826秋招T5-平均数为k的最长连续子数组
文章目录 【前缀和】美团20230826秋招T5-平均数为k的最长连续子数组题目描述与示例题目描述输入描述输出描述示例输入输出说明 解题思路代码PythonJavaC时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 【前缀和】美团20230826秋招T5-平均数为k的最长连续子数组 题目描…...
bazel远程构建(Remote Execution) --- linux安装Redis
采用源码安装方式 下载地址:Download | Redis,下载最新稳定版本。 step1: 下载最新稳定版本 wget https://download.redis.io/redis-stable.tar.gz step2: 解压安装 tar -xzvf redis-stable.tar.gz cd redis-stable make 执行完 make 命令后&#…...
3分钟速通:Apache Commons FileUpload 2.0如何彻底解决Java文件上传难题?
3分钟速通:Apache Commons FileUpload 2.0如何彻底解决Java文件上传难题? 【免费下载链接】commons-fileupload Apache Commons FileUpload is a robust, high-performance, file upload capability to your servlets and web applications 项目地址: …...
机器学习课程排行榜:数据驱动的学习路径推荐
1. 项目概述:全网机器学习课程排行榜三年前我刚开始学机器学习时,面对网上数百门课程完全无从下手。直到发现这个由真实学习者评价驱动的排名系统,才找到最适合自己的学习路径。这个项目收集了全球主流学习平台上所有机器学习相关课程的用户评…...
缓存金字塔上的红色闪电:Redis 如何借力 CPU 的 L1/L2/L3 与 TLB 飞驰
同样是内存操作,你用 HashMap 做缓存和 Redis 做缓存,吞吐量差了一个数量级。 很多人把原因归结为“Redis 是 C 写的,Java 太‘重’”。 真相远比你想象的更底层——Redis 的每一纳秒加速,都踩在 CPU 的缓存层次、SRAM 与 DRAM 的…...
【2026嵌入式开发生存清单】:VSCode调试适配成功率从41%→98%的关键7项内核级配置(含vsc-extension-host内存泄漏规避方案)
更多请点击: https://intelliparadigm.com 第一章:嵌入式调试适配率跃迁的底层逻辑与2026版VSCode内核演进 现代嵌入式开发正经历一场由调试协议抽象层(DAP v3.2)、LLVM-MI 优化栈和轻量级目标代理(如 probe-rs-debug…...
3步掌握AudioSep音频分离:用自然语言精准提取任何声音
3步掌握AudioSep音频分离:用自然语言精准提取任何声音 【免费下载链接】AudioSep Official implementation of "Separate Anything You Describe" 项目地址: https://gitcode.com/gh_mirrors/au/AudioSep AudioSep是一款革命性的音频分离工具&…...
吊打大模型幻觉!保姆级RAG原理+极简实战代码,新手一秒看懂
吊打大模型幻觉!保姆级RAG原理极简实战代码,新手一秒看懂 前言:拒绝晦涩干货,通俗讲透RAG 很多小伙伴初学大模型的时候,都会遇到一个让人崩溃的问题:AI瞎编乱造! 问它最新技术,它一问…...
CardEditor:桌游卡牌设计的革命性批量生成解决方案
CardEditor:桌游卡牌设计的革命性批量生成解决方案 【免费下载链接】CardEditor 一款专为桌游设计师开发的批处理数值填入卡牌生成器/A card batch generator specially developed for board game designers 项目地址: https://gitcode.com/gh_mirrors/ca/CardEdi…...
YOLOv11-seg改进系列 | 引入MetaFormer TPAMI2024的C3k2_ConvFormer模块,SepConv卷积式Token Mixer替换C3k2,复杂场景分割更稳
YOLOv11-seg改进 | C3k2_ConvFormer卷积式Token混合替换C3k2全流程指南 一、本文简介 1.1 原始 C3k2 的局限性 1.2 C3k2_ConvFormer 的核心改动 1.3 改进前后参数量 / GFLOPs 对比 二、模块原理详解 2.1 层级结构总览 2.2 SepConv:ConvFormer 的 Token Mixer 2.3 MetaFormerBl…...
闲鱼数据猎手:自动化采集系统的智能进化之路
闲鱼数据猎手:自动化采集系统的智能进化之路 【免费下载链接】idlefish_xianyu_spider-crawler-sender 闲鱼自动抓取/筛选/发送系统,xianyu spider crawler blablabla 项目地址: https://gitcode.com/gh_mirrors/id/idlefish_xianyu_spider-crawler-se…...
