日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

HotSpot源码(一):Docker与虚拟机的区别,class字节码解析,linux内核源码下载地址,Yacc与Lex快速入门

發布時間:2024/2/28 linux 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HotSpot源码(一):Docker与虚拟机的区别,class字节码解析,linux内核源码下载地址,Yacc与Lex快速入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Docker是虛擬機嗎?

Docker是用來隔離的,使用的是隔離的namespace,使用OS提供的接口進行應用程序之間的資源隔離,不是虛擬機。再加上它自己特殊的文件系統,一層一層疊加。他只不過是一個容器,不是虛擬化系統。
虛擬機可以為所欲為(可以裝win,裝unix內核的os,裝linux內核的os),而docker只能跑在linux的內核上,共享的是同一個內核。

HotSpot需要實現哪些功能?

內存管理 線程管理 類加載器 即時編譯 垃圾回收 設計規范 監控 接口

編譯和翻譯的區別

語言之間的轉換,是翻譯
編譯是編譯成下一級語言,比如C語言編譯成機器語言,要求語言必須從高級到低級。

寫一個java程序

class Hello{public static void main(String[] args){System.out.println("Hello,world!");} }

javac Hello.java 編譯,十六進制查看

CAFEBABE20202037201D0A2006200F09 201020110820120A2013201407201507 20160120063C696E69743E0120032829 56012004436F646501200F4C696E654E 756D6265725461626C650120046D6169 6E012016285B4C6A6176612F6C616E67 2F537472696E673B295601200A536F75 72636546696C6501200A48656C6C6F2E 6A6176610C200720080720170C201820 1901200C48656C6C6F2C776F726C6421 07201A0C201B201C01200548656C6C6F 0120106A6176612F6C616E672F4F626A 6563740120106A6176612F6C616E672F 53797374656D0120036F75740120154C 6A6176612F696F2F5072696E74537472 65616D3B0120136A6176612F696F2F50 72696E7453747265616D012007707269 6E746C6E012015284C6A6176612F6C61 6E672F537472696E673B295620202005 20062020202020022020200720082001 20092020201D20012001202020052AB7 2001B120202001200A20202006200120 2020012009200B200C20012009202020 252002200120202009B220021203B620 04B120202001200A2020200A20022020 2003200820042001200D20202002200E

使用javap -v Hello查看編譯生成的字節碼

Classfile /C:/Users/Bug/Desktop/Hello.classLast modified 202074; size 416 bytesMD5 checksum 5fa7eacdfad813324a594e7e18c8731fCompiled from "Hello.java" class Hellominor version: 0major version: 55flags: (0x0020) ACC_SUPERthis_class: #5 // Hellosuper_class: #6 // java/lang/Objectinterfaces: 0, fields: 0, methods: 2, attributes: 1 Constant pool:#1 = Methodref #6.#15 // java/lang/Object."<init>":()V#2 = Fieldref #16.#17 // java/lang/System.out:Ljava/io/PrintStream;#3 = String #18 // Hello,world!#4 = Methodref #19.#20 // java/io/PrintStream.println:(Ljava/lang/String;)V#5 = Class #21 // Hello#6 = Class #22 // java/lang/Object#7 = Utf8 <init>#8 = Utf8 ()V#9 = Utf8 Code#10 = Utf8 LineNumberTable#11 = Utf8 main#12 = Utf8 ([Ljava/lang/String;)V#13 = Utf8 SourceFile#14 = Utf8 Hello.java#15 = NameAndType #7:#8 // "<init>":()V#16 = Class #23 // java/lang/System#17 = NameAndType #24:#25 // out:Ljava/io/PrintStream;#18 = Utf8 Hello,world!#19 = Class #26 // java/io/PrintStream#20 = NameAndType #27:#28 // println:(Ljava/lang/String;)V#21 = Utf8 Hello#22 = Utf8 java/lang/Object#23 = Utf8 java/lang/System#24 = Utf8 out#25 = Utf8 Ljava/io/PrintStream;#26 = Utf8 java/io/PrintStream#27 = Utf8 println#28 = Utf8 (Ljava/lang/String;)V {Hello();descriptor: ()Vflags: (0x0000)Code:stack=1, locals=1, args_size=10: aload_01: invokespecial #1 // Method java/lang/Object."<init>":()V4: returnLineNumberTable:line 1: 0public static void main(java.lang.String[]);descriptor: ([Ljava/lang/String;)Vflags: (0x0009) ACC_PUBLIC, ACC_STATICCode:stack=2, locals=1, args_size=10: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;3: ldc #3 // String Hello,world!5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V8: returnLineNumberTable:line 3: 0line 4: 8 } SourceFile: "Hello.java"

如果把上面的字節碼用 java 理解的話,相當于:

