一、计算机组成心脏——冯诺依曼体系
1. 核心部件对比
组件 | 作用 | 相当于人体器官 |
---|---|---|
CPU | 处理计算和决策 | 大脑(思考中枢) |
内存 | 临时存储运行数据 | 短期记忆 |
硬盘 | 永久存储文件 | 长期记忆 |
输入设备 | 接收用户指令 | 感官(眼睛/耳朵) |
输出设备 | 显示结果 | 动作(手/嘴巴) |
2. 日常开发中的体现
- SSD快速启动项目:内存将代码加载到高速区域 → CPU快速处理
- 程序卡顿分析:内存不足时需要与硬盘频繁交换数据 → 引发卡顿
二、程序执行底层原理
1. CPU工作四步循环
// Java程序片段示例
public static void main(String[] args) {
int x = 10 + 20;
System.out.println(x);
}
步骤 | CPU实际处理 | Java对应行为 |
---|---|---|
取指 | 从内存地址0x7FF读取指令ADD 10, 20 |
执行加法运算 |
解码 | 识别要做加法运算并准备寄存器 | JVM解释字节码 |
执行 | ALU物理线路通过门电路完成二进制加法 | 计算结果x=30 |
写回 | 将结果存入内存地址0x0100 | 变量x内存分配 |
2. 开发者必知特性
- 缓存重要性:L1/L2缓存读取0.5ns vs 内存读取100ns(差200倍)
- 流水线优化:I7处理器14级流水线 -> 多条指令并发处理
三、语言演化与编程发展
编程语言进化树
机器语言 (10110011) → 汇编语言 (MOV AX,5) → C/C++ → Java/Python
Java核心优势
// Java示例:自动内存管理 vs C手动管理
// C语言
int* arr = (int*)malloc(10*sizeof(int));
free(arr); // 必须手动释放
// Java语言
int[] arr = new int[10]; // 自动回收
特性 | C语言 | Java | 对开发影响 |
---|---|---|---|
内存管理 | 手动 | 自动GC | 减少内存泄漏风险 |
指针操作 | 直接 | 引用代替 | 提高代码安全性 |
跨平台性 | 需重新编译 | 字节码通用 | "一次编写处处运行" |
四、操作系统核心机制
1. 进程管理三要素
- 程序块:能够被调度到CPU执行的程序代码段(程序还能被多个进程共享,也就是说多个进程可以运行同一个程序)
- 数据块:存储全局变量、常量以及动态分配的数据空间
- 控制块 PCB:一个进程的身份证。 在进程创建时被建立,之后常驻内存,直到进程结束时才被删除
2. 进程调度类比
餐厅场景:
- 厨师=CPU核心
- 订单列表=就绪队列
- 时间片轮转=每个订单处理2分钟切换
- 优先级调度=VIP订单优先
3. Java多线程开发要点
// 典型的生产者-消费者模型
public class Buffer {
private Queue<Integer> queue = new LinkedList<>();
private int capacity;
public synchronized void produce(int item) throws InterruptedException {
while(queue.size() == capacity) {
wait(); // 释放锁等待
}
queue.add(item);
notifyAll(); // 通知消费者
}
public synchronized int consume() throws InterruptedException {
while(queue.isEmpty()) {
wait();
}
int item = queue.remove();
notifyAll();
return item;
}
}
关键机制:
synchronized
实现互斥锁wait()
释放锁并进入等待集notifyAll()
唤醒等待线程
实际场景:
当开发Servlet应用时:
- Tomcat为每个请求创建独立线程(进程级隔离)
- Session数据存在堆内存中(内存管理)
- 数据库连接使用连接池(资源复用-进程管理思想)
- JVM通过垃圾回收器自动管理内存(操作系统级支持的扩展)