<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>classloader on </title>
    <link>/tags/classloader/</link>
    <description>Recent content in classloader on </description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Tue, 08 Sep 2026 23:15:00 +0800</lastBuildDate><atom:link href="/tags/classloader/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>JVM 运行时按三块拆开：class loader 把 .class 装进内存并准备好，runtime data areas 安排对象和调用栈，execution engine 先用 interpreter 逐条执行、再由 JIT 把热方法编译成 native code，同一块里的 GC 负责回收内存。这篇 JVM 运行时入门出自 Ajit Singh 的个人博客 singhajit.com，2026-08-11 发表，页面标称 17 分钟读完。
从源码到 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>
