收下我的膝盖 阿里架构师编写的668页Java虚拟机笔记真强

LangGraph 持久化:程序退出后接着跑,用 SQLite 跨进程恢复任务 用 SQLite 保存 LangGraph 待审批任务,先退出 Python 进程,再用相同 thread_id 恢复。附完整脚本、实测结果与拒绝、错任务号、内存后端、重复恢复四个反例。 阅读详情

从Java诞生至今已有二十余年,基于虚拟机的技术屏蔽了底层环境的差异,一次编译,随处运行的思想促进了整个IT上层技术应用产生了翻天覆地的变化。Java作为服务端应用语言的首选,确实大大降低了学习和应用的门槛。现实生活中,绝大多数Java程序员对于虚拟机的原理和实现了解并不深入,也似乎并不那么关心。而随着互联网的极速发展,现在的Java服务端应用需要应对极高的并发访问和大量的数据交互,从机制和设计原理上了解虚拟机的核心原理和实现细节显然能够帮助Java程序员编写出更高效优质的代码。

文明需要创造,也需要传承。JVM作为一款虚拟机,本身便是技术之集大成者,里面包含方方面面的底层技术知识。抛开如今Java如日中天之态势不说,纯粹从技术层面看,JVM也值得广大技术爱好者深入研究。可以说,从最新的硬件特性,到最新的软件技术,只要技术为证明是成熟的,都会在JVM里面见到其踪影。JDK的每一-次更新,从内部到核心类库,JVM都会及时引入这些最新的技术或者算法,这便是技术传承意义之所在。随着云计算、大数据、人的发展工智能等最新技术的发展,Java技术生态圈也日益庞大,JVM与底层平台以及与其他编程语言和技术的交互、交织日益深入,这些都离不开对JVM内部机制的深入理解。如果说以前在中间的话件与框架领域的大展身手,依靠的是Java语言层面的特性和技术,那么以后越来越多的技术红利将会因JVM层面之创新而得以显现。

Java从1995年发布以后,已经发展成为一门流行的编程语言。业界也有无数的书介绍Java语言的方方面面。但是,这本书不仅讲解了Java虚拟机的内部实现机制,还深入分析了为什么要这么实现。每一种技术设计的背后,都有其必然性。能够知其然、并知其所以然,才能透过现象看本质,举一反三,实现技术升华。亚飞有多年的Java实践,尤其是在菜鸟网络,需要具备处理很多高并发、大型工程的架构经验,相信他在书中会有更多的视角分享给读者。

全书共十章,下面跟着小编一起来看一下。

目录:

第1章Java虚拟机概述

本章摘要

  • Java语言产生的历史背景
  • 编程语言跨平台的实现
  • 中间语言的实现

第2章Java执行引擎工作原理:方法调用

本章摘要

  • JVM如何进行方法调用
  • JVM如何分配方法栈
  • JVM 如何取指
  • JVM如何执行逻辑运算

第3章Java数据结构与面向对象

本章摘要

  • 数据结构是什么,为什么需要数据结构
  • 数据结构的发展历史以及与算法的关系
  • Java 数据结构的实现机制
  • Java 数据结构——面向对象之技术必然性与偶然性
  • Java 数据结构的字节码格式分析
  • 大端与小端

第4章Java字节码实战

本章摘要

  • Java字节码的二进制格式
  • Java字节码的魔数与版本
  • Java字节码的常量池
  • Java字节码的类继承
  • Java字节码的字段存储
  • Java字节码的方法格式

第5章常量池解析

本章摘要

  • Java字节码常量池的内存分配链路
  • oop-klass模型
  • 常量池的解析原理

第6章类变量解析

本章摘要

  • Java类变量解析的原理
  • 计算机基础——偏移量 与内存对齐
  • Java类与字段的对齐与补白
  • Java字段的继承机制
  • 使用HSDB查看运行时的Java类结构

第7章Java栈帧

