1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-08-14 05:21:42 +08:00

Compare commits

..

No commits in common. "0ce0cb559af4f5ede4d6746e684ca0bb78482fdb" and "7d5d8b2e48860e4bc726a9ee9db80523d008926b" have entirely different histories.

4 changed files with 5 additions and 5 deletions

View File

@ -259,7 +259,7 @@ public static int[] shellSort(int[] arr) {
- **稳定性**:稳定
- **时间复杂度** 最佳O(nlogn) 最差O(n2) 平均O(nlogn)
- **空间复杂度** `O(1)`
- **空间复杂度** `O(n)`
## 归并排序 (Merge Sort)

View File

@ -381,7 +381,7 @@ SELECT ... FOR UPDATE;
意向锁是表级锁,共有两种:
- **意向共享锁Intention Shared LockIS 锁)**:事务有意向对表中的某些记录加共享锁S 锁),加共享锁前必须先取得该表的 IS 锁。
- **意向共享锁Intention Shared LockIS 锁)**事务有意向对表中的某些加共享锁S 锁),加共享锁前必须先取得该表的 IS 锁。
- **意向排他锁Intention Exclusive LockIX 锁)**事务有意向对表中的某些记录加排他锁X 锁),加排他锁之前必须先取得该表的 IX 锁。
意向锁是有数据引擎自己维护的,用户无法手动操作意向锁,在为数据行加共享 / 排他锁之前InooDB 会先获取该数据行所在在数据表的对应意向锁。

View File

@ -104,7 +104,7 @@ AOT 可以提前编译节省启动时间,那为什么不全部使用这种编
1. Oracle JDK 大概每 6 个月发一次主要版本(从 2014 年 3 月 JDK 8 LTS 发布到 2017 年 9 月 JDK 9 发布经历了长达 3 年多的时间,所以并不总是 6 个月),而 OpenJDK 版本大概每三个月发布一次。但这不是固定的,我觉得了解这个没啥用处。详情参见:[https://blogs.oracle.com/java-platform-group/update-and-faq-on-the-java-se-release-cadence](https://blogs.oracle.com/java-platform-group/update-and-faq-on-the-java-se-release-cadence) 。
2. OpenJDK 是一个参考模型并且是完全开源的,而 Oracle JDK 是 OpenJDK 的一个实现并不是完全开源的个人观点众所周知JDK 原来是 SUN 公司开发的,后来 SUN 公司又卖给了 Oracle 公司Oracle 公司以 Oracle 数据库而著名,而 Oracle 数据库又是闭源的,这个时候 Oracle 公司就不想完全开源了,但是原来的 SUN 公司又把 JDK 给开源了,如果这个时候 Oracle 收购回来之后就把他给闭源,必然会引很多 Java 开发者的不满,导致大家对 Java 失去信心,那 Oracle 公司收购回来不就把 Java 烂在手里了吗然后Oracle 公司就想了个骚操作,这样吧,我把一部分核心代码开源出来给你们玩,并且我要和你们自己搞的 JDK 区分下,你们叫 OpenJDK我叫 Oracle JDK我发布我的你们继续玩你们的要是你们搞出来什么好玩的东西我后续发布 Oracle JDK 也会拿来用一下一举两得OpenJDK 开源项目:[https://github.com/openjdk/jdk](https://github.com/openjdk/jdk)
2. OpenJDK 是一个参考模型并且是完全开源的,而 Oracle JDK 是 OpenJDK 的一个实现并不是完全开源的个人观点众所周知JDK 原来是 SUN 公司开发的,后来 SUN 公司又卖给了 Oracle 公司Oracle 公司以 Oracle 数据库而著名,而 Oracle 数据库又是闭源的,这个时候 Oracle 公司就不想完全开源了,但是原来的 SUN 公司又把 JDK 给开源了,如果这个时候 Oracle 收购回来之后就把他给闭源,必然会引很多 Java 开发者的不满,导致大家对 Java 失去信心,那 Oracle 公司收购回来不就把 Java 烂在手里了吗然后Oracle 公司就想了个骚操作,这样吧,我把一部分核心代码开源出来给你们玩,并且我要和你们自己搞的 JDK 区分下,你们叫 OpenJDK我叫 Oracle JDK我发布我的你们继续玩你们的要是你们搞出来什么好玩的东西我后续发布 Oracle JDK 也会拿来用一下一举两得OpenJDK 开源项目:[https://github.com/openjdk/jdk](https://github.com/openjdk/jdk)
3. Oracle JDK 比 OpenJDK 更稳定肯定啦Oracle JDK 由 Oracle 内部团队进行单独研发的,而且发布时间比 OpenJDK 更长质量更有保障。OpenJDK 和 Oracle JDK 的代码几乎相同OpenJDK 的代码是从 Oracle JDK 代码派生出来的,可以理解为在 Oracle JDK 分支上拉了一条新的分支叫 OpenJDK所以大部分代码相同但 Oracle JDK 有更多的类和一些错误修复。因此,如果您想开发企业/商业软件,我建议您选择 Oracle JDK因为它经过了彻底的测试和稳定。某些情况下有些人提到在使用 OpenJDK 可能会遇到了许多应用程序崩溃的问题,但是,只需切换到 Oracle JDK 就可以解决问题;

View File

@ -71,7 +71,7 @@ Java 是最早尝试提供内存模型的编程语言。由于早期内存模型
**为什么要遵守这些并发相关的原则和规范呢?** 这是因为并发编程下,像 CPU 多级缓存和指令重排这类设计可能会导致程序运行出现一些问题。就比如说我们上面提到的指令重排序就可能会让多线程程序的执行出现问题为此JMM 抽象了 happens-before 原则(后文会详细介绍到)来解决这个指令重排序问题。
JMM 说白了就是定义了一些规范来解决这些问题,开发者可以利用这些规范更方便地开发多线程程序。对于 Java 开发者说,你不需要了解底层原理,直接使用并发相关的一些关键字和类(比如 `volatile``synchronized`、各种 `Lock`)即可开发出并发安全的程序。
JMM 说白了就是定义了一些规范来解决这些问题,开发者可以利用这些规范更方便地开发多线程程序。对于 Java 开发者说,你不需要了解底层原理,直接使用并发相关的一些关键字和类(比如 `volatile``synchronized`、各种 `Lock`)即可开发出并发安全的程序。
### JMM 是如何抽象线程和主内存之间的关系?
@ -229,4 +229,4 @@ happens-before 与 JMM 的关系用《Java 并发编程的艺术》这本书中
- 《深入浅出 Java 多线程》http://concurrent.redspider.group/RedSpider.html
- Java 内存访问重排序的研究https://tech.meituan.com/2014/09/23/java-memory-reordering.html
- 嘿,同学,你要的 Java 内存模型 (JMM) 来了https://xie.infoq.cn/article/739920a92d0d27e2053174ef2
- JSR 133 (Java Memory Model) FAQhttps://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html
- JSR 133 (Java Memory Model) FAQhttps://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html