进程 ⇢ JVM ⇢ 线程 + 内存关系

. 从零到跑起一个 Java 程序
  1. OS 创建进程
    execve java … → 新进程的地址空间、handle、时间片就位。

  2. Java Launcher 进场
    可执行文件里的 C/C++ 的main() 解析参数,dlopen libjvm.so / jvm.dll

  3. JNI_CreateJavaVM 诞生 JVM 实例
    △ 分配堆、元空间、代码缓存等
    △ 拉起 GC / JIT / 信号处理等守护线程

  4. 把 Launcher 的原生线程变成 Java main 线程
    开始执行你写的 public static void main

  5. 后续线程
    new Thread 或线程池建的用户线程 + JVM 自带 daemon 线程,一起跑到进程终结。


2. “一进程-一 JVM-多线程”的本质
  • 进程:最粗的隔离——互不共享内存与句柄。

  • JVM 实例:运行时系统,本质是进程里的大型本地库 ➜ 只要进程结束,JVM 必然随之消亡。

  • 线程:真正执行字节码/本地码的单位;现代 JVM 1:1 映射 OS 内核线程,由 OS 调度。


3. 线程共享/独享的内存区
私人公共
程序计数器 (PC)Java 堆(对象)
Java 虚拟机栈元空间 / 常量池(类蓝图)
本地方法栈代码缓存(JIT 机器码)
——直接内存、MappedByteBuffer
——进程级资源:文件描述符、Socket 等

口诀:栈私有、堆共享;类定义与 JIT 代码也只有一份。多线程并行时,用 synchronized / Lock / volatile 等原语保证安全。


4. 何时退出?
  • 只要还有 非 daemon 线程活着,JVM 不会 exit

  • 当只剩守护线程,JVM 调 System.exit;OS 回收进程,全部资源清空。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值