Skip to content

Commit 77b89d6

Browse files
committed
Merge branch 'master' of https://github.com/Snailclimb/JavaGuide
2 parents 535c869 + f0821b3 commit 77b89d6

File tree

4 files changed

+59
-48
lines changed

4 files changed

+59
-48
lines changed

docs/java/basic/reflection.md

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,39 @@
22

33
JAVA 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 java 语言的反射机制。
44

5-
### 获取 Class 对象的两种方式
5+
### 获取 Class 对象的四种方式
66

7-
如果我们动态获取到这些信息,我们需要依靠 Class 对象。Class 类对象将一个类的方法、变量等信息告诉运行的程序。Java 提供了三种方式获取 Class 对象:
7+
如果我们动态获取到这些信息,我们需要依靠 Class 对象。Class 类对象将一个类的方法、变量等信息告诉运行的程序。Java 提供了四种方式获取 Class 对象:
88

99
1.知道具体类的情况下可以使用:
1010

1111
```java
1212
Class alunbarClass = TargetObject.class;
1313
```
1414

15-
但是我们一般是不知道具体类的,基本都是通过遍历包下面的类来获取 Class 对象
15+
但是我们一般是不知道具体类的,基本都是通过遍历包下面的类来获取 Class 对象,通过此方式获取Class对象不会进行初始化
1616

1717
2.通过 `Class.forName()`传入类的路径获取:
1818

1919
```java
2020
Class alunbarClass1 = Class.forName("cn.javaguide.TargetObject");
2121
```
22+
Class.forName(className)方法,内部实际调用的是一个native方法 forName0(className, true, ClassLoader.getClassLoader(caller), caller);
23+
24+
第2个boolean参数表示类是否需要初始化,Class.forName(className)默认是需要初始化。
25+
26+
一旦初始化,就会触发目标对象的 static块代码执行,static参数也会被再次初始化。
27+
2228
3.通过对象实例`instance.getClass()`获取:
23-
```
24-
Employee e;
29+
```java
30+
Employee e = new Employee();
2531
Class alunbarClass2 = e.getClass();
2632
```
33+
4.通过类加载器`xxxClassLoader.loadClass()`传入类路径获取
34+
```java
35+
class clazz = ClassLoader.LoadClass("cn.javaguide.TargetObject");
36+
```
37+
通过类加载器获取Class对象不会进行初始化,意味着不进行包括初始化等一些列步骤,静态块和静态对象不会得到执行
2738

2839
### 代码实例
2940

docs/java/jvm/JVM垃圾回收.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ Parallel Scavenge 收集器也是使用复制算法的多线程收集器,它
401401
402402
```
403403
404-
**Parallel Scavenge 收集器关注点是吞吐量(高效率的利用 CPU)。CMS 等垃圾收集器的关注点更多的是用户线程的停顿时间(提高用户体验)。所谓吞吐量就是 CPU 中用于运行用户代码的时间与 CPU 总消耗时间的比值。** Parallel Scavenge 收集器提供了很多参数供用户找到最合适的停顿时间或最大吞吐量,如果对于收集器运作不太了解的话,手工优化存在困难的话可以选择把内存管理优化交给虚拟机去完成也是一个不错的选择
404+
**Parallel Scavenge 收集器关注点是吞吐量(高效率的利用 CPU)。CMS 等垃圾收集器的关注点更多的是用户线程的停顿时间(提高用户体验)。所谓吞吐量就是 CPU 中用于运行用户代码的时间与 CPU 总消耗时间的比值。** Parallel Scavenge 收集器提供了很多参数供用户找到最合适的停顿时间或最大吞吐量,如果对于收集器运作不太了解,手工优化存在困难的时候,使用Parallel Scavenge收集器配合自适应调节策略,把内存管理优化交给虚拟机去完成也是一个不错的选择
405405
406406
**新生代采用复制算法,老年代采用标记-整理算法。**
407407
![Parallel Scavenge 收集器 ](./pictures/jvm垃圾回收/parllel-scavenge收集器.png)

0 commit comments

Comments
 (0)