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

2020-12-17 20:31:19 +08:00
 beryl

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

那最终是如何运行的呀

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

这个具体是哪方面知识呀

2086 次点击
所在节点    程序员
16 条回复
pipasese
2020-12-17 20:33:45 +08:00
计算机组成原理,Java 虚拟机原理
cmostuor
2020-12-17 21:33:50 +08:00
说的再多不如自己动手调源码 和 看源代码
taogen
2020-12-17 21:43:59 +08:00
java -jar xxx.jar:jar 包中指定了 main 函数入口。

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

主要知识:操作系统,计算机网络,Java 。
beryl
2020-12-17 22:02:12 +08:00
@cmostuor 这个只看 java 源码还不够
VDimos
2020-12-17 22:03:45 +08:00
程序员的自我修养
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
2020-12-17 22:11:49 +08:00
@beryl 我没说只让你看 java 的源码呀 我这话就跟你妈催你读书一样 读啥书是你的事 想知道 exe 咋样执行去看微软给大学提供的 wrk 或 最近泄露的完整 xp 的代码 由于 win 系统是向后兼容的看完也很容易理解 winxp 以后的系统 jar 咋样执行去看 jvm 的代码
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
2020-12-17 22:15:54 +08:00
https://book.douban.com/subject/26365491/ 《程序是怎样跑起来的》
beryl
2020-12-17 22:21:47 +08:00
agagega
2020-12-17 22:47:49 +08:00
jar 跟 exe 是完全不同的两种原理。
java 不太懂; exe 的话,你打开的时候会有一个装载的过程,是操作系统完成的(类 Unix 上是 exec 这个系统调用),在命令行上启动程序的话,在调用 exec 之前还会存在一个 fork 的操作。(从 C 语言的角度看 fork 的逻辑非常匪夷所思,但从汇编的角度就会很自然了)然后就是一系列操作系统和系统库完成的脏活累活

大概原理不算复杂,但细节特别多,不是专门搞这个的话,建议点到为止。有本书叫《程序员的自我修养》写得很好,就是比较旧了,新的也可以参考《深入理解计算机系统》第三版
js8510
2020-12-18 08:34:15 +08:00
气死大学老师系列。主要气死的是 操作系统 任课老师
beryl
2020-12-18 10:23:45 +08:00
@js8510 是的,最近在重新补这大学课程,当时上这个课的时候,拿到了大厂实习,就逃课出来了。
so...
mitsuizzz
2020-12-18 11:47:32 +08:00
@beryl 凡尔赛。。。
beryl
2020-12-18 12:52:35 +08:00
@mitsuizzz 为啥?
haosamax
2020-12-18 13:04:52 +08:00
为什么你们可以毫不费力的凡尔赛

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/736536

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX