java虚拟机2

news2025/7/20 22:41:04

 

一、垃圾回收机制(GC)

 

1. 回收区域:GC主要回收堆内存区域。堆用于存放new出来的对象 。程序计数器、元数据区和栈一般不是GC回收的重点区域。

2. 回收单位:GC以对象为单位回收内存,而非字节。按对象维度回收更简便,若按字节维度则需详细描述对象各部分是否回收,较为复杂。

3. 对象存活判定 - 可达性分析:Java通过可达性分析判定对象是否可被回收。从GC roots(如栈上的局部变量、常量池里指向的对象、元数据区的静态成员等)开始扫描,能被访问到的对象标记为可达,不可达的对象则可被回收。如在构建二叉树的代码示例中,通过改变引用关系可使某些对象变得不可达从而可被回收 。

4. 回收算法

- 标记 - 清除:先标记可回收对象,再直接释放其内存。优点是简单直接,缺点是会产生内存碎片。

- 复制:将存活对象复制到另一块空间,然后释放原空间。可解决内存碎片问题,但存在内存浪费,且复制开销大,尤其在存活对象多的情况下。

- 标记 - 整理:先标记可回收对象,然后将存活对象向一端移动,再释放边界外的内存。能解决内存碎片问题,也避免复制算法的内存浪费,但搬运对象成本较高。

- 分代回收:将堆空间分为新生代和老年代。新生代对象生命周期短,多采用复制算法,新创建对象放伊甸区,经过GC存活的对象进入幸存区,多次GC后仍存活的对象进入老年代。老年代对象生命周期长,采用标记 - 清除或标记 - 整理算法 。涉及minor GC(新生代高频回收)、major GC(老年代低频回收)和Full GC(整堆回收) 。

 

二、类加载机制

 

1. 类加载流程

- 加载:找到并读取.class文件内容到内存,构建类对象。

- 验证:校验读取内容的合法性。

- 准备:为类对象分配未初始化的内存空间,静态成员赋默认值。

- 解析:初始化常量并加载到内存。

- 初始化:执行类的静态代码块,对静态成员真正初始化 。

2. 触发类加载时机:懒汉模式下,类在第一次被使用时触发加载,如构造实例、调用静态方法、使用静态成员等情况 。

3. 双亲委派模型

- 类加载器:JVM自带Bootstrap ClassLoader(负责标准库查找)、Extension ClassLoader(负责扩展库查找)、Application ClassLoader(负责第三方库和当前项目查找) 。

- 模型过程:类加载时,先由子类加载器将请求委派给父类加载器,父类加载器依次向上查找,直至Bootstrap ClassLoader。若父类加载器未找到类,才由子类加载器尝试加载。如加载java.lang.String类由Bootstrap ClassLoader负责,加载自定义的com.bit.Test类则按层级查找 。该模型确保标准库优先加载,也可被打破,程序员可自定义类加载器 。

 

三、相关对比与补充

 

- 与C/C++内存管理对比:C/C++申请内存需手动释放,易因遗忘释放导致内存泄露。Java等语言引入GC自动管理内存,提高开发效率。C/C++未引入GC是因设计理念注重与C兼容及极致性能,引入GC会增加运行时开销影响性能 。

- GC对执行效率影响:触发GC时可能出现stop the world(STW)问题,即暂停其他工作线程,影响程序执行效率 。

 

四、以下是从图片中提取的部分关键代码示例:

 

// 二叉树构建示例

class Node {

    Node left;

    Node right;

}

Node build() {

    Node a = new Node();

    Node b = new Node();

    Node c = new Node();

    Node d = new Node();

    Node e = new Node();

    Node f = new Node();

    Node g = new Node();

    a.left = b;

    a.right = c;

    b.left = d;

    b.right = e;

    e.left = g;

    c.right = f;

    return a;

}

Node root = build();

// 后续可通过改变引用关系使某些对象不可达,如:

// root.right.right = null; 使f不可达

// root.right = null; 使c和f不可达

 

 

