当前位置: 首页 > news >正文

详解JVM的底层原理

目录

1.JVM的内存区域划分

1)程序计数器(Program Counter Register)

2)元数据区(Metaspace)

3)虚拟机栈(Java Virtual Machine Stacks)

4)堆(Heap)

2.JVM类加载的过程

1. 加载(Loading)

2. 验证(Verification)

3. 准备(Preparation)

4. 解析(Resolution)

5. 初始化(Initialization)

6.类加载过程示例代码

 7.双亲委派模型

1)双亲委派模型的定义

2)双亲委派模型的工作流程

3.JVM的垃圾回收算法

一.找到垃圾的方法

1)找到垃圾的方法:引用计数法(Reference Counting)

原理

示例代码

优缺点

2)找到垃圾的方法(JVM使用):可达性分析算法(Reachability Analysis)

原理

可作为 GC Roots 的对象

优缺点

二.垃圾回收算法

1)标记 - 清除算法(Mark - Sweep)

工作原理

优缺点

2)标记 - 整理算法(Mark - Compact)

工作原理

优缺点

3)复制算法(Copying)

工作原理

优缺点

4)分代收集算法(Generational Collection)

工作原理

优缺点

示例代码及说明


 

JVM(Java虚拟机)是Java程序运行的核心环境,它实现了Java“一次编写,到处运行”的跨平台特性。 

1.JVM的内存区域划分

JVM的内存区域主要分为以下几个部分,各司其职,共同支持Java程序的运行:

程序计数器、元数据区、栈、堆。

1)程序计数器(Program Counter Register)

  • 作用:类似于计算机组成原理中所提到的程序计数器,JVM中的程序计数器的作用也是记录当前线程正在执行的字节码指令地址

  • 特点

    • 线程私有:每个线程独立拥有一个程序计数器。

    • 唯一无OOM区域:不会抛出OutOfMemoryError

2)元数据区(Metaspace)

  • 作用:存储类元数据(如类名、方法信息、字段信息、常量池、静态变量等)。

  • 演变历史

    • JDK 7及之前:称为永久代(PermGen),位于堆内存中,容易引发OutOfMemoryError

    • JDK 8及之后:由元空间(Metaspace)替代,直接使用本地内存(Native Memory),不再受JVM堆大小限制。

  • 特点

    • 线程共享:所有线程共享元数据区。

    • 动态扩展:默认不限制大小,可通过-XX:MaxMetaspaceSize设置上限。

    • 异常OutOfMemoryError(当本地内存不足时抛出)。

3)虚拟机栈(Java Virtual Machine Stacks)

  • 作用:存储线程的方法调用信息,每个方法对应一个栈帧(Stack Frame)

  • 栈帧内容

    • 局部变量表:保存方法的参数和局部变量。

    • 操作数栈:执行字节码指令时的临时操作数存储区。

    • 动态链接:指向方法区中的方法引用。

    • 方法返回地址:记录方法执行完毕后返回的位置。

  • 特点

    • 线程私有:每个线程独立拥有一个栈。

    • 异常StackOverflowError(栈深度超出限制)或OutOfMemoryError(扩展失败)。

4)堆(Heap)

  • 作用:存放所有对象实例和数组,是垃圾回收(GC)的主要区域。

  • 特点

    • 线程共享:所有线程均可访问堆中的对象。

    • 细分结构

      • 新生代(Young Generation):分为Eden区、Survivor区(From/To),存放新创建的对象。

      • 老年代(Old Generation):长期存活的对象(经过多次GC后存活)晋升至此。

    • 异常OutOfMemoryError(当堆内存无法分配时抛出)。

2.JVM类加载的过程

1. 加载(Loading)

这是类加载的第一个阶段,在这个阶段,JVM 会完成以下操作:

  • 通过类的全限定名来获取定义此类的二进制字节流。这一步可以从多种来源获取字节流,比如本地文件系统、网络、ZIP 包等。
  • 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。
  • 在内存中生成一个代表这个类的 java.lang.Class 对象,作为方法区这个类的各种数据的访问入口。

2. 验证(Verification)

