Skip to content

Commit

Permalink
data
Browse files Browse the repository at this point in the history
  • Loading branch information
deipss committed Feb 26, 2024
1 parent 6745117 commit e47b0a2
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 17 deletions.
24 changes: 15 additions & 9 deletions docs/Java/Class Loader.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ nav_order: 2
2. 如果类没有被加载,则先委托父类加载(父类加载时会判断该类有没有被自己加载过),如果父类加载过则返回;如果没被加载过则继续向上委托。
3. 如果一直委托都无法加载,子类加载器才会尝试自己加载。

```text
```java
protected Class<?> loadClass(String name, boolean resolve)
throws ClassNotFoundException
{
Expand Down Expand Up @@ -124,7 +124,7 @@ protected Class<?> loadClass(String name, boolean resolve)

以jvm-sandbox-repeater自定义的类加载器为例,

```text
```java
public JarFileLifeCycleManager(String jarFilePath, PluginClassLoader.Routing ... routingArray) {
File file = new File(jarFilePath);
if (!file.exists()) {
Expand Down Expand Up @@ -160,13 +160,13 @@ ApplicationModel.instance().setConfig(config);
![img.png](img/class_loader_jdbc_driver.png)

```java
java.security.AccessController#doPrivileged(java.security.PrivilegedAction<T>)
// java.security.AccessController#doPrivileged(java.security.PrivilegedAction<T>)
static {
loadInitialDrivers();
println("JDBC DriverManager initialized");
}

java.util.ServiceLoader#load(java.lang.Class<S>)
// java.util.ServiceLoader#load(java.lang.Class<S>)
public static <S> ServiceLoader<S> load(Class<S> service) {
// 使用应用程序类加载器来加载驱动程序
// 可以手工设置当前的线程上下文的类加载器 Thread.currentThread().setContextClassLoader();
Expand Down Expand Up @@ -194,15 +194,15 @@ ApplicationModel.instance().setConfig(config);

使用findLoadedClass方法

```text
```java
final Class<?> loadedClass = findLoadedClass(name);
```

### 1.5.3. 等待一个类加载完成

参加sandbox-repeater的实现,

```text
```java
while (isPreloading && --timeout > 0 && ClassloaderBridge.instance().findClassInstances(routing.targetClass).size() == 0) {
try {
Thread.sleep(100);
Expand Down Expand Up @@ -299,7 +299,9 @@ classDiagram
加载器,所以在沙箱加载中,可以使用业务代码的类代码器,如Spring的LauncherURLClassLoader去
加载类,如上图中,****线的关联关系。

- DelegateBizClassLoader delegateBizClassLoader = BusinessClassLoaderHolder.getBussinessClassLoader();
```java
DelegateBizClassLoader delegateBizClassLoader = BusinessClassLoaderHolder.getBusinessClassLoader();
```

下面的代码中,
```java
Expand Down Expand Up @@ -351,10 +353,14 @@ classDiagram
```

# 2. jdk9的类加载器
- 启动类加载器,使用java编码,在jdk.
- 启动类加载器,使用java编码,在jdk。不再使用native方法去实现

# 3. Internal Name
在 .java 文件中,我们使用 Java 语言来编写代码,使用类名的形式是Fully Qualified Class Name,例如 java.lang.String;将 .java 文件编译之后,就会生成 .class 文件;在 .class 文件中,类名的形式会发生变化,称之为Internal Name,例如 java/lang/String。因此,将Fully Qualified Class Name转换成Internal Name的方式就是,将 . 字符转换成 / 字符。
在 .java 文件中,我们使用 Java 语言来编写代码,使用类名的形式是Fully Qualified Class Name,
例如 java.lang.String;将 .java 文件编译之后,就会生成 .class 文件;
在 .class 文件中,类名的形式会发生变化,称之为Internal Name,
例如 java/lang/String。因此,将Fully Qualified Class Name转换成Internal Name的方式
就是,将 . 字符转换成 / 字符。

# 4. 参考文献

Expand Down
10 changes: 6 additions & 4 deletions docs/Java/JUC.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,9 @@ public class SemaphoreDemo {
- https://leetcode-cn.com/problems/building-h2o/
- https://www.cnblogs.com/dolphin0520/p/3920373.html

当共享变量被一个线程修改后,会立即通过其他线程。 volatile有利于保证变量的原子性,对于i++这样的复合操作在高并发的情况下不行。在Thread类中,线程名字段就是用volatile修饰的。
当共享变量被一个线程修改后,会立即通过其他线程。
volatile有利于保证变量的原子性,对于i++这样的复合操作在高并发的情况下不行。
在Thread类中,线程名字段就是用volatile修饰的。

```java

Expand Down Expand Up @@ -164,9 +166,9 @@ class H2O {

# 3. CountDownLatch

1. 创建CountDownLatch对象<br />
2. 调用其实例方法 `await()`,让当前线程等待<br />
3. 调用 `countDown()`方法,让计数器减1<br />
1. 创建CountDownLatch对象
2. 调用其实例方法 `await()`,让当前线程等待
3. 调用 `countDown()`方法,让计数器减1
4. 当计数器变为0的时候, `await()`方法会返回

## 3.1. 模拟处理sheet
Expand Down
8 changes: 4 additions & 4 deletions docs/Java/Jvm垃圾回收.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ parent: Java

# 2. 堆

> JVM堆是Java堆内存,它是Java堆中对象分配的空间。
> JVM堆的大小由最大堆大小(-Xmx)和初始堆大小(-Xms)参数控制。
> JVM堆的默认大小取决于JDK版本和操作系统。在某些JDK版本中,
> JVM堆的默认最大堆大小为1GB,初始堆大小为物理内存的1/64。
- 1 JVM堆是Java堆内存,它是Java堆中对象分配的空间。
- 2 JVM堆的大小由最大堆大小(-Xmx)和初始堆大小(-Xms)参数控制。
- 3 JVM堆的默认大小取决于JDK版本和操作系统。在某些JDK版本中,
- 4 JVM堆的默认最大堆大小为1GB,初始堆大小为物理内存的1/64。

## 2.1. 引用计数与可达性分析

Expand Down

0 comments on commit e47b0a2

Please sign in to comment.