avatar
文章
599
标签
109
分类
29
首页
归档
分类
标签
关于
xhj的博客
首页
归档
分类
标签
关于

xhj的博客

虚拟机的类加载机制
发表于2023-03-15|JavaJVM
虚拟机的类加载机制 虚拟机的类加载机制 类加载的时机 类的显式加载和隐式加载 类加载的过程 类的生命周期 加载 加载的 3 个阶段 分类 验证 准备 解析 初始化 类加载器 如何判断两个类 “相等” 类加载器的分类 双亲委派模型 类加载的时机JVM 会在程序第一次主动引用类的时候,加载该类,被动引用时并不会引发类加载的操作。也就是说,JVM 并不是在一开始就把一个程序就所有的类都加载到内存中,而是到不得不用的时候才把它加载进来,而且只加载一次。那么什么是主动引用,什么是被动引用呢? 主动引用 遇到 new、getstatic、putstatic、invokestatic 字节码指令,例如: 使用 new 实例化对象; 读取或设置一个类的 static 字段(被 final 修饰的除外); 调用类的静态方法。 对类进行反射调用; 初始化一个类时,其父类还没初始化(需先初始化父类); 这点类与接口具有不同的表现,接口初始化时,不要求其父接口完成初始化,只有真正使用父接口时才初始化,如引用父接口中定义的常量。 虚拟机启动,先初始化包含 main() 函数的主...
Class文件的组成结构
发表于2023-03-01|JavaJVM
Class 文件的组成结构Class 文件是一组以 8 位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在 Class 文件中,中间没有任何分隔符。Java 虚拟机规范规定 Class 文件采用一种类似 C 语言结构体的伪结构来存储数据,这种伪结构中只有两种数据类型:无符号数和表,我们之后也主要对这两种类型的数据类型进行解析。 无符号数: 无符号数属于基本数据类型,以 u1、u2、u4、u8 分别代表 1 个字节、2 个字节、4 个字节和 8 个字节的无符号数,可以用它来描述数字、索引引用、数量值或 utf-8 编码的字符串值。 表: 表是由多个无符号数或其他表为数据项构成的复合数据类型,名称上都以 _info 结尾。 Class 文件的头 8 个字节Class 文件的头 8 个字节是魔数和版本号,其中头 4 个字节是魔数,也就是 0xCAFEBABE,它可以用来确定这个文件是否为一个能被虚拟机接受的 Class 文件(这通过扩展名来识别文件类型要安全,毕竟扩展名是可以随便修改的)。 后 4 个字节则是当前 Class 文件的版本号,其中第 5、6 个字节是次版...
Java内存分配策略
发表于2023-02-26|JavaJVM
Java 内存分配策略 Java 内存分配策略 优先在 Eden 区分配 大对象直接进入老年代 长期存活的对象将进入老年代 空间分配担保 新生代和老年代的 GC 操作 新生代 GC 操作:Minor GC 发生的非常频繁,速度较块。 老年代 GC 操作:Full GC / Major GC 经常伴随着至少一次的 Minor GC; 速度一般比 Minor GC 慢上 10 倍以上。 优先在 Eden 区分配 Eden 空间不够将会触发一次 Minor GC; 虚拟机参数: -Xmx:Java 堆的最大值; -Xms:Java 堆的最小值; -Xmn:新生代大小; -XX:SurvivorRatio=8:Eden 区 / Survivor 区 = 8 : 1 大对象直接进入老年代 大对象定义: 需要大量连续内存空间的 Java 对象。例如那种很长的字符串或者数组。 设置对象直接进入老年代大小限制: -XX:PretenureSizeThreshold:单位是字节; 只对 Serial 和 ParNew 两款收集器有效。 ...
垃圾收集 (GC)
发表于2023-02-15|JavaJVM
垃圾收集 (GC)垃圾收集(Garbage Collection,GC),它的任务是解决以下 3 件问题: 哪些内存需要回收? 什么时候回收? 如何回收? 其中第一个问题很好回答,在 Java 中,GC 主要发生在 Java 堆和方法区中,对于后两个问题,我们将在之后的内容中进行讨论,并介绍 HotSpot 的 7 个垃圾收集器。 垃圾收集 (GC) 判断对象的生死 判断对象是否可用的算法 引用计数算法 可达性分析算法(主流) 四种引用类型 宣告对象死亡的两次标记过程 方法区的回收 垃圾收集算法 基础:标记 - 清除算法 解决效率问题:复制算法 解决空间碎片问题:标记 - 整理算法 进化:分代收集算法 HotSpot 中 GC 算法的实现 7 个垃圾收集器 Serial / ParNew 搭配 Serial Old 收集器 Parallel 搭配 Parallel Scavenge 收集器 CMS 收集器 G1 收集器 GC 日志解读 判断对象的生死 什么时候回收对象?当然是这个对象再也不会被用到的时候回收。所以要想解决 “什么时候回收?” ...
OOM异常
发表于2023-02-05|JavaJVM
OOM 异常 (OutOfMemoryError) OOM 异常 (OutOfMemoryError) Java 堆溢出 Java 虚拟机栈和本地方法栈溢出 方法区和运行时常量池溢出 直接内存溢出 Java 堆溢出 出现标志:java.lang.OutOfMemoryError: Java heap space 解决方法: 先通过内存映像分析工具分析 Dump 出来的堆转储快照,确认内存中的对象是否是必要的,即分清楚是出现了内存泄漏还是内存溢出; 如果是内存泄漏,通过工具查看泄漏对象到 GC Root 的引用链,定位出泄漏的位置; 如果不存在泄漏,检查虚拟机堆参数(-Xmx 和 -Xms)是否可以调大,检查代码中是否有哪些对象的生命周期过长,尝试减少程序运行期的内存消耗。 虚拟机参数: -XX:HeapDumpOnOutOfMemoryError:让虚拟机在出现内存泄漏异常时 Dump 出当前的内存堆转储快照用于事后分析。 Java 虚拟机栈和本地方法栈溢出 单线程下,栈帧过大、虚拟机容量过小都不会导致 OutOfMemoryError,只会导致 StackOve...
Java内存区域详解
发表于2023-01-31|JavaJVM
Java 内存区域详解 Java 内存区域详解 JVM 运行时的数据区域 程序计数器 Java 虚拟机栈 本地方法栈 Java 堆 方法区 直接内存 HotSpot 虚拟机堆中的对象 对象的创建(遇到一条 new 指令时) 对象的内存布局 对象的访问 句柄访问 直接指针访问 JVM 运行时的数据区域首先获取一个直观的认识: 总共也就这么 5 个区(直接内存不属于 JVM 运行时数据区的一部分),除了程序计数器其他的地方都有可能出现 OOM (OutOfMemoryError),其中像是程序计数器和两个栈(Java 虚拟机栈 & 本地方法栈)都是每个线程要有一个的,所以肯定是线程隔离的。而其他 2 个区就是线程共享的了,也就是说,如果有多个线程要同时访问这两个区的数据,是会出现线程安全问题的。接下来,我们将对这些区域进行详细的介绍。 程序计数器 当前线程所执行的字节码的行号指示器,字节码解释器工作时就是通过改变这个计数器的值来确定下一条要执行的字节码指令的位置 执行 Java 方法和 native 方法时的区别: 执行 Java 方法时:记录虚拟机正在执...
Java多线程基础
发表于2023-01-12|JavaJUC
Java多线程基础 一、线程介绍 1、简单案例引入 2、start和run方法区别 3、线程生命周期 4、银行排队业务案例 二、深入理解Thread构造函数 12345- [1、线程的默认命名](#1线程的默认命名)- [2、线程的父子关系](#2线程的父子关系)- [3、Thread和ThreadGroup](#3thread和threadgroup)- [4、Thread和JVM虚拟机栈](#4thread和jvm虚拟机栈)- [5、守护线程](#5守护线程) 三、Thread API的详细内容 1、线程sleep 2、线程yield 3、设置线程的优先级 4、获取线程ID 5、获取当前线程 6、设置线程上下文类加载器 7、线程interrupt 8、线程join 9、关闭线程 四、线程安全与数据同步 五、线程间通信 六、ThreadGroup详细讲解 一、线程介绍1、简单案例引入 模拟同时从数据库中读取数据和写入文件; 模拟同时从数据库中读取数据和写入文件,这两个操作作为两个线程同时进行,不需要相互的等待; 这里使用的是匿名类创建的线程,重写了Th...
MYSQL高级
发表于2022-12-31|Database
MYSQL高级 一、Mysql的架构介绍 二、索引优化分析 三、查询截取分析 四、主从复制 五、Mysql锁机制 一、Mysql的架构介绍1、Mysql在Linux下的基本安装配置1)、查看是否已经安装好 2)、Mysql的启动和停止 1 2 3 4 5 service mysql start # 启动 service mysql stop # 停止 # 另外一种启动停止的方式 /etc/init.d/mysql start /etc/init.d/mysql stop 3)、在Linux下配置Mysql的密码方式一(在mysql系统之外):在mysql系统外: 1 2 mysqladmin -u root -p password "test123" Enter password: 【输入原来的密码】 方式二(登录mysql): 1 2 3 4 5 6 mysql -u root -p Enter password: 【输入原来的密码】 mysql>use mysql; mysql> upda...
MySQL基础
发表于2022-12-15|Database
MySQL基础 一、数据库的基本操作 1、基本命令 2、数据库储存引擎 二、数据表的基本操作 1、创建数据表 2、修改数据表 3、删除数据表 4、综合案例小结 三、数据类型和运算符 1、MYSQL数据类型介绍 2、如何选择数据类型 3、常见运算符介绍 四、Mysql函数 查询数据 插入、更新与删除数据 索引 一、数据库的基本操作1、基本命令登陆数据库命令: 1 mysql -h localhost -u root -p 创建数据库命令: 1 create database test_db; 查看已经创建的数据库的定义 1 show create database test_db; 查看已经存在的所有数据库: 1 show databases; 删除数据库 1 drop database test_db; 注意删除数据库时要小心,不会给出提示,数据和数据表会一同删除。 2、数据库储存引擎1)、查看引擎命令使用如下命令查看系统所支持的引擎类型: 1 sh...
The Suspects以及并查集总结
发表于2022-11-26|Data Structure
The Suspects以及并查集总结 题目 基本并查集 Size优化并查集 Rank优化并查集 路径压缩优化一(最好) 路径压缩优化二(递归) 题目链接 http://poj.org/problem?id=1611 题意就是告诉你0号同学被感染了,他还参加了一些社团,给出一些社团以及里面的人,问总共多少人感染。输入给出n表示人数(标号为0~n-1),m表示社团数目,接下来m行每行第一个数k ,表示该社团有k人,然后是k个人的编号。要你输出有多少个人感染了病毒。 解析题目本身并不难: 把每个社团加入到各自的集合中,然后不断的合并相同的集合,最后看哪些和0号同学在同一个集合中,使用一个变量记录和0号同学在同一个集合中的人数即可; 这里主要是总结并查集几种优化的方式; 基本并查集基本并查集,记录一个每个结点p的父亲结点是parent[p],然后是一个不断从孩子找父亲的过程: find()操作, while(p != parent[p])p = parent[p],一直往上找根的过程; union()操作,就是找到两个结点的根节点,然后将其中一个结点的根节点挂到另一个结点的...
1…535455…60
avatar
xhj
相关学习笔记
文章
599
标签
109
分类
29
Follow Me
公告
欢迎来到我的博客
最新文章
14-FastAPI接口与项目闭环2026-10-14
13-主智能体搭建与异步执行2026-10-13
12-RAGFlow子智能体与知识库准备2026-10-12
11-数据库查询子智能体与MySQL工具2026-10-11
10-网络搜索子智能体与Tavily工具2026-10-10
分类
  • AI Agent101
  • Algorithm20
  • Backend Dev74
  • Big Data2
  • C/C++2
  • Claude Code118
  • Computer Basics18
  • Computer Network2
标签
JDBC Semaphore Hadoop Kafka HBOS Process Backend Dev Gradient Descent GCN Cross validation Trie Docker MLP Isolation Forest Gradient descent PyOD NMF Tornado TwoPointer Math Algorithm RabbitMQ OLSE dijkstra Filter Bayesian optimization PCA Wapper Git MonotoneStack List Dubbo Linux JVM Architecture JVM Redis JVM Performance Monitoring Embedding TCP/IP Stream API
归档
  • 十月 2026 14
  • 九月 2026 17
  • 八月 2026 30
  • 七月 2026 24
  • 六月 2026 26
  • 五月 2026 25
  • 四月 2026 16
  • 三月 2026 20
网站信息
文章数目 :
599
本站访客数 :
本站总浏览量 :
最后更新时间 :
© 2025 - 2026 By xhj框架 Hexo 8.1.2|主题 Butterfly 5.5.4