此阶段的目的是确保被加载的类的字节流符合 JVM 规范,不会危害 JVM 自身的安全。验证主要包含以下几个方面:

  • 文件格式验证:验证字节流是否符合 Class 文件格式的规范,比如是否以 0xCAFEBABE 开头、主次版本号是否在当前 JVM 支持的范围内等。
  • 元数据验证:对字节码描述的信息进行语义分析,以保证其描述的信息符合 Java 语言规范的要求,例如这个类是否有父类(除了 java.lang.Object 之外,所有的类都应该有父类)。
  • 字节码验证:通过数据流和控制流分析,确定程序语义是合法的、符合逻辑的。例如,对方法体进行校验,确保跳转指令不会跳转到方法体以外的字节码指令上。
  • 符号引用验证:在解析阶段中,会将符号引用转换为直接引用,符号引用验证是对类自身以外(常量池中的各种符号引用)的信息进行匹配性校验,比如符号引用所涉及的类是否能被找到等。

3. 准备(Preparation)

该阶段是为类的静态变量分配内存并设置类变量初始值的阶段,这些变量所使用的内存都将在方法区中进行分配。这里的初始值通常是数据类型的零值,例如:

public class PrepareExample {public static int value = 123;
}

在准备阶段,value 变量会被初始化为 0,而不是 123。把 value 赋值为 123 的操作是在初始化阶段完成的。

4. 解析(Resolution)

解析阶段是 JVM 将常量池内的符号引用替换为直接引用的过程。

符号引用是以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能无歧义地定位到目标即可。

直接引用是直接指向目标的指针、相对偏移量或是一个能间接定位到目标的句柄。

解析动作主要针对类或接口、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符 7 类符号引用进行。

5. 初始化(Initialization)

这是类加载的最后一个阶段,在这个阶段,JVM 才真正开始执行类中定义的 Java 程序代码(或者说是字节码)。

初始化阶段是执行类构造器 <clinit>() 方法的过程。<clinit>() 方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块(static{} 块)中的语句合并产生的。例如:

public class InitializationExample {static {System.out.println("静态代码块执行");}public static int value = 123;
}

在初始化阶段,静态代码块会被执行,并且 value 变量会被赋值为 123。

6.类加载过程示例代码

class Parent {static {System.out.println("Parent static block");}public static int parentValue = 10;
}class Child extends Parent {static {System.out.println("Child static block");}public static int childValue = 20;
}public class ClassLoadingExample {public static void main(String[] args) {System.out.println(Child.childValue);}
}

在上述代码中,当执行 main 方法时,会触发 Child 类的加载

由于 Child 类继承自 Parent 类,所以会先加载 Parent 类,依次经过加载、验证、准备、解析和初始化阶段。

在初始化阶段,会执行 Parent 类的静态代码块,将 parentValue 赋值为 10。接着加载 Child 类,同样经过这些阶段,执行 Child 类的静态代码块,将 childValue 赋值为 20。最后打印出 Child.childValue 的值。

 7.双亲委派模型

双亲委派模型与 JVM(Java Virtual Machine)有着紧密且多方面的联系,在 JVM 的类加载体系中扮演着至关重要的角色。

1)双亲委派模型的定义

双亲委派模型规定了类加载器之间的层次关系和类加载的委托机制。在 Java 中,存在多种类加载器,它们形成了一个树形结构,从顶层到底层主要有以下几种:

  • 启动类加载器(Bootstrap ClassLoader):由 C++ 实现,是最顶层的类加载器,负责加载 Java 的核心类库,如 java.lang 包下的类。
  • 扩展类加载器(Extension ClassLoader):由 Java 实现,负责加载 JAVA_HOME/lib/ext 目录下的类库。
  • 应用程序类加载器(Application ClassLoader):也由 Java 实现,负责加载用户类路径(classpath)上的类库,一般情况下,我们自己编写的 Java 类就是由该类加载器加载的。
  • 自定义类加载器(User-Defined ClassLoader):用户可以根据需求自定义类加载器,继承自 java.lang.ClassLoader 类。

2)双亲委派模型的工作流程

当一个类加载器收到类加载请求时,它不会立即尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此。

因此所有的加载请求最终都会传送顶层的启动类加载器中。

只有当父类加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去加载

具体流程如下:

  1. 应用程序类加载器收到类加载请求。
  2. 应用程序类加载器将请求委派给扩展类加载器。
  3. 扩展类加载器将请求委派给启动类加载器。
  4. 启动类加载器在其搜索范围内查找该类,如果找到则加载该类;如果找不到,则将请求返回给扩展类加载器。
  5. 扩展类加载器在其搜索范围内查找该类,如果找到则加载该类;如果找不到,则将请求返回给应用程序类加载器。
  6. 应用程序类加载器在其搜索范围内查找该类,如果找到则加载该类;如果找不到,则抛出 ClassNotFoundException 异常。

