【JavaSE】简单理解JVM

【JavaSE】简单理解JVM

目录

一、JVM内存区域划分

JVM:java虚拟机,是仿照真实的操作系统进行设计的。真实操作系统中,对于进程的地址空间是进行了区域划分的。JVM也就仿照此,也进行了区域划分的设计。

具体划分(四个核心区域):

  1. 程序计数器:一个很小的区域,只用来记录当前指令执行到哪个地址。
  2. 元数据区:保存当前类被加载好的数据(类对象 .class),Java8之前叫方法区。
  3. 栈:保存方法的调用关系。
  4. 堆:保存 new 的对象。这句代码:Test t = new Test() 代码中new Test()一定在堆中,t 是局部变量就在栈;t 是成员变量就在堆; t 是一个静态成员变量就在元数据区。

二、类加载机制

2.1 类加载的步骤

类加载的步骤:

  1. 加载:找到 .class 文件 ,根据类的全限定名(包名+类名),打开文件,读取文件内容读到内存中;
  2. 连接:
    2.1. 验证:解析,校验 .class文件的内容是否合法,并把合法内容转成结构化的数据
    2.2. 准备:给类对象申请内存空间(此处相当于全0的空间);
    2.3. 解析:针对字符串常量,进行初始化;(将 .class文件解析出的字符串常量,放到元数据区,常量池中);
  3. 初始化:将类对象进行初始化。

2.2 双亲委派模型

双亲委派模型:描述类加载中,根据全限定类名,找到.class 文件的过程。

类加载器:JVM中专门的模块,负责类加载。JVM默认提供三种类加载器(存在父子关系,1是爷,2是爸,3室儿):

  1. BootstrapClassLoader:找Java标准库的目录
  2. ExtensionClassLoader:找Java扩展库的目录
  3. ApplicationClassLoader:第三方库和当前项目的目录

过程:

  • 进行类加载的时候,通过全限定类名找.class文件时,先从ApplicationClassLoader作为入口,然后把加载类的任务交给父亲 ExtensionClassLoader,他又先给他的父亲 BootstrapClassLoader,然后 BootstrapClassLoader找Java标准库范围,找到了就加载,没找到就抛回给儿子 ExtensionClassLoader,同理进行。最后 ApplicationClassLoader都没找到,就抛出异常。

三、垃圾回收机制 (GC)

Java中释放内存(主要是针对堆上的对象)的手段。
在c语言中手动申请的内存需要手动释放,而Java引入GC会自动识别,某个内存后续是否还会使用,自动释放。

工作过程:

  1. 找到垃圾
  2. 释放垃圾

找到垃圾:
有两个方案,引用计数和可达性分析,Java采取的是可达性分析。

  1. 引用计数:给每一个对象在new的时候,搭配上一个小的内存空间,保存一个整数,表示指向这个对象的引用个数。
    1.1. 每次进行引用赋值的时候都会触发引用计数的修改,当计数为0的时候,这个对象就是垃圾了。
    1.2. 缺陷:内存消耗更多,可能出现循环引用(两个对象互相引用,引用变空,但是计数不会变为0)的问题。
  2. 可达性分析:用时间换空间,是一个周期性的过程,每隔一段时间,触发一次。
    2.1. 以代码中的一些特定对象(栈上的局部变量(引用类型的)、常量池引用指向的对象、静态成员(引用类型)),作为遍历的起点。
    2.2. 以这些特殊对象为起点,尽可能去遍历,判断某个对象是否能访问到。
    2.3. 每一次访问到一个对象,就把这个对象标记成可达,当完成所有的对象,未被标记的就是垃圾。

释放垃圾:

  • 标记 - 清除:把垃圾对象的内存直接进行释放。
    • 缺点:会产生内存碎片问题(回收后导致内存空间不连续)
  • 复制算法:一片内存空间,一分为二,一次只使用其中一半。当垃圾回收的时候,先将不是垃圾的内存复制到另一半没使用的内存中,再将这一半整体释放掉。
    • 缺点:内存空间利用率低,一旦不是垃圾的对象很大,复制的成本就很高。
  • 标记 - 整理:类似于顺序表删除数据操作,将不是垃圾的内存向前移动,最后回收后面一片的内存。
    • 缺点:内存搬运数据的成本很高。
  • 分代回收:把上面的三种方式结合起来,主要是2和3。Java给的策略。
    • ”代” - 》指代对象经历的GC轮次(先将内存分为 新生代区 和 老年代区),初始为0,经一轮GC后就加1;如果一个对象的轮次已经很大了,那么大概率还会存在很久。对轮次大的对象,GC的频率就会降低。
    • 进一步会将新生代分为 伊甸区 和两个幸存区,比例大概8:1:1。
    • 新创建的对象放入伊甸区,大部分伊甸区的对象熬不过第一轮GC,熬过去了就通过 复制算法 进入一个幸存区;
    • 一个幸存区的对象又熬过一轮GC就会通过 复制算法 进入另一个幸存区,反复跳跃
    • 如果一个对象在幸存区经历了多轮GC,就会晋升到老年代区。
    • 老年代区就使用的标记 - 整理 回收机制。
    • 如果一个对象特别大,直接进入老年代区。