本章摘要

  • entry_ point 例程
  • 局部变量表创建的机制
  • 堆栈与栈帧的概念
  • JVM栈帧创建的详细过程
  • slot大小到底是多大
  • slot复用
  • 操作数栈复用与深度

第8章类方法解析

本章摘要

  • Java方法签名解析
  • Java方法的code属性解析
  • LVT与LVTT
  • method创建
  • Java方法的字节码指令解析
  • <clini>0方法与<iniD>方法
  • 使用HSDB查看运行时的字节码指令
  • vtable的概念与机制

第9章执行引擎

本章摘要

  • JVM的取值与译码机制
  • 栈顶缓存原理
  • 操作数栈与栈帧重叠技术
  • JVM指令集特点与实现

第10章类的生命周期

本章摘要

  • 类的生命周期
  • 类加载的内部实现及触发
  • 类的初始化
  • 类加载器的本质
  • 类实例分配

     

名家推荐:

图谱后端选型:Memgraph vs Neo4j vs 嵌入式 SQLite,什么时候该切换? 本文通过脚本自动探测代码图谱规模,对比SQLite、Memgraph与Neo4j在不同节点量级下的性能表现。实测表明:10万节点内嵌入式SQLite凭借低延迟和轻量部署仍具竞争力;超15万节点后,Memgraph适合低延迟、高并发场景;而Neo4j仅在百万级图谱且需复杂查询时才具备优势。配套提供一键测试延迟与平滑迁移后端的Python工具链,实现按需选型与无缝切换。 阅读详情

相关推荐

Windows Server双机热备实战:用IIS+ARR+NLB搭建高可用Web服务(附避坑指南)

本文详细介绍了在Windows Server环境下,利用IIS、ARR(Application Request Routing)和NLB(Network Load Balancing)构建高可用Web服务的实战方案。通过双机热备架构,实现从网络层到应用层的全面冗余与智能流量分发,并提供了关键的配置步骤、常见避坑指南及性能调优建议,确保企业级Web服务的连续性与可靠性。

weixin_29210759的博客 388

收下我的膝盖!阿里架构师编写的668页Java虚拟机笔记真强

可以说,从最新的硬件特性,到最新的软件技术,只要技术为证明是成熟的,都会在JVM里面见到其踪影。随着云计算、大数据、人的发展工智能等最新技术的发展,Java技术生态圈也日益庞大,JVM与底层平台以及与其他编程语言和技术的交互、交织日益深入,这些都离不开对JVM内部机制的深入理解。而随着互联网的极速发展,现在的Java服务端应用需要应对极高的并发访问和大量的数据交互,从机制和设计原理上了解虚拟机的核心原理和实现细节显然能够帮助Java程序员编写出更高效优质的代码。添加图片注释,不超过 140 字(可选)

m0_63437643的博客 850

星光、黑光、全彩夜视摄像头技术解析与实战选型指南

本文深入解析了星光、黑光、全彩与红外等主流夜视摄像头技术的工作原理与核心差异。针对不同监控场景与预算,提供了实战选型指南,帮助用户在安防项目中做出明智决策,实现夜间监控效果最大化。

weixin_29179311的博客 352

从零学 JVM(一):什么是 JVM?JVM、JDK、JRE 有什么区别?

JVM(Java虚拟机)是执行Java字节码的运行环境,负责类加载、字节码执行与内存管理。Java通过javac编译为平台无关的字节码,由各平台的JVM解释或即时编译执行,实现“一次编译,到处运行”的跨平台特性。JVM并非跨平台,但其规范支持多种语言(如Kotlin、Scala)编译为字节码运行。JDK包含JRE,JRE包含JVM,三者构成完整的开发与运行体系。Java采用编译+解释+JIT优化的混合执行机制,兼顾启动速度与运行效率。

2403_87560480的博客 282

MATLAB实战:用ARMAX模型搞定电力系统惯量实时评估(附完整代码)

