auto commit
This commit is contained in:
parent
ff7187aeb8
commit
b9f9e9807e
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1,2 +1,2 @@
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
*.txt
|
||||||
|
|
|
@ -586,7 +586,7 @@ protected void finalize() throws Throwable {}
|
||||||
**1. equals() 与 == 的区别**
|
**1. equals() 与 == 的区别**
|
||||||
|
|
||||||
- 对于基本类型,== 判断两个值是否相等,基本类型没有 equals() 方法。
|
- 对于基本类型,== 判断两个值是否相等,基本类型没有 equals() 方法。
|
||||||
- 对于引用类型,== 判断两个实例是否引用同一个对象,而 equals() 则是根据引用的对象的 equals() 方法的具体实现来进行比较。
|
- 对于引用类型,== 判断两个实例是否引用同一个对象,而 equals() 判断引用的对象是否等价,根据引用的对象的 equals() 方法的具体实现来进行比较。
|
||||||
|
|
||||||
```java
|
```java
|
||||||
Integer x = new Integer(1);
|
Integer x = new Integer(1);
|
||||||
|
|
|
@ -1419,7 +1419,9 @@ public final int incrementAndGet() {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
以下代码是 getAndAddInt() 源码,var1 指示对象内存地址,var2 指示该字段相对对象内存地址的偏移,var4 指示操作需要加的数值,这里为 1。通过 getIntVolatile(var1, var2) 得到旧的预期值,通过调用 compareAndSwapInt() 来进行 CAS 比较,如果 该字段内存地址中的值 ==var5,那么就更新内存地址为 var1+var2 的变量为 var5+var4。可以看到 getAndAddInt() 在一个循环中进行,发生冲突的做法是不断的进行重试。
|
以下代码是 getAndAddInt() 源码,var1 指示对象内存地址,var2 指示该字段相对对象内存地址的偏移,var4 指示操作需要加的数值,这里为 1。通过 getIntVolatile(var1, var2) 得到旧的预期值,通过调用 compareAndSwapInt() 来进行 CAS 比较,如果该字段内存地址中的值 ==var5,那么就更新内存地址为 var1+var2 的变量为 var5+var4。
|
||||||
|
|
||||||
|
可以看到 getAndAddInt() 在一个循环中进行,发生冲突的做法是不断的进行重试。
|
||||||
|
|
||||||
```java
|
```java
|
||||||
public final int getAndAddInt(Object var1, long var2, int var4) {
|
public final int getAndAddInt(Object var1, long var2, int var4) {
|
||||||
|
|
|
@ -627,7 +627,7 @@ public static void main(String[] args) {
|
||||||
|
|
||||||
从 Java 开发人员的角度看,类加载器可以划分得更细致一些:
|
从 Java 开发人员的角度看,类加载器可以划分得更细致一些:
|
||||||
|
|
||||||
- 启动类加载器(Bootstrap ClassLoader)此类加载器负责将存放在 <JRE_HOME>\lib 目录中的,或者被 -Xbootclasspath 参数所指定的路径中的,并且是虚拟机识别的(仅按照文件名识别,如 rt.jar,名字不符合的类库即使放在 lib 目录中也不会被加载)类库加载到虚拟机内存中。启动类加载器无法被 Java 程序直接引用,用户在编写自定义类加载器时,如果需要把加载请求委派给启动类加载器,直接使用 null 代替即可。
|
- 启动类加载器(Bootstrap ClassLoader)此类加载器负责将存放在 <JAVA_HOME>\lib 目录中的,或者被 -Xbootclasspath 参数所指定的路径中的,并且是虚拟机识别的(仅按照文件名识别,如 rt.jar,名字不符合的类库即使放在 lib 目录中也不会被加载)类库加载到虚拟机内存中。启动类加载器无法被 Java 程序直接引用,用户在编写自定义类加载器时,如果需要把加载请求委派给启动类加载器,直接使用 null 代替即可。
|
||||||
|
|
||||||
- 扩展类加载器(Extension ClassLoader)这个类加载器是由 ExtClassLoader(sun.misc.Launcher$ExtClassLoader)实现的。它负责将 <JRE_HOME>/lib/ext 或者被 java.ext.dir 系统变量所指定路径中的所有类库加载到内存中,开发者可以直接使用扩展类加载器。
|
- 扩展类加载器(Extension ClassLoader)这个类加载器是由 ExtClassLoader(sun.misc.Launcher$ExtClassLoader)实现的。它负责将 <JRE_HOME>/lib/ext 或者被 java.ext.dir 系统变量所指定路径中的所有类库加载到内存中,开发者可以直接使用扩展类加载器。
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user