<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>jit on </title>
    <link>/tags/jit/</link>
    <description>Recent content in jit on </description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Tue, 08 Sep 2026 23:15:00 +0800</lastBuildDate><atom:link href="/tags/jit/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>JVM 怎么把 bytecode 跑成 native code：class loader、runtime data areas、execution engine</title>
      <link>/reading/ajit-singh/jvm-bytecode-to-native-code/</link>
      <pubDate>Tue, 08 Sep 2026 23:15:00 +0800</pubDate>
      
      <guid>/reading/ajit-singh/jvm-bytecode-to-native-code/</guid>
      <description>Ajit Singh 2026-08-11 发在个人博客 singhajit.com 上的一篇 JVM 运行时入门，页面标称 17 分钟读完。核心主张是这台机器可以拆成三块：class loader 把 .class 装进内存并准备好，runtime data areas 安排对象和调用栈，execution engine 先用 interpreter 逐条执行、再由 JIT 把热方法编译成 native code，GC 在旁边回收内存。
从源码到 bytecode JVM 从不读 .java 文件，它读 bytecode。javac App.java 把源码翻译成 bytecode 写进 .class，这套指令紧凑且平台无关，不是 Intel 或 ARM 的机器码，而是「一台假想计算机」的机器码——那台假想机器就是 JVM。
原文给了一个最小的方法：
int add(int a, int b) { return a + b; } 用 javap -c 看，javac 生成的 bytecode 大致是这样：
iload_1 // 把局部变量 a 压到 operand stack 上 iload_2 // 把局部变量 b 压到 operand stack 上 iadd // 弹出两个，相加，结果压回栈 ireturn // 返回栈顶 这里没有 CPU 寄存器。JVM 是一台 stack-based machine：指令靠 push/pop operand stack 传值，不像 eax、r0 那样直接点名寄存器。这个设计让 bytecode 保持简单、可移植。</description>
    </item>
    
  </channel>
</rss>
