INDEX.LIST

INDEX.LIST

一、INDEX.LIST 是什么?

jar 包里面声明的索引列表,描述了 jar 包下所有的资源文件的路径,包含了应用程序及其扩展程序中的包的位置信息。

其作用就类似一个索引目录,目的是为了快速定位,类加载器会使用它来提高类的加载速度。

 jar 命令

jar 命令

一、jar命令语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
用法: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
选项:
-c 创建新档案
-t 列出档案目录
-x 从档案中提取指定的 (或所有) 文件
-u 更新现有档案
-v 在标准输出中生成详细输出
-f 指定档案文件名
-m 包含指定清单文件中的清单信息
-n 创建新档案后执行 Pack200 规范化
-e 为捆绑到可执行 jar 文件的独立应用程序指定应用程序入口点
-0 仅存储; 不使用任何 ZIP 压缩
-P 保留文件名中的前导 '/' (绝对路径) 和 ".." (父目录) 组件
-M 不创建条目的清单文件
-i 为指定的 jar 文件生成索引信息
-C 更改为指定的目录并包含其中的文件(可以理解为首先cd到指定目录)
如果任何文件为目录, 则对其进行递归处理。
清单文件名, 档案文件名和入口点名称的指定顺序与 'm', 'f' 和 'e' 标记的指定顺序相同。

 String.replaceAll()

String.replaceAll()

String.replaceAll() 方法的定义和实现是这样的:

1
2
3
public String replaceAll(String regex, String replacement) {
return Pattern.compile(regex).matcher(this).replaceAll(replacement);
}

第1个参数是正则表达式,第2个参数则是替换的字符串。

 16_03_Happen-Before原则的借助

Happen-Before原则的借助

Happen-Before 原则可以保证变量的可见性,因此可以通过 “借助” 的方式,来间接地实现对无锁保护变量的安全性保护。

“借助” 技术,一般将程序次序规则和其他某个规则(比如监视器锁规则或者 volatile 变量规则)结合起来实现的。

这种 “借助” 技术,对于代码语句的顺序非常敏感,因此很容易出错,属于一种高级技术。

 16_02_Java内存模型

Java内存模型

一、什么是内存模型?

缓存一致性问题:

  • 在多处理器系统中,每个处理器都有自己的高速缓存,而它们又共享同一主内存(Main Memory)
  • 当多处理器对同一块主内存区域进行操作时,可能会导致各自的缓存数据不一致,这就是缓存一致性问题

 16_01_并发问题来源

并发问题来源

一、缓存带来的可见性问题

  • 计算机中可以保存数据的地方有几个:寄存器、缓存、主内存
  • 原始数据都保存在主存上,最初的读取和最终的写入,都是在主存上操作
  • CPU 与主存之间存在缓存,每个 CPU 都有自己独立的的缓存
  • 操作数据时,首先要将原始数据从主存中读取到 CPU 的缓存中,然后再对缓存的数据进行操作
  • 单 CPU 下,一个线程对缓存的修改,对于另一个线程来说是可见的,因为只有一个缓存
  • 多 CPU 下,线程可能运行在不同 CPU 上,操作的是各自不同的缓存,相互之间是不可见的

 15_02_原子变量

原子变量

一、原子变量类

原子变量类相当于是一种泛化的 volatile 变量,能够支持原子和有条件的读写操作。

1.1 原子类型

  • 标量类:AtomicInteger、AtomicLong、AtomicBoolean、AtomicReference
  • 数组类:AtomicIntegerArray、AtomicLongArray、AtomicBooleanArray
  • 更新器类:AtomicIntegerFieldUpdater、AtomicLongFieldUpdater、AtomicBooleanFieldUpdater
  • 复合变量类:AtomicMarkableReference

 15_01_CAS操作

CAS 操作

一、锁的劣势

  • 采用独占的方式访问锁的守护变量
  • 获取锁,存在挂起和恢复线程的问题,这些操作都比较耗时
  • 等待锁时,线程不能做其他的事情
  • 容易出现活跃性故障,比如死锁、活锁等
  • 锁竞争激烈时,线程调度开销会非常大