代码编译成了可执行文件,例如.jar, 或者.exe
那最终是如何运行的呀
java -jar xxx.jar 是如何启动的进程呢,怎么接收的客户端输入呢,网络请求是怎么进来被处理的?
这个具体是哪方面知识呀
1
pipasese 2020-12-17 20:33:45 +08:00
计算机组成原理,Java 虚拟机原理
|
2
cmostuor 2020-12-17 21:33:50 +08:00
说的再多不如自己动手调源码 和 看源代码
|
3
taogen 2020-12-17 21:43:59 +08:00 via Android
java -jar xxx.jar:jar 包中指定了 main 函数入口。
怎么接收网络请求:起了一个进程,监听了指定的端口的网络请求。 主要知识:操作系统,计算机网络,Java 。 |
5
VDimos 2020-12-17 22:03:45 +08:00 via Android
程序员的自我修养
|
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,这是一个网络层的概念… 你这个有点千头万绪啊……多看书吧 |
7
cmostuor 2020-12-17 22:11:49 +08:00
@beryl 我没说只让你看 java 的源码呀 我这话就跟你妈催你读书一样 读啥书是你的事 想知道 exe 咋样执行去看微软给大学提供的 wrk 或 最近泄露的完整 xp 的代码 由于 win 系统是向后兼容的看完也很容易理解 winxp 以后的系统 jar 咋样执行去看 jvm 的代码
|
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/ |
9
missdeer 2020-12-17 22:15:54 +08:00
https://book.douban.com/subject/26365491/ 《程序是怎样跑起来的》
|
10
beryl OP |
11
agagega 2020-12-17 22:47:49 +08:00 via iPhone
jar 跟 exe 是完全不同的两种原理。
java 不太懂; exe 的话,你打开的时候会有一个装载的过程,是操作系统完成的(类 Unix 上是 exec 这个系统调用),在命令行上启动程序的话,在调用 exec 之前还会存在一个 fork 的操作。(从 C 语言的角度看 fork 的逻辑非常匪夷所思,但从汇编的角度就会很自然了)然后就是一系列操作系统和系统库完成的脏活累活 大概原理不算复杂,但细节特别多,不是专门搞这个的话,建议点到为止。有本书叫《程序员的自我修养》写得很好,就是比较旧了,新的也可以参考《深入理解计算机系统》第三版 |
12
js8510 2020-12-18 08:34:15 +08:00
气死大学老师系列。主要气死的是 操作系统 任课老师
|
16
haosamax 2020-12-18 13:04:52 +08:00 via iPhone
为什么你们可以毫不费力的凡尔赛
|