本文详细介绍了如何利用MATLAB中的ARMAX模型实现电力系统惯量的实时评估。通过系统辨识技术,结合电力系统的动态特性,提供从数据预处理、模型辨识到实时评估的全流程实战指南,并附完整代码。ARMAX模型在新能源高渗透率电网中展现出显著优势,误差较传统方法降低50%以上。

b9c0d的博客 400

【从零到一】Jetson Nano上YOLOv5部署完全攻略:零基础小白也能玩转边缘AI推理

文章摘要: 本文详细介绍了在Jetson Nano边缘设备上部署YOLOv5目标检测模型的完整流程。从硬件准备、系统镜像烧录、基础环境配置,到CUDA/cuDNN验证、Python虚拟环境搭建及PyTorch安装,逐步指导开发者完成部署准备。教程兼顾理论原理与实践操作,提供Python和C++两种实现方案,并涵盖TensorRT优化、实时检测等生产级应用场景,帮助零基础开发者快速掌握边缘AI推理技术,实现高性能目标检测应用。

LXY_LOVE36的博客 370

内存数据库SQLite

本文以“黑板”比喻内存数据库,对比传统硬盘数据库,详解 SQLite 使用 :memory: 实现高速临时存储的原理与优势。通过动态占位符生成、executemany 批量操作等技巧,实现毫秒级数据读写,适用于单元测试、临时计算与隐私保护场景。强调其瞬时性与内存限制,提醒开发者注意数据量控制与安全防护,突出参数化查询防注入的核心价值。

看了都说刑的博客 352

【Embabel Agent】生产级最佳实践与避坑指南

本文围绕架构师最关心的 8 大维度展开:测试策略(FakeOperationContext 实现 Action 级单元测试、Prompt 质量与敏感信息校验)、MCP 集成实战(STDIO/HTTP 双模式、自建 Server、Docker MCP 生态)、RAG 检索增强、OpenTelemetry 全链路可观测性与追踪、Docker/K8s 生产部署、API Key 管理与 @Tool 安全防护、模型选择/缓存/并行等性能优化,以及过度依赖 LLM、忽略错误处理等 8 大常见反模式避坑指南。

program哲学 311

从零学 JVM(七):垃圾收集器详解——Serial、ParNew、Parallel、CMS 与 G1

垃圾收集器是JVM中实现垃圾回收算法的具体组件,负责执行内存回收。JDK 8常见收集器包括Serial、ParNew、Parallel Scavenge、CMS等,各有侧重:Serial单线程,适合小内存;ParNew多线程并行,常与CMS搭配;Parallel Scavenge注重吞吐量,支持自适应调节;CMS以低停顿为目标,采用并发标记-清除,但存在内存碎片和浮动垃圾问题。理解并行(多线程协同)与并发(与应用共行)的区别,有助于选择合适收集器。

2403_87560480的博客 156

基于YOLOv11的仓库机器人导航系统设计与实现:Amazon Robotics Challenge解决方案

本文将详细介绍一个基于YOLOv11目标检测算法的仓库机器人导航系统,该系统能够准确识别托盘(pallet)和箱子(box),为机器人提供精确的导航信息。而基于深度学习的视觉导航系统能够实时识别环境中的关键物体,如托盘和箱子,从而实现更智能的路径规划和货物搬运。YOLOv11作为YOLO系列的最新演进版本,在检测精度和速度上都有显著提升,非常适合仓储环境中的实时物体检测任务。YOLOv11在保持实时性的同时,提高了对小物体和密集物体的检测能力,这对仓储环境中的托盘和箱子检测尤为重要。

YOLO 304

CloudCompare 和 PCL:点云网格化分析与处理

点云网格化是将点云数据转化为规则网格的过程,其主要思想是将离散的点云投影到一个平面上,然后对该平面进行划分,形成一系列小区域。在点云网格化方面,PCL 提供了各种算法和工具,可以实现高效的点云网格化操作。以上示例代码中,首先加载了输入的点云数据,然后通过设置合适的网格化算法参数,如搜索半径和最大三角形边长等,执行了网格化操作,最后将网格化结果保存到输出文件中。以上示例代码中,首先加载了输入的点云数据,然后通过设置合适的网格化参数,如分辨率等,执行了网格化操作,最后将网格化结果保存到输出文件中。

