网站Logo GESONG

没用的知识增加了

gesong
5
2025-05-22

分支预测

分支预测是现代CPU用来解决控制冒险(Control Hazard)的关键技术,它通过预测程序分支的执行路径来保持指令流水线的高效运转。

在程序中可以使用if-else优化switch,如果程序运行时某个分支概率较高,可以先让概率高的分支走if,其他的条件在else里走switch

集合重新赋值

	private SpringApplicationRunListeners getRunListeners(String[] args) {
		ArgumentResolver argumentResolver = ArgumentResolver.of(SpringApplication.class, this);
		argumentResolver = argumentResolver.and(String[].class, args);
		List<SpringApplicationRunListener> listeners = getSpringFactoriesInstances(SpringApplicationRunListener.class,
				argumentResolver);
		SpringApplicationHook hook = applicationHook.get();
		SpringApplicationRunListener hookListener = (hook != null) ? hook.getRunListener(this) : null;
		if (hookListener != null) {
			listeners = new ArrayList<>(listeners);
			listeners.add(hookListener);
		}
		return new SpringApplicationRunListeners(logger, listeners, this.applicationStartup);
	}

springboot源码中有如上这段代码,为什么要重新listeners = new ArrayList<>(listeners);再add,不是直接add?

  • 保证不可变集合的安全性

getSpringFactoriesInstances() 返回的 listeners 可能是不可变列表(如 Collections.unmodifiableList())。 直接调用 add() 会抛出 UnsupportedOperationException

通过创建新列表,避免对原始集合的修改风险,无论它是否可变。

  • 隔离变更

如果 listeners 是共享的全局集合(如缓存),直接修改会影响其他部分的逻辑。 创建新列表可以隔离变更,确保线程安全和行为可预测。

  • 代码自文档化

动物装饰