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