TechPulseZ的博客 1294

从零学 JVM(六):垃圾回收算法详解——标记清除、标记复制与标记整理

JVM 采用多种垃圾回收算法应对内存管理挑战。标记-清除算法实现简单但易产生碎片;标记-复制算法避免碎片,适合存活率低的新生代;标记-整理算法通过移动对象消除碎片,适用于高存活率的老年代。为提升效率,JVM 采用分代收集思想:新生代用复制算法(如 Eden 与 Survivor 配合),老年代用标记-整理或清除。不同收集器(如 Serial、G1)结合算法特点,平衡性能与内存利用率,实现高效垃圾回收。

2403_87560480的博客 149

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

从零学 JVM(三):Java 对象是如何创建的?从 new 到对象初始化

本文以 HotSpot JVM 为例,详解 new User("Tom") 的完整创建过程:先进行类加载检查,再分配内存(指针碰撞或空闲列表),随后零值初始化,设置对象头,执行实例初始化 <init>(),最后返回引用。对象在堆中由对象头、实例数据和对齐填充三部分构成。为保证线程安全,JVM 采用 CAS 重试或 TLAB(线程本地分配缓冲区)机制,避免多线程竞争导致的内存分配冲突。

2403_87560480的博客 242

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

JVM中的GC垃圾回收器

同时,引入ZGC:可伸缩的低延迟垃圾回收器(Experimental)。删除CMS垃圾回收器,并弃用Parallel Scavenge和Serial Old的组合。1999年随JDK1.3.1一起来的是串行方式的Serial GC,它是第一款GC。有了虚拟机,就一定需要收集垃圾的机制,这就是Garbage Collection,对应的产品称为Garbage Collector。2018年3月,JDK 10中G1垃圾回收器的并行完整垃圾回收,实现并行性来改善最坏情况下的延迟。2020年9月,JDK15发布。

记录一点 407

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

当 LLM 遇上 JVM:一个把自主性给满,一个把自主性收回

本文剖析阿里AgentScope Java与Rod Johnson主导的Embabel在JVM上对“下一步由谁决定”的根本分歧:前者让LLM自主决策,后者由代码规划器(GOAP/A*)确定流程。这一分歧衍生出四大维度差异:类型安全——Embabel以类型驱动编排,实现编译期校验;编程手感——AgentScope更自然,Embabel需显式定义动作;企业能力——Embabel支持可预测、可审计的确定性流程;可测试性——Embabel因控制流固定而易于单元测试。二者非优劣之分,而是面向不同场景的哲学选择。

cause的博客 289

DeepSeek总结的 SQLite 某些 double 值的最后一位与 Python 不同

2 不能整除 10,所以转换是混乱的。然而,在这种情况下,由于它是完美的 2 的幂,那个舍入残留实际上是正确的。但你必须理解,超过第 15 位小数,对于这些特定数字来说,更多的是副作用,而不是预期行为。归根结底,你在这里看到的差异最直接地可以称为 SQLite 的“错”,因为它不同,但它以一种聪明的方式不同——至少是一种主要面向人类而非计算机的聪明方式。而且,如果作为开发者的你试图使用已转换为十进制字符串的数字进行数学运算,那是更大的错。据你所知,它们存储的是完全相同的值,只是打印例程输出它们的方式不同。

l1t的专栏 451

Mandate持久化实测:nonce落盘之后,进程重启再也撕不开重放窗口

Mandate授权系列第⑦篇,直接修上一篇发现的最大残留风险。上一篇实测:nonce缓存只在内存,进程重启后窗口期内逐字节重放成功。本篇把nonce、Mandate、revoke三类安全状态落盘SQLite,重跑攻击:重启后重放被拒(R1)、Mandate重载验签有效且越界仍拦(R2)、revoke重启后仍生效(R3),内存版对照重启后重放照样成功(R4)。安全状态的生命周期必须覆盖进程的生命周期。

