@@ -1652,9 +1652,9 @@ class Animal{
16521652
16531653为了满足里式替换原则,重写有以下三个限制:
16541654
1655- - 子类方法的访问权限必须大于等于父类方法;
1656- - 子类方法的返回类型必须是父类方法返回类型或为其子类型。
1657- - 子类方法抛出的异常类型必须是父类抛出异常类型或为其子类型。
1655+ - 子类方法的访问权限必须大于等于父类方法
1656+ - 子类方法的返回类型必须是父类方法返回类型或为其子类型
1657+ - 子类方法抛出的异常类型必须是父类抛出异常类型或为其子类型
16581658
16591659```java
16601660public class ExtendsDemo {
@@ -4261,14 +4261,14 @@ LinkedList也是List的实现类:底层是**基于链表**的,增删比较
42614261LinkedList是支持双链表,定位前后的元素是非常快的,增删首尾的元素也是最快的
42624262
42634263LinkedList除了拥有List集合的全部功能还多了很多操作首尾元素的特殊功能:
4264- `public void addFirst(E e)` : 将指定元素插入此列表的开头。
4265- `public void addLast(E e)` : 将指定元素添加到此列表的结尾。
4266- `public E getFirst()` : 返回此列表的第一个元素。
4267- `public E getLast()` : 返回此列表的最后一个元素。
4268- `public E removeFirst()` : 移除并返回此列表的第一个元素。
4269- `public E removeLast()` : 移除并返回此列表的最后一个元素。
4270- `public E pop()` : 从此列表所表示的堆栈处弹出一个元素。
4271- `public void push(E e)` : 将元素推入此列表所表示的堆栈。
4264+ `public void addFirst(E e)` : 将指定元素插入此列表的开头
4265+ `public void addLast(E e)` : 将指定元素添加到此列表的结尾
4266+ `public E getFirst()` : 返回此列表的第一个元素
4267+ `public E getLast()` : 返回此列表的最后一个元素
4268+ `public E removeFirst()` : 移除并返回此列表的第一个元素
4269+ `public E removeLast()` : 移除并返回此列表的最后一个元素
4270+ `public E pop()` : 从此列表所表示的堆栈处弹出一个元素
4271+ `public void push(E e)` : 将元素推入此列表所表示的堆栈
42724272
42734273```java
42744274public class ListDemo {
@@ -12691,11 +12691,11 @@ public class Demo {
126911269128: return
1269212692```
1269312693
12694- * new 是创建对象,给对象分配堆内存 ,执行成功会将**对象引用**压入操作数栈
12694+ * new 是在堆中创建对象 ,执行成功会将**对象引用**压入操作数栈
1269512695
12696- * dup 是赋值操作数栈栈顶的内容 ,本例即为**对象引用**(对象在堆内) ,为什么需要两份引用呢?
12696+ * dup 是复制操作数栈栈顶的内容 ,本例即为**对象引用**,为什么需要两份引用呢?
1269712697
12698- * 一个要配合 invokespecial 调用该对象的构造方法 " <init>" :()V (会消耗掉栈顶一个引用)
12698+ * 一个要配合 invokespecial 调用该对象的构造方法 <init>:()V (会消耗掉栈顶一个引用)
1269912699
1270012700 * 一个要配合 astore_1 赋值给局部变量
1270112701
@@ -13561,7 +13561,7 @@ Java对象创建时机:
1356113561
1356213562##### 生命周期
1356313563
13564- 类是在运行期间第一次使用时动态加载的 ,而不是一次性加载所有类,因为一次性加载会占用很多的内存
13564+ 类是在运行期间**第一次使用时动态加载**的(不使用不加载) ,而不是一次性加载所有类,因为一次性加载会占用很多的内存
1356513565
1356613566
1356713567
@@ -13590,7 +13590,7 @@ Java对象创建时机:
1359013590
1359113591##### 加载
1359213592
13593- 加载是类加载的一个阶段,注意不要混淆。
13593+ 加载是类加载的一个阶段,注意不要混淆
1359413594
1359513595加载过程完成以下三件事:
1359613596
@@ -14033,7 +14033,7 @@ JVM 将执行状态分成了 5 个层次:
1403314033即时编译器(JIT)与解释器的区别:
1403414034
1403514035* 解释器是将字节码解释为机器码,下次即使遇到相同的字节码,仍会执行重复的解释
14036- * JIT 是将一些字节码编译为机器码,并存入 Code Cache,下次遇到相同的代码,直接执行,无需再编译
14036+ * JIT 是将一些字节码编译为机器码,并存入** Code Cache** ,下次遇到相同的代码,直接执行,无需再编译
1403714037* 解释器是将字节码解释为针对所有平台都通用的机器码
1403814038* JIT 会根据平台类型,生成平台特定的机器码
1403914039
@@ -14211,27 +14211,6 @@ JDK 自带了监控工具,位于 JDK 的 bin 目录下,其中最常用的是
1421114211
1421214212
1421314213
14214- ***
14215-
14216-
14217-
14218- ## JMM
14219-
14220- Java 内存模型是 Java MemoryModel(JMM)
14221-
14222- JMM主要是为了规定了线程和内存之间的一些关系,根据JMM的设计,系统存在一个主内存(Main Memory),Java中所有变量都存储在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存(Working Memory),工作内存中保存的是主存中某些变量的拷贝,线程对所有变量的操作都是在工作内存中进行,线程之间无法相互直接访问,变量传递均需要通过主存完成
14223-
14224- 
14225-
14226- **jvm和jmm之间的关系**:
14227-
14228- * jmm中的主内存、工作内存与jvm中的Java堆、栈、方法区等并不是同一个层次的内存划分
14229- * 这两者基本上是没有关系的,如果两者一定要勉强对应起来,那从变量、主内存、工作内存的定义来看:
14230- * 主内存主要对应于Java堆中的对象实例数据部分,而工作内存则对应于虚拟机栈中的部分区域
14231- * 从更低层次上说,主内存就直接对应于物理硬件的内存,而为了获取更好的运行速度,虚拟机(甚至是硬件系统本身的优化措施)可能会让工作内存优先存储于寄存器和高速缓存中,因为程序运行时主要访问读写的是工作内存
14232-
14233-
14234-
1423514214
1423614215
1423714216***
0 commit comments