1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-07-28 12:22:17 +08:00

Compare commits

...

5 Commits

Author SHA1 Message Date
Samsara1994
1def2a3711
Merge ecf5f78ac0d97672191e9c259699b692f5b142d5 into 77e72b926e06dd5b85d57973f2f166bf22d7dc74 2024-11-20 15:02:42 +08:00
Guide
77e72b926e
Merge pull request #2539 from wickdynex/patch-1
Translate English comment
2024-11-19 22:33:53 +08:00
Guide
6d0fc7cbdb Update jvm-garbage-collection.md 2024-11-18 21:17:22 +08:00
Wick Dynex
e54f5ea964
Translate English comment 2024-11-18 21:00:34 +08:00
Samsara1994
ecf5f78ac0
错别字修改
错别字修改
2024-11-04 14:54:34 +08:00
3 changed files with 12 additions and 10 deletions

View File

@ -86,7 +86,7 @@ ER 图由下面 3 个要素组成:
为什么不要用外键呢?大部分人可能会这样回答:
1. **增加了复杂性:** a. 每次做 DELETE 或者 UPDATE 都必须考虑外键约束,会导致开发的时候很痛苦, 测试数据极为不方便; b. 外键的主从关系是定的,假如天需求有变化,数据库中的这个字段根本不需要和其他表有关联的话就会增加很多麻烦。
1. **增加了复杂性:** a. 每次做 DELETE 或者 UPDATE 都必须考虑外键约束,会导致开发的时候很痛苦, 测试数据极为不方便; b. 外键的主从关系是定的,假如天需求有变化,数据库中的这个字段根本不需要和其他表有关联的话就会增加很多麻烦。
2. **增加了额外工作**:数据库需要增加维护外键的工作,比如当我们做一些涉及外键字段的增,删,更新操作之后,需要触发相关操作去检查,保证数据的的一致性和正确性,这样会不得不消耗数据库资源。如果在应用层面去维护的话,可以减小数据库压力;
3. **对分库分表不友好**:因为分库分表下外键是无法生效的。
4. ……

View File

@ -159,19 +159,22 @@ public class ArrayList<E> extends AbstractList<E>
* @param minCapacity 所需的最小容量
*/
public void ensureCapacity(int minCapacity) {
//如果是trueminExpand的值为0如果是false,minExpand的值为10
// 如果不是默认空数组则minExpand的值为0
// 如果是默认空数组则minExpand的值为10
int minExpand = (elementData != DEFAULTCAPACITY_EMPTY_ELEMENTDATA)
// any size if not default element table
// 如果不是默认元素表,则可以使用任意大小
? 0
// larger than default for default empty table. It's already
// supposed to be at default size.
// 如果是默认空数组,它应该已经是默认大小
: DEFAULT_CAPACITY;
//如果最小容量大于已有的最大容量
// 如果最小容量大于已有的最大容量
if (minCapacity > minExpand) {
// 根据需要的最小容量,确保容量足够
ensureExplicitCapacity(minCapacity);
}
}
// 根据给定的最小容量和当前数组元素来计算所需容量。
private static int calculateCapacity(Object[] elementData, int minCapacity) {
// 如果当前数组元素为空数组(初始情况),返回默认容量和最小容量中的较大值作为所需容量
@ -429,8 +432,7 @@ public class ArrayList<E> extends AbstractList<E>
}
/*
* Private remove method that skips bounds checking and does not
* return the value removed.
* 该方法为私有的移除方法,跳过了边界检查,并且不返回被移除的值。
*/
private void fastRemove(int index) {
modCount++;
@ -438,7 +440,7 @@ public class ArrayList<E> extends AbstractList<E>
if (numMoved > 0)
System.arraycopy(elementData, index + 1, elementData, index,
numMoved);
elementData[--size] = null; // clear to let GC do its work
elementData[--size] = null; // 在移除元素后,将该位置的元素设为 null以便垃圾回收器GC能够回收该元素。
}
/**

View File

@ -322,7 +322,7 @@ JDK1.2 以后Java 对引用的概念进行了扩充,将引用分为强引
![标记-清除算法](https://oss.javaguide.cn/github/javaguide/java/jvm/mark-and-sweep-garbage-collection-algorithm.png)
关于具体是标记可回收对象还是不可回收对象,众说纷纭,两种说法其实都没问题,我个人更倾向于是者。
关于具体是标记可回收对象(不可达对象)还是不可回收对象(可达对象),众说纷纭,两种说法其实都没问题,我个人更倾向于是者。
如果按照前者的理解,整个标记-清除过程大致是这样的: