JVM字节码和类加载
类文件结构12345public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); }} 他的.class文件为: 12345678910111213141516171819202122232425262728293031323334353637380000000 ca fe ba be 00 00 00 34 00 23 0a 00 06 00 15 09 0000020 00 16 00 17 08 00 18 0a 00 19 00 1a 07 00 1b 07 0000040 00 1c 01 00 06 3c 69 6e 69 74 3e 01 00 03 28 29 0000060 56 01 00 04 43 6f 64 65 01 00 0f 4c 69 6e 65 4e 0000100 75 6d 62 65 72 54 61 62 6...
代码随想录数组
数组理论基础数组是存放在连续内存空间上的相同类型数据的集合。 特点: 随机访问快: 只要知道下标,可以在 $O(1)$ 时间内找到元素。 增删成本高: 数组大小固定。如果你要在中间插入一个数,后面的所有元素都要往后挪。 二分:数组是 .length(属性),字符串是 .length()(方法) 错误: 问题: mid 只在循环外部计算了一次,循环内部没有更新 指针移动方式错误(每次只移动一步,而不是折半) 改正: 1234567891011121314151617class Solution { public int search(int[] nums, int target) { int left = 0; int right = nums.length - 1; while (left <= right) { int mid = left + (right - left) / 2; // 在循环内部重新计算 mid if (nums[mi...
JVM垃圾回收
如何判断对象可以被回收引用计数法当一个对象被一个其他变量引用时,该对象的计数加一;当一个对象不再被某一个对象引用时,该对象的计数减一;当一个对象的计数为 0 时,即没有被任何变量引用,那么该对象就可以被回收。 弊端:当两个对象发生「循环引用」时,每个对象的计数始终为 1,从而导致两个对象始终无法被回收。 可达性分析算法扫描堆中的对象,判断能否以 GC Root 对象为起点的引用链找到待回收的对象,如果找不到,表示它可以被回收。 哪些对象可以作为 GC Root 对象呢? 虚拟机栈(栈帧中的本地变量表)中引用的对象方法区中类静态属性引用的对象方法区中常量引用的对象本地方法栈中 JNI(即一般说的 native 方法)引用的对象所有被同步锁(synchronized 关键字)持有的对象 引用类型对回收的影响强引用只有所有 GC Roots 对象都不通过「强引用」引用该对象,该对象才能被垃圾回收 软引用(SoftReference)仅有软引用引用该对象时,在垃圾回收后,内存仍不足时会再次触发垃圾回收,回收软引用对象可以配合引用队列来释放软引用自身 弱引用(WeakReference)...
JVM内存结构
JVM学习路线: 视频:04_学习路线_哔哩哔哩_bilibili 程序计数器下面是 JVM 指令与对应 Java 代码的一个示例: 1234567891011121314151617181920 二进制字节码 Java源码0: getstatic #20 // PrintStream out = System.out; 3: astore_1 // -- 4: aload_1 // out.println(1); 5: iconst_1 // -- 6: invokevirtual #26 // -- 9: aload_1 // out.println(2); ...
ruoyi框架
这里版本为 前后端分离版本 (RuoYi-Vue)。如果环境(JDK, Maven, MySQL, Redis, Node.js)基本齐备,按以下步骤操作,通常 15-20分钟 就能跑通。 第一阶段:环境准备 (必做)在开始之前,请确保电脑上已经安装并运行了以下软件。如果缺少任何一个,项目都跑不起来。 JDK: 1.8 (推荐) 或 11/17 (取决于下载的版本,默认 1.8 最稳)。 MySQL: 5.7 或 8.0+ (记得 root 密码)。 Redis: 必须安装并启动 (若依用它存 Token 和缓存,没它后端会报错)。 Maven: 配置好阿里云镜像,否则下载依赖会很慢。 Node.js: 前端运行环境 (建议 v14 或 v16,版本过高有时会有依赖兼容问题,但也通常可行)。 第二阶段:获取代码与数据库1. 下载代码去 Gitee (码云) 下载速度最快。 地址:https://gitee.com/y_project/RuoYi-Vue 可以 git clone 或者直接下载 ZIP 包并解压。 2. 初始化数据库 (关键) 打开数据库管理工...