// 类加载时机相关示例

class Test {

    static int n = 10;

    // 当使用Test类的静态成员n,或构造Test实例,或调用Test的静态方法时,会触发类加载

}

 

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

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

相关文章

Pydantic 学习与使用

Pydantic 学习与使用 在 Fastapi 的 Web 开发中的数据验证通常都是在使用 Pydantic 来进行数据的校验,本文将对 Pydantic 的使用方法做记录与学习。 **简介:**Pydantic 是一个在 Python 中用于数据验证和解析的第三方库,它现在是 Python 使…

PCB设计教程【入门篇】——电路分析基础-基本元件(二极管三极管场效应管)

前言 本教程基于B站Expert电子实验室的PCB设计教学的整理,为个人学习记录,旨在帮助PCB设计新手入门。所有内容仅作学习交流使用,无任何商业目的。若涉及侵权,请随时联系,将会立即处理、 目录 前言 1.二极管 1.发光…

能按需拆分 PDF 为多个文档的工具

软件介绍 彩凤 PDF 拆分精灵是一款具备 PDF 拆分功能的软件。 功能特点 PDF 拆分功能较为常见,很多 PDF 软件都具备,例如 DC 软件提取 PDF 较为方便,但它不能从一个 PDF 里提取出多个 PDF。据印象,其他 PDF 软件也似乎没有能从…

Apifox 5 月产品更新|数据模型支持查看「引用资源」、调试 AI 接口可实时预览 Markdown、性能优化

Apifox 新版本上线啦! 看看本次版本更新主要涵盖的重点内容,有没有你所关注的功能特性: 自动解析 JSON 参数名和参数值调试 AI 接口时,可预览 Markdown 格式的内容性能优化:新增「实验性功能」选项 使用独立进程执行…

LiveGBS海康、大华、宇视、华为摄像头GB28181国标语音对讲及语音喊话:摄像头设备与服务HTTPS准备

LiveGBS海康、大华、宇视、华为摄像头GB28181国标语音对讲及语音喊话:摄像头设备与服务HTTPS准备 1、背景2、准备工作2.1、服务端必备条件(注意事项)2.2、语音对讲设备准备2.2.1、大华摄像机2.2.2、海康摄像机 3、开启音频并开始对讲4、相关问…

Sqlalchemy 连mssql坑

