大数据场景中语言虚拟机的应用和挑战
點擊上方藍字關注我們
大數據場景中語言虛擬機的應用和挑戰
吳明瑜1,2,?陳海波1,2,?臧斌宇1,2
1?領域操作系統教育部工程研究中心,上海 200240
2?上海交通大學軟件學院并行與分布式系統研究所,上海 200240
??
摘要:語言虛擬機為大數據應用提供了與平臺無關的執行環境,簡化了應用的開發和部署,因此在大數據場景中得到了較廣泛的應用。主要分析了兩種主流語言虛擬機——JVM和CLR在大數據場景中的應用,并闡述了使用語言虛擬機面臨的4個挑戰:初始化及“熱身”開銷、垃圾回收暫停、異構內存支持、數據格式轉換。之后,分別針對4個挑戰討論了現有的解決方案,并分析了這些方案的不足之處及未來可能的優化方向。
關鍵詞:語言虛擬機?;?垃圾回收?;?異構內存
論文引用格式:
吳明瑜,?陳海波, 等.大數據場景中語言虛擬機的應用和挑戰[J].大數據, 2020, 6(4):81-91.
WU M Y, CHEN H B, et al.Applications and challenges of language virtual machines in big data[J].Big Data Research, 2020, 6(4):81-91.
1 引言
隨著大數據時代的到來,對數據分析和處理的需求催生出了一系列大數據處理系統,通過調度集群內的硬件資源,以高并發、分布式的方式處理數據。語言虛擬機(language virtual machine)也被稱為管理運行時環境(managed runtime environment),它為應用進程提供了與平臺無關的執行環境,使應用具有良好的可移植性,適合在分布異構的環境中使用。同時,語言虛擬機還為應用提供了類型檢查、垃圾回收、即時編譯等功能,減輕了應用的負擔,使開發者能夠專注于應用邏輯。由于語言虛擬機的良好特性,很多大數據處理系統使用具有語言虛擬機支持的程序語言編寫,如Hadoop、Spark、Flink、DryadLINQ等。其中,為Java提供的Java虛擬機(Java virtual machine,JVM)和為.NET提供的公共語言運行時(common language runtime,CLR)是大數據處理系統的主要選擇,其中JVM廣泛用于開源的大數據系統,而CLR則主要部署于微軟公司的實際生產系統中。
語言虛擬機在為大數據應用開發提供便利的同時,也帶來了一系列挑戰。語言虛擬機為了構建與平臺無關的執行環境,需要經歷初始化和“熱身”過程,該過程耗時較長,且該過程中的執行效率較低。另外,語言虛擬機引入的垃圾回收(garbage collection)過程一般會要求暫停應用,使得應用執行的時間變長。此外,近年來硬件異構化趨勢明顯,以非易失性內存(non-volatile memory,NVM)為代表的新型硬件逐漸普及,而語言虛擬機缺乏對這些硬件的支持,因而無法充分利用硬件資源。最后,不同的語言虛擬機的數據存儲格式不同,因此虛擬機之間的通信需要額外的格式轉換開銷。本文將詳細闡述語言虛擬機在大數據場景中面臨的挑戰,并深入探討已有的解決方案及其存在的不足。
2 大數據場景中語言虛擬機的應用
語言虛擬機的可移植性和安全性等特點為大數據應用的開發和部署提供了便利,因此在大數據場景中得到了廣泛使用。本文主要討論大數據場景中應用較為廣泛的兩種語言虛擬機:JVM和CLR。這兩種虛擬機不僅具有上述優點,還進行了充分的性能優化,因而能為大數據應用提供較為高效的支持。
2.1 JVM
JVM主要是為Java應用提供的語言虛擬機。為了支持與硬件平臺無關的執行模式,JVM提供了字節碼(byte-code)這一中間表達形式,Java代碼首先會被翻譯為字節碼,然后就可以在任意JVM上執行,從而具備“一次編譯,處處執行”的可移植性。JVM提供了基于棧的執行模式,通過構建Java棧依次解釋執行字節碼,從而完成對Java應用的執行。由于解釋執行效率較低,JVM提供了即時編譯(just-in-time compilation)功能,會在運行時將頻繁使用的代碼進行編譯優化,從而提高Java應用的整體性能。同時,JVM也提供了自動內存管理(即垃圾回收)以及安全檢查功能,進一步提高了易用性和可靠性。
由于開發一個成熟高效的語言虛擬機成本較高(例如,著名的開源JVM實現OpenJDK源碼超過1 000萬行),很多程序語言沒有開發語言虛擬機,而是直接被編譯為字節碼,在JVM上執行。這些程序語言被稱為JVM語言,其進一步拓寬了JVM的應用范圍,豐富了JVM的生態。
目前,在JVM上運行的大數據系統有很多,其中既包含Hadoop、Hive、Hyracks等完全使用Java語言編寫的系統,也包含Spark、Flink、Storm等使用JVM語言編寫的系統。可以說,JVM在目前的大數據環境中是不可或缺的。
2.2 CLR
CLR是由微軟公司開發、為.NET程序提供支持的語言虛擬機。CLR提供了與字節碼相似的中間表達——通用中間語言(common intermediate language,CIL)來構建與平臺無關的執行環境。同時, CLR也提供了即時編譯、垃圾回收、類型安全檢查等功能。
CLR主要應用于微軟公司內部的大數據系統之中,如Dryad、SCOPE、DryadLINQ等,這些系統已經被部署在微軟公司的生產集群中持續提供服務。其中,SQL數據查詢是微軟公司大數據場景的重點之一,因此微軟公司開發了DryadLINQ系統,將面向對象的C#程序與使用LINQ編寫的SQL查詢語句充分整合,并交由CLR和SQL引擎協同處理。這種混合執行的方式增強了SQL數據查詢的表達能力,但也帶來了潛在的性能問題。
3 大數據場景中語言虛擬機面臨的挑戰
圖1展示了使用多個語言虛擬機(以JVM為例)執行大數據應用的流程。當接收到任務時,首先需要啟動JVM執行環境,而目前JVM的初始化時間較長,還會引入額外的“熱身”階段,這會帶來明顯的開銷;在執行過程中,由于大數據應用對內存的需求量較大,因此會在執行過程中較為頻繁地執行垃圾回收過程;此外,盡管現在服務器已經開始采用大容量的非易失性內存設備,但目前JVM缺乏對該硬件的支持,因此無法充分利用內存資源;最后,大數據應用通常需要多個JVM的配合,但JVM之間的通信需要引入復雜的序列化/反序列化過程,以實現數據格式的轉換,這增大了通信過程的性能開銷。本節將從初始化及“熱身”、垃圾回收暫停、異構硬件支持及數據格式轉換4個方面探討語言虛擬機在大數據場景中面臨的挑戰。
3.1 初始化及“熱身”
與編譯后即可執行的本地代碼(如使用C/C++語言編寫的代碼)不同,由于語言虛擬機需要為應用構建與平臺無關的執行環境,因此在執行應用前要先對虛擬機進行初始化,這往往會帶來上百毫秒的開銷。在此之后,語言虛擬機還需要經歷一個“熱身”過程:首先,語言虛擬機往往采用動態加載類型的方式,對于首次使用的類型,虛擬機需要載入其對應的類文件(class file),解析其中的類型信息,并將其轉化為類型元數據存儲在虛擬機中。由于大數據系統一般比較復雜,使用的類型也較多,因此在運行過程中會出現大量類加載操作,造成性能開銷;其次,語言虛擬機的即時編譯模塊需要對應用的代碼進行分析,找出頻繁調用的方法和分支,然后對它們進行編譯優化,而在優化完成之前,語言虛擬機將采用解釋執行的方式運行,其性能遠低于編譯執行。由于大數據系統的代碼量較大,邏輯較為復雜,“熱身”階段一般會持續數秒,因此會顯著影響大數據應用的性能。
圖1???使用語言虛擬機(以JVM為例)的大數據應用執行流程示意圖
3.2 垃圾回收暫停
JVM和CLR都提供了垃圾回收模塊,用于對應用的內存進行自動管理和回收。由于大數據應用需要處理海量數據,而這些數據都會被轉換為對象存儲在語言虛擬機的堆內,這會占用較大的內存,并會頻繁觸發垃圾回收。主流的垃圾回收算法一般會暫停應用以完成內存回收,頻繁的垃圾回收會導致應用性能下降。
與其他應用相比,大數據應用特殊的內存行為也進一步影響了垃圾回收的性能。應用的內存行為一般滿足“分代假設”,即大多數對象的存活時間較短,只有少部分對象會長時間存活。因此,虛擬機會將自己的堆內存劃分為“年輕代”和“年老代”,其中“年輕代”用來保存這些存活時間較短的對象。同時,虛擬機一般會使用“年輕代垃圾回收”來回收“年輕代”的內存,只有在全堆內存嚴重不足時才會使用“全堆垃圾回收”來回收全堆內存。由于“年輕代”內存只占全堆內存的小部分,因此這種方法能明顯降低單次垃圾回收的暫停時間。但是,之前的研究發現,大數據應用的內存行為并不符合這一假設,許多對象能存活較長的時間,導致“年輕代垃圾回收”的效率極低,語言虛擬機不得不通過“全堆垃圾回收”的方式回收內存,因此造成了較長的垃圾回收暫停時間。
3.3 異構硬件支持
為了滿足應用的可移植性需求,語言虛擬機已經提供了對部分異構硬件的支持,比如可以在不同的處理器(如x86和ARM處理器)上運行。但是,對于NVM等硬件,其支持還較為薄弱。本文將以NVM為代表進行探討。
NVM設備是一種具備非易失特性的內存設備,相比普通內存(如動態隨機存取存儲器(dynamic random access memory,DRAM)),它有很多優點:第一,它具有非易失性,其存儲的數據在斷電后不會丟失,因此可以用來存儲持久化數據;第二,它的容量比普通內存大,單位成本和能耗都比普通內存低。由于大數據系統本身就需要大量內存,NVM的這些特性可以使其以較低的成本擴大語言虛擬機的內存容量,支持更大規模的數據分析。
然而,目前的主流語言虛擬機對NVM的支持非常有限。OpenJDK提出了新的運行時選項,允許應用從NVM創建Java堆,但該選項目前只支持將全堆都創建在NVM上,無法進行細粒度的控制。此外,該選項的提出主要是出于擴容考慮,并沒有利用NVM的持久化特性,因此斷電后NVM上的數據也將不可用。
3.4 數據格式轉換
除了具有虛擬機支持的程序語言以外,一些語言(如Python、R、LINQ等)因為提供了數據分析功能,在大數據場景中也得到了廣泛的應用。比如,Spark提供了PySpark和SparkR模塊,分別提供對Python和R語言的支持;DryadLINQ則將C#程序和LINQ語句組合在一起,增強了數據分析應用的表達能力。多語言支持豐富了大數據系統的生態,但也帶來了數據格式轉換的問題。不同的語言會為對象設計不同的數據格式,當數據需要從語言虛擬機管理的程序發送給使用其他語言編寫的程序時,就需要進行數據格式轉換,反之亦然。由于大數據應用在每個階段都會處理大量的數據,因此發送過程可能會涉及大量對象的數據格式轉換,從而造成明顯的開銷。
另外,由于每個語言虛擬機對對象的保存格式都不相同,因此語言虛擬機之間的通信也需要進行數據格式轉換。在JVM中,這個過程被叫作序列化/反序列化:對象首先被發送者轉化為字符串流(序列化),然后經過網絡發送給接收者,并由接收者重新轉化為對象(反序列化)。研究表明,當數據對象規模較大時,序列化和反序列化的開銷將遠遠超過網絡傳輸的開銷,這成為數據通信過程中的瓶頸。
4 現有解決方案
4.1 跳過初始化和“熱身”
虛擬機的初始化和“熱身”階段的執行過程具有一定的相似性,之前的工作一般采取跳過部分步驟的方案來降低開銷,可大致分為以下4種思路。
● 類型共享。該思路允許多個語言虛擬機共享同類型數據,如果一個虛擬機已經載入了某個類型,那么其他虛擬機就可以直接使用,無須重復加載。比較有代表性的工作是OpenJDK提出的“應用類型數據共享(application class-data sharing, APPCDS)”特性[20],測試表明,它能將應用的啟動時間縮短20%~30%。
● 提前編譯(ahead-of-time compilation)。相對于即時編譯,提前編譯在應用執行前就會編譯完成,因此跳過了運行中的編譯階段。IBM公司的JVMOpenJ9已經使用了上述方法,允許應用指定需要提前編譯的類型。提前編譯可以與類型共享搭配使用,使多個虛擬機共享同一份編譯過的代碼,從而提升多個虛擬機的啟動效率。
● 虛擬機重用。由于JVM的啟動時間過長,HotTub系統提出了JVM池的概念[13]:當大數據應用執行完成后,JVM進程不會被銷毀,而是會回到JVM池中;如果后續接收到了相似的任務,該JVM會被喚醒,并處理該任務。由于JVM池中的JVM都已經完成了“熱身”階段,因此其執行效率會明顯提升。
● 基于系統調用fork。在UNIX操作系統中,fork這一系統調用允許應用從已有進程中創建進程,且新進程的內存狀態與原進程完全相同。由于語言虛擬機本身就是系統進程,因此可以通過fork從已有的虛擬機進程中直接創建,而不是從頭開始進行初始化[22]。如果能從一個已經充分“熱身”的虛擬機中創建其他虛擬機,那么這些虛擬機也能跳過“熱身”階段。
4.2 減少垃圾回收
垃圾回收是大數據場景下的性能瓶頸,目前有很多工作嘗試減少垃圾回收暫停時間,以提高性能。這些工作大致可以分為以下3類。
● 根據內存行為重新設計垃圾回收算法。大數據系統的內存行為具有明顯的“階段性”:例如對于MapReduce一類的大數據應用,其執行過程可以被拆分為一個個“map階段”和“reduce階段”。每個階段都會創建大量臨時對象,而在階段結束時,這些對象將不再存活。由于每個階段的持續時間可能會達到數秒,因此這些臨時對象的存活時間較長,違背了垃圾回收器的“分代假設”。基于這個觀察,研究人員提出了基于時代(epoch-based)的垃圾回收器Yak,根據大數據應用中的階段來劃分時代。當一個時代結束時,在該時代中創建的對象被回收。NG2C系統則應用了另一種思路,它將堆劃分為N個代G 0,G1,G?2,…,GN。NG2C系統總是會先回收G0,只有在回收的內存不夠時才會回收G1,依此類推。同時,NG2C系統會通過提前運行和分析的方式來決定每個對象的分配位置。對于一些存活時間較短的對象,它們會被放入G0;而對于在大數據系統中某個階段內創建的對象,它們會被放入之后的代中。這種基于預測的方式減少了盲目的垃圾回收,提高了大數據應用中垃圾回收的效率。
● 脫離語言虛擬機的內存管理。由于傳統垃圾回收算法在大數據應用中的性能開銷較大,一些工作提出將大數據應用創建的對象搬到堆外,脫離虛擬機的內存管理,從而減少垃圾回收暫停時間。例如FA?ADE系統就將數據處理中需要的對象都保存到JVM的堆外內存中,并設計了新的模塊來管理這些內存。Spark的運行時優化系統Tungsten也實現了堆外管理模塊,允許大數據應用將存活時間長的對象保存到堆外,從而減輕內存壓力。Deca系統則將生命周期相近的對象都轉化為字節數組類型,使其脫離垃圾回收的掃描范圍,并在這些對象的生命周期結束時統一銷毀。
● 應用主動管理內存。一些研究人員認為,大數據應用或系統應當感知自己的內存占用,并采取相應措施減少垃圾回收。ITask系統實現了可中斷的大數據任務,當大數據應用監測到垃圾回收較為頻繁且回收效率低下時,就會主動暫停一些任務的執行,騰出更多內存空間,以減少垃圾回收帶來的開銷。類似地,DynMR同樣會在內存壓力較大時,將部分暫存的數據寫回硬盤,以釋放內存。
4.3 異構內存支持
由于NVM設備具有持久化、容量大、能耗低等特點,而主流語言虛擬機對NVM的支持比較有限,因此目前已經有研究開始在JVM上為異構內存(DRAM和NVM)提供支持。根據NVM的使用方法,這些研究可以分為以下兩類。
● 出于擴容和成本考慮使用NVM。NVM雖然具有以上優點,但與DRAM相比,它存在一定的性能缺陷:其讀寫時延均高于DRAM,讀寫帶寬均低于DRAM。因此,使用混合內存的系統在性能上比只使用DRAM的系統差。基于以上問題,研究人員提出了基于大數據應用語義的混合內存管理系統Panthera,它以大數據應用中使用的數據集(dataset)為基本單位,通過靜態分析獲得應用對數據集的訪問頻率,從而決定其分配位置。例如,部分為了容錯而長期緩存的數據集在正常執行時很少被訪問,這些數據集就適合放在NVM中。通過使用這一分配策略, Panthera有效利用了NVM的低能耗和大容量特性,同時只造成了較低的性能開銷。
● 出于持久化考慮使用NVM。NVM還可以用來存儲持久化數據,以便在斷電重啟后能夠快速恢復。但是,由于語言虛擬機為應用隱藏了硬件平臺的信息,應用要完成NVM上數據的持久化比較困難,且會造成較大的性能開銷。因此, GCPersist系統提出在垃圾回收過程中由JVM完成數據的持久化,在減輕應用負擔的同時降低了持久化開銷。另外, GCPersist還通過修改垃圾回收算法,在DRAM和NVM中保存了兩份數據,其中NVM中的數據只會在錯誤恢復過程中使用。這種方法減少了大數據應用在正常運行時訪問NVM的次數,從而減少了NVM因讀寫性能較差帶來的開銷。
4.4 數據格式轉換優化
數據格式轉換的優化方案可以分為以下兩類。
● 減少數據格式轉換的次數。在DryadLINQ程序中,每當程序要在LINQ表達式和C#代碼之間切換時,就會發生數據格式轉換。為了減少轉換開銷, Niijima系統采取的方法是對代碼進行分析和移動,盡可能地將LINQ表達式和C#代碼分別聚合到一起,減少語言切換的次數。Gerenuk系統則對Java代碼進行了重編譯,使其可以直接操作序列化以后的數據,這樣可以減少序列化/反序列化的次數,降低轉換開銷。
● 降低單次轉換的開銷。由于Java序列化/反序列化的開銷較大,研究人員已經開發出了新的工具來代替Java原生的序列化/反序列化模塊。這些工具一般會犧牲兼容性(比如不支持Java 6以前的版本),或要求應用手動注冊需要序列化的類型,以達到降低序列化開銷的目的。Skyway系統則提出了直接傳遞對象圖的技術,通過建立JVM之間的連接,使不同JVM對同一類型對象的解析方式達成共識,之后就可以使用較簡單的方式傳遞對象,簡化了序列化/反序列化的過程。
5 現有方案的問題和未來方向
5.1 應用范圍受限
目前針對大數據處理的語言虛擬機研究主要集中于批處理類型的場景,應用范圍比較有限。比如,Yak、ITask、DynMR針對Hadoop進行分析和優化,而Panthera、GCPersist、Skyway、Gerenuk、Deca等系統則針對Spark進行分析優化。之前的優化方法根據分析結果對應用行為進行假設,但由于分析的應用類型有限,因此其假設可能不具備通用性。比如,Ya k的垃圾回收算法假設對象的生命周期與其創建的時代一致,但是在Spark中,用戶可以通過cache接口將對象緩存在JVM中,這些對象的生命周期要長于其創建的時代,因而違背了Yak的假設。對于流處理、圖查詢、近似計算等大數據場景,它們的應用行為與批處理存在較大不同,如單個任務的執行時間更短、數據分析和存儲的粒度更小等,而這些應用類型目前在語言虛擬機上的行為還缺乏深入的分析。因此,未來的工作需要進一步拓寬應用范圍,為更多類型的應用提供高效的語言虛擬機支持。
5.2 可移植性和安全性降低
Deca、FA?ADE、Gerenuk等系統對大數據應用中的數據和代碼進行了轉化,使其更多地依賴于本地數據格式和本地代碼執行,以提高性能。但是,由于這種方法生成的代碼和數據都脫離了JVM的管理,因此不再具有可移植性,還會帶來潛在的安全性問題。例如,FA?ADE將數據放到堆外進行管理,并設計了專門的數據結構來解決類型繼承、線程間同步、內存回收等問題,這部分代碼直接使用類似指針的方式操作數據,不再具有類型安全特性,因此造成了潛在的安全風險。針對這一問題,OpenJDK社區發起了瓦爾哈拉項目(project Valhalla),其目標之一就是為Java提供“值類型(value object)”。“值類型”是由用戶自定義的類型,其數據存儲格式與本地格式相似,但可以使用Java代碼進行訪問和管理,因此仍具有可移植性和類型安全保證。“值類型”可能會在未來進入OpenJDK主線,為大數據場景提供新的支持。
5.3 數據格式轉換難以根除
由于不同語 言各有所長,因此在大數據場景中使用多種語言進行數據處理已經成為比較普遍的現象。由于不同語言對數據格式的定義不同,一旦進行跨語言通信,數據格式轉換就難以避免。目前的解決方案只能減少數據格式轉換的次數或者降低單次轉換的開銷,并不能完全消除耗時的數據格式轉換階段。一種可能的消除格式轉換的方法是對現有的語言進行整合,使它們能夠統一運行在相同的語言虛擬機之上,從而可以共享相同的數據格式,免除數據轉換開銷。OpenJDK社區提出的GraalVM[37]項目就提供了這樣一種語言虛擬機,它能支持包括Scala、R、JavaScript、C、C++在內的多種語言,為消除數據格式轉換提供了可能,但目前還沒有針對GraalVM上數據格式轉換的研究。而對于不同虛擬機之間數據表示方式不同的問題,可以對OpenJDK已有的APPCDS特性進行擴展,使多個虛擬機就數據格式達成一致,進而避免虛擬機間的數據格式轉換。
6 結束語
語言虛擬機具有良好的可移植性和安全性,還提供了垃圾回收和即時編譯等功能,能簡化大數據應用的開發和部署,因此在大數據場景下得到了較為廣泛的應用。本文主要介紹了兩種主流的語言虛擬機(JVM和CLR)在大數據場景中的具體應用,并從初始化和“熱身”、垃圾回收、異構硬件支持、數據格式轉換4個方面分析了語言虛擬機在大數據場景下面臨的挑戰和現有的解決方案。本文同時指出,已有的解決方案還存在應用領域受限、可移植性和安全性降低、格式轉換難以根除等問題。在大數據處理方式多樣化的趨勢下,語言虛擬機還存在巨大的分析和優化空間。
作者簡介
吳明瑜(1993-),男,上海交通大學軟件學院博士生,主要研究方向為語言虛擬機和非易失性內存 。
陳海波(1982-),男,博士,上海交通大學教授、并行與分布式系統研究所所長,領域操作系統教育部工程研究中心主任,國家杰出青年基金獲得者,國際計算機學會(ACM)杰出科學家,中國計算機學會(CCF)杰出會員與杰出演講者,主要研究方向為操作系統和系統安全。曾獲教育部技術發明獎一等獎(第一完成人),全國優秀博士學位論文獎、CCF青年科學家獎。目前擔任ACMSIGOPSChinaSys主席、CCF系統軟件專業委員會副主任、CommunicationsoftheACM中國首位編委與SpecialSections領域共同主席、ACMTransactionsonStorage編委、《大數據》期刊編委。曾任ACMSOSP2017大會共同主席、ACMCCS2018系統安全領域主席、ACMSIGSAC獎勵委員會委員。研究工作獲得華為技術有限公司最高個人貢獻獎、GoogleFacultyResearchAward、IBMX10InnovationAward、NetAppFacultyFellowship等企業獎勵 。
臧斌宇(1962-),男,博士,上海交通大學教授、軟件學院院長。2011年全國優秀博士學位論文指導教師,2015年“挑戰杯”全國競賽特等獎指導教師。兼任國務院學位委員會軟件工程學科評議組成員、教育部高等學校軟件工程專業教學指導委員會副秘書長、全國工程教育專業認證專家委員會計算機類專業認證分委員會委員、CCF杰出會員、國家示范性軟件學院聯盟副理事長。主要從事系統軟件方向的研究,致力于計算機核心課程的教學改革。近年來在SOSP、USENIXATC、Eurosys、ASPLOS、ISCA、HPCA、PPoPP等國際會議上發表論文20余篇。主持多項國家級科研項目 。
往期文章回顧
《大數據》2020年第4期目次&摘要
專題導讀:大數據異構并行系統
GPU事務性內存技術研究
大規模異構數據并行處理系統的設計、實現與實踐
面向大數據異構系統的神威并行存儲系統
面向異構眾核超級計算機的大規模稀疏計算性能優化研究
深度學習中的內存管理問題研究綜述
新一代深度學習框架研究
聯系我們:
Tel:010-81055448
? ? ? ?010-81055490
? ? ? ?010-81055534
E-mail:bdr@bjxintong.com.cn?
http://www.infocomm-journal.com/bdr
http://www.j-bigdataresearch.com.cn/
轉載、合作:010-81055537
大數據期刊
《大數據(Big Data Research,BDR)》雙月刊是由中華人民共和國工業和信息化部主管,人民郵電出版社主辦,中國計算機學會大數據專家委員會學術指導,北京信通傳媒有限責任公司出版的期刊,已成功入選中文科技核心期刊、中國計算機學會會刊、中國計算機學會推薦中文科技期刊,并被評為2018年國家哲學社會科學文獻中心學術期刊數據庫“綜合性人文社會科學”學科最受歡迎期刊。
關注《大數據》期刊微信公眾號,獲取更多內容
總結
以上是生活随笔為你收集整理的大数据场景中语言虚拟机的应用和挑战的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL--数据库基础
- 下一篇: 广播和多播