Read more

Anthropic 最近经济指数报告 202603 解读——人工智能对劳动力市场的影响的初步证据

Anthropic 最近经济指数报告 202603 解读——人工智能对劳动力市场的影响的初步证据

划重点 * Anthropic引入了一种衡量人工智能替代风险的新指标——观测暴露度,该指标结合了理论上的大语言模型能力与实际使用数据,并更侧重于自动化(而非增强型)以及与工作相关的应用场景。 * 人工智能远未达到其理论能力:实际覆盖率仅为理论可行范围的一小部分。 * 美国劳工统计局预测,到2034年,观测暴露度较高的职业,其就业增长将相对较慢。暴露度最高职业中的从业者,更可能是年龄较大、女性、受教育程度较高且收入较高的群体。 * Anthropic发现,自2022年底以来,高暴露度工人的失业率并未出现系统性上升,但有初步证据表明,在暴露度较高的职业中,年轻工人的招聘速度有所放缓。 引言 人工智能的快速普及正引发大量研究,试图衡量和预测其对劳动力市场的影响。然而,过往研究方法的记录提醒我们应保持谦逊。不要慌张,不要烧包,不要踩踏,既不要盲信“2028人工智能替代导致经济危机”,也要理性看待已经在海平面上涌现的这波AI技术浪潮。 Anthropic基于其公布的经济指数,不同于去年下半年着重讨论不同地区和不同行业的AI采用率或自动化程度,在本文中,Anthropic开始讨论

By Ne0inhk
Vibe Coding范式实战:用AI工具链(Stitch+Figma+ai studio+Trae)快速开发全栈APP

Vibe Coding范式实战:用AI工具链(Stitch+Figma+ai studio+Trae)快速开发全栈APP

文章目录 * 概要 * stitch制作设计稿 * figma 原型展示 * ai studio 生成前端代码 * 基于trae + Supabase生成后端代码和数据库 * Github + vercel * pc端后台管理系统设计 概要 在 AI 技术深度渗透软件开发领域的当下,一种名为 “Vibe Coding”(氛围编程)的全新范式正在重塑开发者的工作方式。它的核心在于,开发者不再是逐行编写代码的 “码农”,而是通过自然语言描述意图、引导 AI 生成代码的 “创意引导者” 和 “结果验证者”,从而将精力聚焦于更高价值的产品设计和逻辑思考上。 本文提供一种 Vibe Coding 的工作模式:设计阶段以 Google Stitch 为起点,开发者通过文本或草图快速生成响应式 UI 设计与前端代码,再无缝导入 Figma 进行精细化视觉调整和原型设计,实现了从 “想法” 到

By Ne0inhk
OpenClaw 保姆级超详细教程:小白也能轻松上手的 AI 智能体

OpenClaw 保姆级超详细教程:小白也能轻松上手的 AI 智能体

本教程基于官方最新文档、社区博客实战指南优化编写,覆盖从架构理解、环境准备、安装配置、渠道接入到日常使用、安全加固、故障排查的全流程,重点补充国内用户适配方案、新手避坑指南、全场景问题排查,新手跟着步骤走,20 分钟即可跑通最小可用闭环。 前置快速通关路径(20 分钟极速体验) 如果你只想最快跑通核心流程,直接按以下 4 步操作,无需提前阅读全文,后续可回头补全细节: 1. 一键安装:macOS/Linux/WSL2 终端执行 curl -fsSL https://openclaw.ai/install.sh | bash;Windows 管理员 PowerShell 执行 iwr -useb https://openclaw.ai/install.ps1 | iex 2.

By Ne0inhk
本地离线部署AI大模型:OpenClaw + Ollama + Qwen3.5:cloud/Qwen3:0.6b 超详细教程(无需GPU)

本地离线部署AI大模型:OpenClaw + Ollama + Qwen3.5:cloud/Qwen3:0.6b 超详细教程(无需GPU)

前言 随着开源大模型越来越成熟,我们完全可以在自己电脑上本地运行AI,不联网、不上传数据、免费使用,隐私性极强。 今天这篇文章,我会一步步带你完成:Ollama + Qwen3.5:cloud(主力模型)+ Qwen3:0.6b(轻量备选)+ OpenClaw 的本地部署,实现一个属于自己的本地聊天AI,兼顾效果与低配置适配。 一、项目介绍 本项目实现本地离线运行阿里通义千问系列大模型(Qwen3.5:cloud 主力模型 + Qwen3:0.6b 轻量备选模型),全程不需要云端API,不需要高性能显卡,普通电脑就能跑,可根据自身电脑配置选择对应模型。 用到的工具: * Ollama:最简单的本地大模型管理工具,一键拉取、运行、管理模型 * Qwen3.5:cloud:阿里云开源的轻量高性能大语言模型,对话效果强、适配本地部署,作为主力使用

By Ne0inhk