所以我一直在研究java字节码,到目前为止,看到jvm是如何工作的非常有趣。但有件事让我困惑。
例如,如果jvm想做任何类型的计算,它就使用寄存器来推/弹出内部堆栈(我知道,过于简单化了)。
但是假设jvm想要计算这行的字节码版本: System.out.println("Hello");
在字节码的助记符版本中,我可以看到它在java.lang包中搜索系统类并调用该方法,但这对jvm实际意味着什么?
一旦jvm读取指令并知道必须打印某些内容,它是否会生成一个控制台窗口?或者jvm只能从控制台执行这种类型的指令吗(所以像这样,你需要使用 java
工具)
谢谢您!
1条答案
按热度按时间6ljaweal1#
任何文字
System.out
发送到运行jvm的操作系统进程的标准输出流。然后操作系统决定这意味着什么,这通常意味着将文本打印到控制台(如果有)。
如果标准输出被重定向到文件(例如使用
>
shell中的语法。或者,如果标准输出是通过管道传输的,也可能意味着将文本发送到另一个进程,例如使用|
shell中的语法。jvm从不“知道”它必须打印一些东西。方法名为
print
作为一种方便,程序员出于历史原因,但真的没有什么不同write
.