新文章

This commit is contained in:
2025-07-18 23:22:22 +08:00
parent 527aa64126
commit cd5d3684ef
2 changed files with 73 additions and 0 deletions

View File

@@ -0,0 +1,32 @@
---
title: JVM内存模型分区
published: 2025-07-18
description: ''
image: ''
tags: [JVM,内存模型]
category: 'Java'
draft: false
lang: ''
---
# JVM内存模型分⼏个区每个区放什么对象
![image.png](https://blog.meowrain.cn/api/i/2025/07/18/12an835-1.webp)
![img](https://blog.meowrain.cn/api/i/2025/07/18/12b818c-1.webp)
![image.png](https://blog.meowrain.cn/api/i/2025/07/18/12b1jr4-1.webp)
![image.png](https://blog.meowrain.cn/api/i/2025/07/18/12awf70-1.webp)
分为方法区,堆,本地方法栈,虚拟机栈,程序计数器
方法区元空间用于存储已经被虚拟机加载的类信息常量静态变量等数据。虽然方法区被描述为堆的逻辑部分但有”非堆“的别名。方法区可以选择不实现垃圾收集内存不足的时候会抛出OutOfMemoryError异常。
程序计数器: 当前线程所执行的字节码的行号指示器存储当前线程正在执行的Java方法的JVM指令地址。
JVM虚拟机栈每个线程都有自己独立的Java虚拟机栈生命周期和线程相同每个方法在执行的时候都会创建一个栈帧用来存储局部变量表操作数栈动态链接方法出口等信息。
本地方法栈: 与Java虚拟机栈差不读多执行本地方法其中堆和方法区是线程共有的。
Java堆 存放和管理对象实例,被所有线程共享。

View File

@@ -0,0 +1,41 @@
---
title: Java类加载器与双亲委派机制
published: 2025-07-18
description: ''
image: ''
tags: [Java,类加载器,ClassLoader,双亲委派机制]
category: 'Java'
draft: false
lang: ''
---
# Java类加载器和双亲委派机制
[Java 虚拟机之类加载](https://dunwu.github.io/waterdrop/pages/3e37ea6e/#%E7%B1%BB%E5%8A%A0%E8%BD%BD%E6%9C%BA%E5%88%B6)
## Java类加载器层级
Java类加载器从高到低分为以下层级以JDK 8为例
1. **启动类加载器Bootstrap ClassLoader** 加载JRE的`lib`目录下的核心类库(如`rt.jar`)。
2. **扩展类加载器Extension ClassLoader** :加载`lib/ext`目录下的扩展类。
3. **应用程序类加载器Application ClassLoader** 加载用户类路径ClassPath下的类。
4. **自定义类加载器**:用户可自定义类加载器(需继承`ClassLoader`)。
## 什么是双亲委派机制
**双亲委派机制** 是Java类加载器的核心工作机制。它的核心思想是当一个类加载器需要加载某个类时不会直接尝试自己加载而是将这个请求**逐级向上委托给父类加载器**处理。只有当所有父类加载器都无法完成加载时,子类加载器才会尝试自己加载。
## ## 示意图
![image.png](https://blog.meowrain.cn/api/i/2025/07/18/12c4ooa-1.webp)
![image.png](https://blog.meowrain.cn/api/i/2025/07/18/12c4ix7-1.webp)
[深入理解Java双亲委派机制原理、意义与实战示例 - 云熙橙 - 博客园](https://www.cnblogs.com/xchangting/articles/18744083)
## 双亲委派机制的好处
1. **保障核心类库的安全**防止用户自定义的类(如`java.lang.Object`覆盖JVM核心类。例如如果用户编写了一个恶意`String`类,双亲委派机制会优先加载核心库中的`String`,从而避免安全隐患。
2. **避免重复加载**同一个类只会被一个类加载器加载一次,防止内存中出现多个相同类的副本,确保类的唯一性。
3. **实现代码隔离**不同类加载器加载的类属于不同的命名空间天然支持模块化如Tomcat为每个Web应用分配独立的类加载器