连接失败: (pyodbc.OperationalError) (08001, [08001] [Microsoft][ODBC Driver 17 for SQL Server]SSL Provider: [error:0A00014D:SSL routines::legacy sigalg disallowed or unsupported] (-1) (SQLDriverConnect)) (Background on this error at: https://sqlalche.me/e/…

LLaMaFactory - 支持的模型和模板 常用命令

一、 环境准备 激活LLaMaFactory环境,进入LLaMaFactory目录 cd LLaMA-Factoryconda activate llamafactory 下载模型 #模型下载 from modelscope import snapshot_download model_dir snapshot_download(Qwen/Qwen2.5-0.5B-Instruct) 二、启动一个 Qwen3-0.6B…

大模型深度学习之双塔模型

前言 双塔模型(Two-Tower Model)是一种在推荐系统、信息检索和自然语言处理等领域广泛应用的深度学习架构。其核心思想是通过两个独立的神经网络(用户塔和物品塔)分别处理用户和物品的特征,并在共享的语义空间中通过相…

瑞数6代jsvmp简单分析(天津电子税x局)

国际惯例 今天帮朋友看一个gov网站的瑞数加密(天津电子税x局) 传送门(登陆入口界面) 瑞数6特征 1.服务器会发两次包,第一次响应状态码为412,第二次响应状态码为200。 2.有三重debugger,其中有…

榕壹云物品回收系统实战案例:基于ThinkPHP+MySQL+UniApp的二手物品回收小程序开发与优化

摘要:本文深入解析了一款基于ThinkPHPMySQLUniApp框架开发的二手物品回收小程序——榕壹云物品回收系统的技术实现与商业价值。通过剖析项目背景、核心技术架构、功能特性及系统优势,为开发者与潜在客户提供全面的参考指南,助力资源循环利用与…

《软件工程》第 9 章 - 软件详细设计

目录 9.1 详细设计的任务与过程模型 9.2 用例设计 9.2.1 设计用例实现方案 9.2.2 构造设计类图 9.2.3 整合并优化用例实现方案 9.3 子系统设计 9.3.1 确立内部设计元素 9.3.2 导出设计类图 9.4 构件设计 9.5 类设计 9.5.1 精化类间关系 9.5.2 精化属性和操作 9.5.…

WebVm:无需安装,一款可以在浏览器运行的 Linux 来了

WebVM 是一款可以在浏览器中运行的Linux虚拟机。不是那种HTMLJavaScript模拟的UI,完全通过HTML5/WebAssembly技术实现客户端运行。通过集成CheerpX虚拟化引擎,可直接在浏览器中运行未经修改的Debian系统。 Stars 数13054Forks 数2398 主要特点 完整 Lin…

王树森推荐系统公开课 排序06:粗排模型

shared bottom 表示神经网络被所有特征共享。精排模型主要开销在神经网络,神经网络很大且很复杂。 每做一次推荐,用户塔只做一次推理。物品塔存放入向量数据库。 后期融合模型常用于召回,前期融合模型常用于精排。 物品塔短时间内比较稳…

PH热榜 | 2025-05-29

1. Tapflow 2.0 标语:将你的文档转化为可销售的指导手册、操作手册和工作流程。 介绍:Tapflow 2.0将各类知识(包括人工智能、设计、开发、营销等)转化为有条理且可销售的产品。现在你可以导入文件,让人工智能快速为你…

【Node.js】部署与运维

个人主页:Guiat 归属专栏:node.js 文章目录 1. Node.js 部署概述1.1 部署的核心要素1.2 Node.js 部署架构全景 2. 传统服务器部署2.1 Linux 服务器环境准备系统更新与基础软件安装创建应用用户 2.2 应用部署脚本2.3 环境变量管理2.4 Nginx 反向代理配置2…

【Java Web】速通JavaScript

参考笔记:JavaWeb 速通JavaScript_javascript 速通-CSDN博客 目录 一、JavaScript快速入门 1. 基本介绍 2. JavaScript特点 3. JavaScript的引入方式(重要) 3.1 写在script标签中 ​​​​​3.2 以外部文件方式引入 二、JS的数据类型 1. 变量 2. 常用数据类型 3.特殊值 三、…

TDengine 运维——巡检工具(安装前预配置)

背景 TDengine 的安装部署对环境系统有一定的依赖和要求,安装部署前需要进行环境预配置操作,本文档旨在说明安装前预配置工具在安装 TDengine 前对环境的预配置内容和工具的使用方法。 预配置工具使用方法 工具支持通过 help 参数查看支持的语法 Usa…

RDS PostgreSQL手动删除副本集群副本的步骤

由于PostgreSQL不支持直接删除副本集群,而是需要先将副本集群升级到主实例(区域集群),然后在逐一将写入器实例删除,然后才可以删除副本集群 查看现有的主从实例集群 将副本集群提升到区域集群 选择副本集群–>操作–>提升 提升只读副本…

MySQL 自增主键重置详解:保持 ID 连续性

目录 前言正文 前言 爬虫神器,无代码爬取,就来:bright.cn Java基本知识: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRUD的功能整理(持续更新&#xff09…

国产化Word处理控件Spire.Doc教程:通过Java简单快速的将 HTML 转换为 PDF

在处理 HTML 文件时,你可能会发现它们在不同的浏览器和屏幕尺寸下的显示效果并不一致。而将 HTML 转换为 PDF 则可以有效地保留其布局和格式,从而确保内容在不同设备和平台上的呈现保持一致。本文将介绍如何在 Spire.Doc for Java 的帮助下通过 Java 将 …