1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-08-01 16:28:03 +08:00

Compare commits

..

1 Commits

2 changed files with 9 additions and 11 deletions

View File

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

View File

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