3.JVM的垃圾回收算法

JVM(Java Virtual Machine)的垃圾回收算法旨在自动回收不再使用的内存,以保证系统的性能和稳定性。那么首先,JVM如何找到垃圾呢?

准确找出垃圾对象(即不再被使用、可回收内存的对象)是垃圾回收的关键前提。

一.找到垃圾的方法

1)找到垃圾的方法:引用计数法(Reference Counting)

原理

给每个对象配备一个引用计数器,每当有一个地方引用该对象时,计数器的值就加 1;当引用失效时,计数器的值就减 1。

要使用一个对象,一定是通过引用来完成的

当计数器的值为 0 时,就表明这个对象不再被引用,可被视为垃圾对象

示例代码
# Python 示例模拟引用计数
class MyObject:def __init__(self):pass# 创建对象
obj1 = MyObject()
obj2 = obj1  # 引用计数加 1
obj1 = None  # 引用计数减 1
obj2 = None  # 引用计数减 1,此时对象可被回收

优缺点
  • 优点:实现简单,判定效率高,能及时发现垃圾对象。
  • 缺点:难以处理循环引用的情况。比如两个对象相互引用,即使它们在程序中已不再被其他地方使用,由于引用计数器的值不为 0,它们也不会被当作垃圾回收。

2)找到垃圾的方法(JVM使用):可达性分析算法(Reachability Analysis)

原理

以一系列被称为 “GC Roots” 的对象作为起始点,从这些节点开始向下搜索,搜索走过的路径称为引用链。

当一个对象到 GC Roots 没有任何引用链相连时(即从 GC Roots 到这个对象不可达),则证明此对象是不可用的,可被判定为垃圾对象

可作为 GC Roots 的对象
  • 虚拟机栈(栈帧中的本地变量表)中引用的对象:例如,在方法中创建的局部变量所引用的对象。
  • 方法区中类静态属性引用的对象:像类的静态变量引用的对象。
  • 方法区中常量引用的对象:例如,使用 final 关键字定义的常量所引用的对象。
  • 本地方法栈中 JNI(即一般说的 Native 方法)引用的对象:也就是在本地方法中引用的对象。
public class ReachabilityAnalysisExample {public static void main(String[] args) {Object obj1 = new Object(); // obj1 是 GC Roots 可达的Object obj2 = new Object();obj1 = null; // obj1 不再是 GC Roots 可达的,可能被回收obj2 = null; // obj2 不再是 GC Roots 可达的,可能被回收}
}

优缺点
  • 优点:能够有效解决引用计数法中循环引用的问题,是目前主流 JVM 采用的判定垃圾对象的方法。
  • 缺点:实现相对复杂,需要进行递归遍历,并且在进行可达性分析时,需要暂停所有的用户线程(即 “Stop The World”),这可能会对应用程序的性能产生一定影响。

二.垃圾回收算法

JVM(Java Virtual Machine)的垃圾回收算法旨在自动回收不再使用的内存,以保证系统的性能和稳定性。

下面详细介绍几种常见的垃圾回收算法。

1)标记 - 清除算法(Mark - Sweep)

工作原理

该算法分为两个阶段。

首先是标记阶段,垃圾回收器会从根对象(如栈中的引用、静态变量等)开始遍历,标记出所有存活的对象。

接着是清除阶段,对未被标记的对象(即垃圾对象)进行清除,释放其所占用的内存空间。

优缺点
  • 优点:实现简单,不需要额外的数据结构来记录内存信息。
  • 缺点:容易产生内存碎片。随着多次回收,内存中会出现大量不连续的小内存块,当需要分配较大对象时,可能会因找不到足够大的连续内存空间而提前触发新的垃圾回收。

2)标记 - 整理算法(Mark - Compact)

工作原理

同样先进行标记阶段,找出所有存活的对象。

之后进入整理阶段,将存活的对象向内存空间的一端移动,然后直接清理掉边界以外的内存。

优缺点
  • 优点:解决了标记 - 清除算法产生内存碎片的问题,使内存空间连续,有利于大对象的分配。
  • 缺点:整理过程需要移动对象,会带来一定的性能开销,且在移动对象时需要暂停应用程序的执行。

3)复制算法(Copying)

工作原理

将可用内存按容量划分为大小相等的两块每次只使用其中一块