import java.io.PrintStream; import java.util.Stack;public class ClassCode {public static void main(String[] args) {Stack<Object> stack = new Stack<>();stack.push(System.out); // 0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;stack.push("Hello,World!"); // 3: ldc #3 // String Hello,world!// 5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)VString str = (String) stack.pop();PrintStream printStream = (PrintStream) stack.pop();printStream.println(str);} } // 輸出:Hello,World!

javac命令是什么語言寫的?
javac是一個exe文件
javac是java寫的
這是一個雞生蛋蛋生雞的問題:如果你要編譯一個java虛擬機,你需要一個java虛擬機

補充:linux內核源碼下載地址

官網鏈接:https://www.kernel.org/

HTTP https://www.kernel.org/pub/
GIT https://git.kernel.org/

可以根據需要,下載對應內核版本。
官網下載經常速度太慢,無法下載,提供國內鏡像:
http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/

補充:Yacc與Lex快速入門

lex和yacc是什么?
lex 代表 lexical analyzar(詞法分析器)
yacc 代表 yet another compiler compiler(編譯器代碼生成器)。

我們舉個簡單的例子來理解lex和yacc:
在linux下,有很多系統配置文件,一些linux下的軟件也有配置文件,那么程序是如何讀取配置文件中的信息的呢?
先用到lex詞法分析器,讀取配置文件中的關鍵詞(后面說到的token標記其實可看做關鍵詞);
然后把關鍵詞遞交給yacc,yacc對一些關鍵詞進行匹配,看是否符合一定的語法邏輯,如果符合就進行相應動作。

這個例子是分析配置文件內容的,當然可分析其他文件內容,或者制作編譯器等。

總結

以上是生活随笔為你收集整理的HotSpot源码(一):Docker与虚拟机的区别,class字节码解析,linux内核源码下载地址,Yacc与Lex快速入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 少妇av | 亚洲av日韩av不卡在线观看 | 欧美色射 | 欧洲自拍一区 | 日本免费中文字幕 | 好邻居韩国剧在线观看 | 久久久女人 | 黄黄的视频在线观看 | 日本少妇激三级做爰在线 | 爱爱免费小视频 | 亚洲a级片| 久久精品久久久精品美女 | 国产91传媒 | 377人体粉嫩噜噜噜 www.av黄色 | 香蕉视频黄在线观看 | av国产成人 | 毛片免费一区二区三区 | 超碰97在线播放 | 欧美67194 | 久久久久女 | a毛片网站 | www在线免费观看 | 天堂在线中文 | 日韩在线一区二区三区四区 | 欧美日韩免费观看视频 | 中文字幕被公侵犯的漂亮人妻 | 黄网址在线观看 | 不卡一区二区在线 | 天天插天天干天天操 | 国产口爆吞精一区二区 | 午夜爽爽视频 | 成人交性视频免费看 | 懂色av成人一区二区三区 | 黄色在线播放 | 毛片av在线观看 | 中文字幕在线视频网站 | 日产精品久久久久久久 | 日韩欧美在线中文字幕 | 在线免费av播放 | 好吊一区二区三区视频 | 奇米综合| 亚洲一区二区三区激情 | 人人妻人人爽一区二区三区 | 欧美成人一二区 | 欧美视频一区二区在线观看 | 精品久久久久亚洲 | 一区二区三区激情 | 久久1024 | 欧美综合第一页 | 亚洲精华国产精华精华液网站 | 韩国av毛片 | 五月天国产在线 | 韩国裸体网站 | 日韩女优网站 | 女生隐私免费看 | 极品尤物一区二区 | 中文字幕日韩无 | 一级片99| 亚洲自偷自偷偷色无码中文 | 国产大片aaa | 日韩一区二区在线视频 | 久久成人福利视频 | 中日韩免费视频 | 激情插插 | 182午夜视频| 成人手机在线免费视频 | 中文精品在线观看 | 凸凹人妻人人澡人人添 | 激情网五月天 | 欧美片| 精品第一页 | 一级黄色在线播放 | 亚洲伦理在线播放 | 欧美成人hd| 亚洲а∨天堂久久精品2021 | 91jk制服白丝超短裙大长腿 | 伊人精品国产 | 亚洲天堂一区二区 | jzzijzzij亚洲成熟少妇 | 欧美aaaa视频| 无码任你躁久久久久久老妇 | 久久久99精品国产一区二区三区 | 久久夜精 | www.成人精品 | 亚洲av日韩av不卡在线观看 | 一级黄色片在线观看 | 黄色视屏在线看 | 美攻壮受大胸奶汁(高h) | 国产精品美女在线观看 | 日韩欧美一二三四区 | 欧美一区国产一区 | 国产精品精品久久久 | 韩日黄色 | 色播视频在线观看 | 寂寞少妇让水电工爽hd | 亚洲精品成人a | 欧洲成人综合 | 国产一区二区三区精品在线观看 | 老司机午夜精品 |