weixin_39885962的博客 514

ERP单据已作废为什么商品仍不能删除,引用检查与软删除怎么查

ERP销售单作废后,商品引用仍可能保留。本文用真实Store和内存SQLite对照无引用、草稿引用及作废引用,核对删除确认、deleted标记和列表过滤范围。

qq_52097248的博客 337

ThreadLocal 搭配线程池为什么会造成内存泄漏?

清理,属于“被动清理”,并不能保证及时回收。这类问题在用户身份、租户 ID、事务上下文、链路追踪 ID 等场景中后果非常严重,排查起来也远比 OOM 困难。,对应的 value 就会一直无法被回收,最终表现为内存泄漏,甚至引发脏数据串号问题。所以线程池不是“制造”了泄漏,而是把原本短暂的持有时间拉长成了“与线程同寿命”。线程池中的核心线程会被长期复用、几乎不会销毁,于是挂在。在“一个请求一个线程”的传统模型里,线程执行完任务就结束,,同时警惕线程复用带来的数据串号风险。只要线程活着,这条链就断不了。

2603_95090839的博客 196

Java多线程(7):异步编程详解——Future、CompletableFuture与任务编排

前面的文章已经介绍过线程池、JUC 同步工具、CAS 与原子类,以及锁机制。一个请求需要调用多个服务,部分调用可以并行执行,部分调用又依赖前一个调用的结果,如何组织这些异步任务?以订单详情为例,需要查询用户、价格、库存和推荐内容。其中用户、价格、库存互不依赖;推荐内容则依赖用户信息。线程池解决了任务由谁执行,Future提供了异步结果的获取方式;本篇进一步学习如何在任务完成后自动处理结果、表达任务依赖和汇总多个结果。前文已经介绍过FutureTask,这里不重复线程池参数及其内部实现。本文以JDK 8。

作为一个长者,有必要记录下人生经验 392

Teamcenter性能调优实战:数据库索引、JVM 参数、日志分析与瓶颈定位

本文系统阐述Teamcenter性能调优实战方法,涵盖数据库调优(慢查询分析、索引优化、查询改写)、JVM参数配置(堆内存、GC策略)、日志分析与瓶颈定位。遵循“测量→定位→优化→验证”流程,强调一次仅改一个变量、持续监控,结合Oracle/PostgreSQL数据库及G1 GC最佳实践,提升系统响应效率,保障高并发下稳定运行。

软件工程师文艺 87

从零学 JVM(二):JVM 运行时数据区详解——堆、栈、方法区、程序计数器

JVM运行时数据区将内存划分为线程私有(程序计数器、虚拟机栈、本地方法栈)和线程共享(堆、方法区)两大类。其中,虚拟机栈管理方法调用的栈帧,局部变量表与操作数栈是核心组成;堆用于存储对象实例,是GC主要区域;程序计数器记录字节码执行位置,不会发生内存溢出。理解各区域作用有助于掌握内存管理机制与常见异常(如StackOverflowError、OutOfMemoryError)成因。

2403_87560480的博客 363

【JVM 底层修炼记】垃圾回收的“基石”:标记-清除、复制与标记-整理算法到底好在哪?

本文深入解析垃圾回收的三大核心算法。对比了标记-清除算法的内存碎片痛点,剖析了专为新生代设计的复制算法(Eden与Survivor机制)的高效与空间优化,最后讲解了老年代稳健的标记-整理算法,带你理清 JVM 内存回收的底层基石。

qq_59239723的博客 95
上一篇: 在程序员论坛花了368元买了份网盘资源!看完感觉自己太年轻了
下一篇: 策略模式:【利于扩展,消除if的模式】
Java技术那些事儿
博客等级 码龄5年 2306粉丝 2584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值