1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-20 22:17:09 +08:00

书写更正

This commit is contained in:
yidasanqian 2019-08-09 14:14:53 +08:00
parent eef847ea4d
commit 51e082a887

View File

@ -197,7 +197,7 @@ JDK 1.8 的时候方法区HotSpot 的永久代被彻底移除了JDK1
JDK1.4 中新加入的 **NIO(New Input/Output) 类**,引入了一种基于**通道Channel** 与**缓存区Buffer** 的 I/O 方式,它可以直接使用 Native 函数库直接分配堆外内存,然后通过一个存储在 Java 堆中的 DirectByteBuffer 对象作为这块内存的引用进行操作。这样就能在一些场景中显著提高性能,因为**避免了在 Java 堆和 Native 堆之间来回复制数据**。
本机直接内存的分配不会到 Java 堆的限制,但是,既然是内存就会受到本机总内存大小以及处理器寻址空间的限制。
本机直接内存的分配不会到 Java 堆的限制,但是,既然是内存就会受到本机总内存大小以及处理器寻址空间的限制。
## 三 HotSpot 虚拟机对象探秘
@ -253,7 +253,7 @@ JDK1.4 中新加入的 **NIO(New Input/Output) 类**,引入了一种基于**
**对齐填充部分不是必然存在的,也没有什么特别的含义,仅仅起占位作用。** 因为 Hotspot 虚拟机的自动内存管理系统要求对象起始地址必须是 8 字节的整数倍,换句话说就是对象的大小必须是 8 字节的整数倍。而对象头部分正好是 8 字节的倍数1 倍或 2 倍),因此,当对象实例数据部分没有对齐时,就需要通过对齐填充来补全。
### 3.3 对象的访问定位
建立对象就是为了使用对象,我们的 Java 程序通过栈上的 reference 数据来操作堆上的具体对象。对象的访问方式虚拟机实现而定,目前主流的访问方式有**①使用句柄**和**②直接指针**两种:
建立对象就是为了使用对象,我们的 Java 程序通过栈上的 reference 数据来操作堆上的具体对象。对象的访问方式虚拟机实现而定,目前主流的访问方式有**①使用句柄**和**②直接指针**两种:
1. **句柄:** 如果使用句柄的话,那么 Java 堆中将会划分出一块内存来作为句柄池reference 中存储的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据各自的具体地址信息;
@ -322,7 +322,7 @@ System.out.println(str2==str3);//false
尽量避免多个字符串拼接,因为这样会重新创建对象。如果需要改变字符串的话,可以使用 StringBuilder 或者 StringBuffer。
### 4.2 String s1 = new String("abc");这句话创建了几个字符串对象?
**将创建 1 或 2 个字符串。如果池中已存在字符串文字“abc”则池中只会创建一个字符串“s1”。如果池中没有字符串文字“abc”那么它将首先在池中创建然后在堆空间中创建因此将创建总共 2 个字符串对象。**
**将创建 1 或 2 个字符串。如果池中已存在字符串常量“abc”则只会在堆空间创建一个字符串常量“abc”。如果池中没有字符串常量“abc”那么它将首先在池中创建然后在堆空间中创建因此将创建总共 2 个字符串对象。**
**验证:**