当这一块内存用完了,就将还存活的对象复制到另外一块上面,然后把已使用过的内存空间一次清理掉。

优缺点
  • 优点:实现简单,回收效率高,且不会产生内存碎片。
  • 缺点:可用内存空间减少为原来的一半,内存利用率较低。通常适用于对象存活率较低的场景,如新生代。

4)分代收集算法(Generational Collection)

工作原理

根据对象的存活周期将内存划分为不同的区域,一般分为新生代老年代

新生代中对象的存活时间较短,大部分对象很快就会变成垃圾,因此适合使用复制算法

老年代中对象的存活时间较长,对象存活率较高,采用标记 - 清除标记 - 整理算法更为合适。

优缺点
  • 优点:结合了不同算法的优势,根据对象的特点选择合适的算法,提高了垃圾回收的效率。
  • 缺点:需要对内存进行分代管理,增加了系统的复杂性。

 

示例代码及说明

以下是一个简单的 Java 代码示例,展示了对象创建和垃圾回收的情况:

public class GarbageCollectionExample {public static void main(String[] args) {// 创建大量对象for (int i = 0; i < 100000; i++) {new Object();}// 手动触发垃圾回收System.gc();}
}

在上述代码中,通过循环创建了大量的 Object 对象,这些对象大部分会很快成为垃圾。System.gc() 方法用于手动触发垃圾回收,实际应用中,JVM 会根据内存使用情况自动触发垃圾回收。

不同的垃圾回收算法会在这个过程中发挥作用,以确保内存的有效利用。

 

 

 

相关文章:

详解JVM的底层原理

目录 1.JVM的内存区域划分 1&#xff09;程序计数器&#xff08;Program Counter Register&#xff09; 2&#xff09;元数据区&#xff08;Metaspace&#xff09; 3&#xff09;虚拟机栈&#xff08;Java Virtual Machine Stacks&#xff09; 4&#xff09;堆&#xff08…...

制表符是什么?与.txt文件的关系?

李升伟 整理 制表符&#xff08;Tab&#xff09;是一种控制字符&#xff08;ASCII码为9&#xff0c;Unicode为\u0009&#xff09;&#xff0c;用于在文本中创建水平间距。它的作用类似于键盘上的 Tab 键&#xff0c;通常表现为光标跳转到下一个预设的“制表位”&#xff08;一…...

【专题刷题】双指针(三):两数之和,三数之和,四数之和

&#x1f4dd;前言说明&#xff1a; 本专栏主要记录本人的基础算法学习以及LeetCode刷题记录&#xff0c;按专题划分每题主要记录&#xff1a;&#xff08;1&#xff09;本人解法 本人屎山代码&#xff1b;&#xff08;2&#xff09;优质解法 优质代码&#xff1b;&#xff…...

Java八种常见的设计模式

一、单例模式 单例模式是&#xff08;Singleton Pattern&#xff09;Java中最常用的设计模式之一&#xff0c;它保证一个类仅有一个实例&#xff0c;并提供一个全局访问点。 实现单例模式的核心是将类的构造方法私有化&#xff0c;以防止外部直接通过构造函数创建实例。同时&am…...

用Prompt 技术【提示词】打造自己的大语言智能体

机器如何按照人类的指令执行任务的探索 机器需具备理解任务叙述的能力&#xff0c;以便能够按照人类的指令执行任务&#xff0c;为机器提供一些范例作为参考&#xff0c;使其能够理解该执行的任务类型。这样的学习方式称为“Instruction learning”&#xff0c;透过精心设计的…...

灵鉴 AI五大核心能力洞穿 “数据黑箱”云取证深度支持8大核心应用

本文关键词&#xff1a;灵鉴AI 、电子数据取证分析AI助手、云取证、DeepSeek大模型 1.灵鉴AI &#xff0c;V1.0深度融合DeepSeek大模型技术&#xff0c;破解行业痛点&#xff0c;5大核心能力&#xff0c;让大模型真正“懂”电子数据分析。 2.LX-A216云取证系统&#xff0c;V2.…...

了解高速设计的信号完整性仿真

高速设计需要精确的信号传输&#xff0c;以确保最佳性能。信号完整性差会导致关键应用中的误码、数据损坏甚至系统故障等问题。介电常数、损耗角正切和插入损耗等因素会显著影响信号质量。通过使用信号完整性仿真&#xff0c;您可以及早发现并解决这些挑战。这种主动方法有助于…...

用 Deepseek 写的html油耗计算器

在油价高企的今天&#xff0c;了解自己爱车的真实油耗情况对每位车主来说都至关重要。本文将介绍一个简单实用的油耗计算方法&#xff0c;并提供一个可以直接使用的HTML油耗计算器。 为什么要计算油耗&#xff1f; 计算油耗不仅能帮助我们&#xff1a; 了解车辆的真实燃油经济…...

SAP系统青果糖无法报工

问题:班长说工单号4100000101青果糖工单 无法报工 原因排查:工单4100000101的工艺路线版本错误,选了版本1的,版本1是委外的工艺,本厂生产应该选版本2. 解决&#xff1a; 1&#xff1a;重读主数据,更改工单4100000101的工艺路线版本. 2&#xff1a;工单成品已交库,不能直接更改工…...

GPU 招投标全流程分析与总结

GPU 招投标全流程分析与总结 招投标流程概述 以下是通过代理商采购Nvidia H20-GPU 141G的招投标全流程分析: #mermaid-svg-hMPPfkCpGj8GKXfV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-hMPPfkCpGj8GKXfV .er…...

Centos7.6安装JDK 1.8教程

前提&#xff1a;先把jdk1.8文件上传到usr/local目录下&#xff0c;文件名如&#xff1a;jdk-8u151-linux-x64.tar.gz 1. 解压 JDK 压缩包 假设 jdk-8u151-linux-x64.tar.gz 文件位于 /usr/local 目录下。 进入 /usr/local 目录&#xff1a; cd /usr/local 解压文件&#…...

Golang errors 包快速上手

文章目录 1.变量2.类型3.函数3.1 New3.2 Is简介函数签名核心功能示例代码使用场景注意事项小结 3.3 As简介函数签名核心功能示例代码使用场景注意事项小结 3.4 Unwrap简介函数签名核心功能使用示例使用场景注意事项小结 3.5 Join简介函数签名核心功能使用场景注意事项小结 4.小…...

新型多机器人协作运输系统,轻松应对复杂路面

受到鱼类、鸟类和蚂蚁等微小生物体协作操纵的启发&#xff0c;研究人员开发了多机器人协作运输系统&#xff08;Multirobot Cooperative Transportation Systems&#xff0c;MRCTS&#xff09;运输单个机器人无法处理的重型超大物体&#xff0c;可用于搜救行动、灾难响应、军事…...

易境通国际货代系统:如何解决货代物流行业的棘手难题

国际货代行业作为全球贸易的重要纽带&#xff0c;面临着日益复杂的市场环境和客户需求。然而&#xff0c;随着业务规模的扩张和多变的市场需求&#xff0c;传统的粗放式管理模式逐渐暴露出效率低下、成本失控、风险难控等问题。尤其在跨境电商高速发展的背景下&#xff0c;货代…...

基于springboot医药连锁店管理系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 当今社会已经步入了科学技术进步和经济社会快速发展的新时期&#xff0c;国际信息和学术交流也不断加强&#xff0c;计算机技术对经济社会发展和人民生活改善的影响也日益突出&#xff0c;人类的生存和思考方式也产生了变化。传统医药连锁店管理采取了人工的管理方法&…...

Vue 3 reactive 和 ref 区别及 失去响应性问题

在 Vue 3 中&#xff0c;reactive 和 ref 是实现响应式数据的两个核心 API&#xff0c;它们的设计目标和使用场景有所不同。以下是两者的详细对比&#xff1a; 1. 基本定义与核心功能 特性reactiveref作用创建对象类型的响应式代理&#xff08;对象、数组、Map 等&#xff09…...

d3.js绘制单/多面板组合箱线图

用d3.js研发了个可以单面板、多面板展示的组合箱线图&#xff1b; 组合箱线图中包括普通散点、蜂群散点、小提琴图、小提琴箱线图、柱状图、误差棒、离群点等等&#xff0c;其中大部分你能想到的配置都是自行传参调整的&#xff0c;你想不到的也能稍作修改然后自行调整&#x…...

第二十四天 - 分布式任务队列 - Celery高级应用 - 练习:分布式监控任务系统

一、Celery核心机制解析 1.1 分布式架构四要素 # celery_config.py BROKER_URL redis://:passwordlocalhost:6379/0 # 消息中间件 RESULT_BACKEND redis://:passwordlocalhost:6379/1 # 结果存储 TASK_SERIALIZER json ACCEPT_CONTENT [json] TIMEZONE Asia/Shanghai核…...

IDEA使用jclasslib Bytecode Viewer查看jvm字节码

学习jvm的时候&#xff0c;想查看字节码和局部变量表&#xff0c;可以使用idea安装jclasslib Bytecode View插件查看。 &#xff08;1&#xff09;安装工具&#xff1a; 安装完成后需要重启idea. &#xff08;2&#xff09;准备一段代码&#xff0c;编译运行 package com.te…...

list.

列表类型是用来存储多个有序的字符串&#xff0c;列表中的每个字符串称为元素&#xff08;element&#xff09;&#xff0c;⼀个列表最多可以存储个元素 在 Redis 中&#xff0c;可以对列表两端插入&#xff08;push&#xff09;和弹出&#xff08;pop&#xff09;&#xff0c;…...

202520读书笔记|《我要按自己喜欢的方式去生活》——面对可能到来的裁员,那就等正式通知吧

《我要按自己喜欢的方式去生活》作者宝夏夏&#xff0c;很赞的一本书&#xff0c;通透真实&#xff0c;不矫揉造作&#xff0c;直击内心。 因为第一个故事&#xff0c;裁员而进来的。早晨睡眼惺忪醒来&#xff0c;闺蜜半夜发来一大段话&#xff0c;大意是公司在缩减成本裁员&am…...

Linux 文件传输:系统数据交互的动脉

前言&#xff1a;sshd 在Linux系统中&#xff0c;文件传输常依赖于SSH协议&#xff08;Secure Shell&#xff09;&#xff0c;而sshd&#xff08;OpenSSH Daemon&#xff09;是负责处理SSH连接的后台服务程序。通过sshd&#xff0c;用户可以在加密的通道中进行安全的远程登录、…...

Rust + WebAssembly 生产部署指南

1 最小可行部署&#xff08;MVP&#xff09; 前端打包wasm-pack build --target web --release # 生成 .wasm JS 包装器 npm run build / vite build / webpack … # 打包 HTML/CSS/JS 资源拷贝产物 到生产服务器的站点目录dist/ ├── index.html ├── pkg…...

git忽略已跟踪的文件/指定文件

在项目开发中&#xff0c;有时候我们并不需要git跟踪所有文件&#xff0c;而是需要忽略掉某些指定的文件或文件夹&#xff0c;怎么操作呢&#xff1f;我们分两种情况讨论&#xff1a; 1. 要忽略的文件之前并未被git跟踪 这种情况常用的方法是在项目的根目录下创建和编辑.gitig…...

基于Django实现的图书分析大屏系统项目

图书分析大屏展示系统项目大纲与启动教程 一、项目概述 图书分析大屏展示系统是一个基于Django框架开发的Web应用&#xff0c;主要用于图书数据的可视化分析与展示。该系统采用MVT&#xff08;Model-View-Template&#xff09;架构模式&#xff0c;结合MySQL数据库&#xff0…...

【OSCP-vulnhub】GoldenEye

目录 端口扫描 查找源代码 目录扫描 POP3邮件枚举 1.先枚举用户名 2.hydra爆破 3.nc连接 boris&#xff1a; natalya&#xff1a; 设置本地hosts文件 doak&#xff1a; 解析图片 exiftool for-007.jpg strings for-007.jpg 使用MSF去搜索内核版本 漏洞利用 ---…...

OpenAI发布GPT-4.1系列模型,主打编程能力提升

OpenAI在本周一推出了全新一代模型家族——GPT-4.1系列。没错&#xff0c;就是“4.1”&#xff0c;尽管OpenAI的命名方式已经让人有些摸不着头脑。 这一系列包括三个型号&#xff1a;GPT-4.1、GPT-4.1 mini和GPT-4.1 nano。据OpenAI介绍&#xff0c;这些模型在编程任务和指令遵…...

压缩包网页预览(zip-html-preview)

zip-html-preview 项目介绍 这是一个基于 Spring Boot 开发的在线 ZIP 文件预览工具,主要用于预览 ZIP 压缩包中的 HTML 文件及其相关资源。 主要功能 支持拖拽上传或点击选择多个 ZIP 文件自动解压并提取 ZIP 文件中的 HTML 文件在线预览 HTML 文件及其相关的 CSS、JavaSc…...

OpenCV 图形API(41)颜色空间转换----- BGR 图像转换为灰度图像函数BGR2Gray()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 将图像从BGR色彩空间转换为灰度。 B、G和R通道值的传统范围是0到255。结果的灰度颜色值计算为&#xff1a; dst ( I ) 0.114 ∗ src ( I ) . B…...

影视产业链中的律师角色以及合规风控要点

影视产业链中的律师角色以及合规风控要点 在影视娱乐业务中&#xff0c;律师服务贯穿项目全生命周期&#xff0c;涵盖创意开发、投z制作、发行传播、艺人管理及争议等多个领域 一、影视项目全流程合同法律事务 ✔️项目开发阶段 剧本合作&#xff1a;剧本委托创作、改编、版权…...

Java工具类——实体类列表写入excel

Java工具类——实体类列表写入excel /*** 将实体类 List 数据写入 Excel 文件* param dataList 实体类对象列表* param filePath Excel 文件路径* param sheetName Sheet 名称* param <T> 泛型类型* throws IOException 文件操作异常* throws IllegalAccessException 反…...

C++23 新预处理器指令详解:#elifdef、#elifndef 和 #warning

文章目录 1. #elifdef 和 #elifndef&#xff1a;更灵活的条件编译1.1 背景与动机1.2 语法与示例示例代码&#xff1a; 1.3 编译器支持 2. #warning&#xff1a;发出编译警告2.1 背景与动机2.2 语法与示例示例代码&#xff1a; 2.3 编译器支持 3. 总结 C23 标准引入了多项改进&a…...

书写API文档的最佳实践[特殊字符]

API文档对于API的可用性和成功至关重要。完善的API文档能显著提高开发者体验&#xff0c;加速采用&#xff0c;并培养强大的开发者社区。反之&#xff0c;糟糕的文档可能导致困惑、挫败感和错误&#xff0c;从而降低采用率。本文将探讨编写清晰、全面、开发者友好的API文档的高…...

【Maven】手动安装依赖到本地仓库

【Maven】手动安装依赖到本地仓库 【一】下载依赖【二】安装 JAR 文件到本地仓库【三】验证安装【四】在项目中使用该依赖【1】注意事项【2】额外提示 【一】下载依赖 登录到中央仓库下载依赖&#xff0c;中央仓库地址&#xff1a;https://mvnrepository.com/ 搜搜你的依赖的a…...

kali下maven 的安装与配置

1、下载 maven 安装包 wget https://dlcdn.apache.org/maven/maven-3/3.9.4/binaries/apache-maven-3.9.4-bin.tar.gz 2、解压 apache-maven-3.9.4-bin.tar.gz tar -zxvf apache-maven-3.9.4-bin.tar.gz 找到文件解压到的位置&#xff0c;由于解压时我们没有指定路径&#x…...

list的模拟实现和反向迭代器的底层

1&#xff1a;list的模拟实现 1&#xff1a;链表的节点 对于list的模拟实现&#xff0c;我们需要先定义一个节点的类可以使用&#xff08;class也可以使用struct&#xff09; // List的节点类 template<class T> struct ListNode {ListNode(const T& val T()){_p…...

OpenHarmony - 小型系统内核(LiteOS-A)(七)

OpenHarmony - 小型系统内核&#xff08;LiteOS-A&#xff09;&#xff08;七&#xff09; 八、文件系统 适配新的文件系统 基本概念 所谓对接VFS层&#xff0c;其实就是指实现VFS层定义的若干接口函数&#xff0c;可根据文件系统的特点和需要适配其中部分接口。一般情况下&…...

四层板的时钟线设计:关键要点与实用策略

在电子电路设计领域&#xff0c;四层板凭借其出色的电气性能和合理的空间布局&#xff0c;广泛应用于各类电子产品中。而时钟线作为系统的 “心跳”&#xff0c;为整个电路提供同步信号&#xff0c;其设计质量直接关系到系统的稳定性、可靠性和性能表现。因此&#xff0c;深入探…...

【TypeScript类型系统解析:一次真实的类型检查修复经历】

TypeScript类型系统解析&#xff1a;一次真实的类型检查修复经历 在最近的管理系统开发过程中&#xff0c;我遇到了一个值得深入探讨的TypeScript类型问题。通过解决这个问题&#xff0c;我更深入地理解了TypeScript的类型系统工作原理&#xff0c;以及如何在Vue项目中正确处理…...

全视通无感护理巡视系统方案及产品,助力医院护士巡视病房到位

传统的护理工作中&#xff0c;护理巡视是一项重要且繁琐的任务。护士们需要根据不同的护理级别&#xff0c;定时对患者进行巡视&#xff0c;并手工填写巡视记录表&#xff0c;登记巡视时间、人员等信息。月末时&#xff0c;还需进行人工数据统计&#xff0c;这一过程不仅效率低…...

初识Redis · 命令、数据结构补充、协议

目录 前言&#xff1a; 数据结构补充 stream geospaital Hyperloglog bitmap bitfield 渐进式遍历命令等 认识Redis客户端及协议 前言&#xff1a; 在前文&#xff0c;我们总览一下&#xff0c;我们已经介绍了什么是Redis&#xff0c;Redis的应用场景是什么&#xff…...

DBA工作常见问题整理

MVCC机制: PostgreSQL的多版本并发控制(MVCC)是其核心特性之一&#xff0c;它允许数据库在高并发环境下保持高性能的同时提供事务隔离。 MVCC通过维护数据的多个版本实现&#xff1a; 读操作不阻塞写操作写操作不阻塞读操作避免使用锁实现并发控制 PostgreSQL的MVCC特点 写时…...

云转型(cloud transformation)——不仅仅是简单的基础设施迁移

李升伟 编译 云转型不仅仅是迁移基础设施&#xff0c;更是重塑企业运营、创新及价值交付的方式。它具有战略性、持续性&#xff0c;并影响着人员、流程和平台。 ☁️ 云转型涉及以下内容&#xff1a; &#x1f504; 应用现代化——从单体架构转向微服务架构。 ⚙️ 运营自动…...

SpringBoot 定时任务

启用定时任务‌ 首先确定需要启用定时任务的SpringBoot类&#xff0c;然后添加注解&#xff08;EnableScheduling&#xff09;以启用定时任务 package com.mt.visitorauth.anjian.service;import org.springframework.scheduling.annotation.EnableScheduling;EnableScheduli…...

常见的低代码策略整理

低代码策略通过简化开发流程、降低技术门槛、提升效率&#xff0c;帮助用户快速构建灵活可靠的应用。这些策略的核心优势体现在以下方面&#xff1a; 快速交付与降本增效 减少编码需求&#xff1a;通过可视化配置&#xff08;如变量替换、表达式函数&#xff09;替代传统编码…...

HFSS(李明洋)学习记录1

Hfss操作记录 HFSS—solution type&#xff1a;选择求解类型Modeler—units&#xff1a;设置hfss内部的基本单位可选mm或者in&#xff08;英寸&#xff09;设置端口激励—波端口&#xff1a;右键selection model/face 选中对应的表面之后&#xff1b;右键assign excitation/po…...

泛目录站群技术架构演进观察:2025年PHP+Java混合方案实战笔记​

https://www.zhanqun.xin/ 在参与某跨国电商平台SEO优化项目时&#xff0c;我们团队对市面上主流站群系统进行了为期半年的技术评估。最终选择部署的2025版无极多功能泛目录站群程序&#xff0c;其技术实现路径与工程化设计思路颇具参考价值&#xff0c;现整理关键发现如下。 …...

sentinel安装部署及测试--实践

一、什么是 Sentinel&#xff1f; Sentinel 是阿里巴巴开源的一款用于微服务流量控制和系统防护的中间件。它的主要功能包括&#xff1a; **流量控制&#xff08;Flow Control&#xff09;&#xff1a;**限制系统的 QPS 或线程数&#xff0c;防止因流量过大导致系统崩溃。 **…...

Yocto项目实战教程 · 第4章:4.1小节元数据

&#x1f50d; B站相应的视频教程&#xff1a; &#x1f4cc; Yocto项目实战教程-第4章-4.1小节-元数据 记得三连&#xff0c;标为原始粉丝。 在嵌入式Linux系统构建中&#xff0c;Yocto项目凭借其高度模块化、可配置的特性成为主流工具。而其背后的关键支撑之一&#xff0c;便…...

应用镜像是什么?轻量应用服务器的镜像大全

应用镜像是轻量应用服务器专属的&#xff0c;镜像就是轻量应用服务器的装机盘&#xff0c;应用镜像在原有的纯净版操作系统上集成了应用程序&#xff0c;例如WordPress应用镜像、宝塔面板应用镜像、WooCommerce等应用&#xff0c;阿里云服务器网aliyunfuwuqi.com整理什么是轻量…...