关于代码编译到最后运行过程 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
beryl
V2EX    程序员

关于代码编译到最后运行过程

  •  
  •   beryl 2020-12-17 20:31:19 +08:00 2426 次点击
    这是一个创建于 1758 天前的主题,其中的信息可能已经有所发展或是发生改变。

    代码编译成了可执行文件,例如.jar, 或者.exe

    那最终是如何运行的呀

    java -jar xxx.jar 是如何启动的进程呢,怎么接收的客户端输入呢,网络请求是怎么进来被处理的?

    这个具体是哪方面知识呀

    16 条回复    2020-12-18 13:04:52 +08:00
    pipasese
        1
    pipasese  
       2020-12-17 20:33:45 +08:00
    计算机组成原理,Java 虚拟机原理
    cmostuor
        2
    cmostuor  
       2020-12-17 21:33:50 +08:00
    说的再多不如自己动手调源码 和 看源代码
    taogen
        3
    taogen  
       2020-12-17 21:43:59 +08:00 via Android
    java -jar xxx.jar:jar 包中指定了 main 函数入口。

    怎么接收网络请求:起了一个进程,监听了指定的端口的网络请求。

    主要知识:操作系统,计算机网络,Java 。
    beryl
        4
    beryl  
    OP
       2020-12-17 22:02:12 +08:00
    @cmostuor 这个只看 java 源码还不够
    VDimos
        5
    VDimos  
       2020-12-17 22:03:45 +08:00 via Android
    程序员的自我修养
    tinyfool
        6
    tinyfool  
       2020-12-17 22:05:52 +08:00
    你这个问题说起来就复杂了,首先 exe 和 jar 就是两件事情,一个是操作系统里面的可执行文件,里面是 intel cpu 的二进制代码,一个是虚拟机代码,是 jvm 的虚拟机二进制代码。

    exe 跑在操作系统下,cpu 里。jar 跑在 java 虚拟机里。要弄明白这个你首先要明白操作系统和虚拟机的区别。

    提到进程,又是一个操作系统概念。进程是一个操作系统的可执行单元。java 虚拟机在操作系统里面也是一个进程。而 java -jar xxx.jar 就是启动一个 java 虚拟机,在里面加载了你的 jar 。

    网络请求就涉及到 socket,这是一个网络层的概念…

    你这个有点千头万绪啊……多看书吧
    cmostuor
        7
    cmostuor  
       2020-12-17 22:11:49 +08:00
    @beryl 我没说只让你看 java 的源码呀 我这话就跟你妈催你读书一样 读啥书是你的事 想知道 exe 咋样执行去看微软给大学提供的 wrk 或 最近泄露的完整 xp 的代码 由于 win 系统是向后兼容的看完也很容易理解 winxp 以后的系统 jar 咋样执行去看 jvm 的代码
    misaka19000
        8
    misaka19000  
       2020-12-17 22:15:50 +08:00
    你这个问题比较复杂,需要学习好多东西才能详细的理解

    可以先看一下我这两篇文章做一下初步的了解:
    https://www.nosuchfield.com/2018/11/23/Program-compilation-linking-loading-and-running/
    https://www.nosuchfield.com/2018/08/01/TCP-Flow-Control-And-Linux-Socket-Buffer/
    missdeer
        9
    missdeer  
       2020-12-17 22:15:54 +08:00
    https://book.douban.com/subject/26365491/ 《程序是怎样跑起来的》
    beryl
        10
    beryl  
    OP
       2020-12-17 22:21:47 +08:00
    agagega
        11
    agagega  
       2020-12-17 22:47:49 +08:00 via iPhone
    jar 跟 exe 是完全不同的两种原理。
    java 不太懂; exe 的话,你打开的时候会有一个装载的过程,是操作系统完成的(类 Unix 上是 exec 这个系统调用),在命令行上启动程序的话,在调用 exec 之前还会存在一个 fork 的操作。(从 C 语言的角度看 fork 的逻辑非常匪夷所思,但从汇编的角度就会很自然了)然后就是一系列操作系统和系统库完成的脏活累活

    大概原理不算复杂,但细节特别多,不是专门搞这个的话,建议点到为止。有本书叫《程序员的自我修养》写得很好,就是比较旧了,新的也可以参考《深入理解计算机系统》第三版
    js8510
        12
    js8510  
       2020-12-18 08:34:15 +08:00
    气死大学老师系列。主要气死的是 操作系统 任课老师
    beryl
        13
    beryl  
    OP
       2020-12-18 10:23:45 +08:00
    @js8510 是的,最近在重新补这大学课程,当时上这个课的时候,拿到了大厂实习,就逃课出来了。
    so...
    mitsuizzz
        14
    mitsuizzz  
       2020-12-18 11:47:32 +08:00
    @beryl 凡尔赛。。。
    beryl
        15
    beryl  
    OP
       2020-12-18 12:52:35 +08:00
    @mitsuizzz 为啥?
    haosamax
        16
    haosamax  
       2020-12-18 13:04:52 +08:00 via iPhone
    为什么你们可以毫不费力的凡尔赛
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5572 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 07:50 PVG 15:50 LAX 00:50 JFK 03:50
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86