CN112463309B - 多台Java虚拟机之间的数据传输方法和系统 - Google Patents
多台Java虚拟机之间的数据传输方法和系统 Download PDFInfo
- Publication number
- CN112463309B CN112463309B CN202011452890.1A CN202011452890A CN112463309B CN 112463309 B CN112463309 B CN 112463309B CN 202011452890 A CN202011452890 A CN 202011452890A CN 112463309 B CN112463309 B CN 112463309B
- Authority
- CN
- China
- Prior art keywords
- java
- memory
- java virtual
- virtual machines
- address space
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/561—Adding application-functional data or data for application control, e.g. adding metadata
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45595—Network integration; Enabling network access in virtual machine instances
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Library & Information Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种多台Java虚拟机之间的数据传输方法和系统,该方法包括:通过共享文件启动多台Java虚拟机,并预留地址空间;将要传输的Java对象以原格式放入输出流;将Java对象从输入流拷贝至预留地址空间,并读取Java对象;将预留地址空间回收。本发明利用了Java虚拟机提供的应用数据共享特性,有效降低了序列化过程中元数据替换和对象数据格式转化带来的时间开销,加快了数据传输速率;通过零拷贝接口,有效节约了数据在拷贝到输入流时需要的内存空间开销,在保持原有序列化与反序列化接口语意的情况下,消除了反序列化过程中对象重构带来的时间和空间开销,极大的提高了Java对象反序列化效率。
Description
技术领域
本发明涉及通信技术领域,具体地,涉及多台Java虚拟机之间的数据传输方法和系统。
背景技术
Java是一门面向对象(object-oriented)的高级程序语言,它提出的Java虚拟机(Java Virtual Machine,JVM)这一抽象可以帮助Java应用进行内存管理、性能调优、类型检查等一系列复杂而琐碎的工作,在大数据计算和网络服务器的开发中被广泛应用。对于很多应用往往需要有多个Java虚拟机协作完成,因此不可避免地涉及在多个Java虚拟机之间进行通信,即Java对象在不同Java虚拟机之间的传输技术。
经过对现有技术的检索,申请号为CN201210430038.3的文献提供了在虚拟机环境中进行数据交换的方法和装置,在Java对象传输技术中,Java语言提供了序列化与反序列化接口,该接口可以正确的将Java对象包装成可供网络传输的数据流,并在接收端将数据流重构成新的Java对象并使用。但是这种方式在数据转化和对象重构阶段花费大量的时间,造成整体的传输效率很低。针对Java虚拟机上传输效率低的问题,Kryo系统优化了压缩方法,但还是不能避免对象重构过程所花费的大量时间。
远程直接内存访问(RDMA)可以将数据从一个系统快速移动到远程系统的内存中,而不对操作系统造成任何影响。在实现上,RDMA是一种智能网卡与软件架构充分优化的远端内存直接高速访问技术,通过将RDMA协议固化于硬件上,以及支持零拷贝(Zero-copy)和Kernel bypass这两种途径,来达到高性能的远程直接内存访问的目标。在此之前,Java虚拟机的对象传输方式不仅在压缩和转化上花费了大量的时间,同时不能充分利用RDMA的高带宽,导致了传输效率非常低。因此,如何针对Java虚拟机和RDMA的技术特点,开发全新的数据传输技术,从而充分发挥两者的优势,达成Java对象高效转化和传输的目标,已成为亟待解决的技术难题。
发明内容
针对现有技术中的缺陷,本发明的目的是提供一种多台Java虚拟机之间的数据传输方法和系统。
第一方面,本发明提供一种多台Java虚拟机之间的数据传输方法,包括:
步骤1:通过共享文件启动多台Java虚拟机,并预留地址空间;
步骤2:将要传输的Java对象以原格式放入输出流;
步骤3:将所述Java对象从输入流拷贝至预留地址空间,并读取所述Java对象;
步骤4:将所述预留地址空间回收。
可选地,所述步骤1中多台Java虚拟机的同一类型对象的元数据信息存储地址相同。
可选地,所述步骤2包括:
通过序列化接口将存储在内存堆中的Java对象分段拷贝至输出流,并通过网卡将输出流的所述Java对象传输给各个Java虚拟机。
可选地,所述步骤3包括:
通过反序列化接口将预留地址空间与实际物理内存进行映射,并将输入流中的所述Java对象拷贝至预留地址空间;其中,所述预留地址空间中的所述Java对象供Java虚拟机直接使用。
可选地,还包括:
通过操作系统提供的接口进行内存操作,所述操作包括:内存申请、内存使用、内存重用、内存归还。
第二方面,本发明提供一种多台Java虚拟机之间的数据传输系统,包括:
虚拟机启动模块,用于通过共享文件启动多台Java虚拟机,并预留地址空间;
数据序列化模块,用于将要传输的Java对象以原格式放入输出流;
数据反序列化模块,用于将所述Java对象从输入流拷贝至预留地址空间,并读取所述Java对象;
回收模块,用于将所述预留地址空间回收。
可选地,多台Java虚拟机的同一类型对象的元数据信息存储地址相同。
可选地,数据序列化模块,具体用于:
通过序列化接口将存储在内存堆中的Java对象分段拷贝至输出流,并通过网卡将输出流的所述Java对象传输给各个Java虚拟机。
可选地,所述数据反序列化模块,具体用于:
通过反序列化接口将预留地址空间与实际物理内存进行映射,并将输入流中的所述Java对象拷贝至预留地址空间;其中,所述预留地址空间中的所述Java对象供Java虚拟机直接使用。
可选地,还包括:处理模块,具体用于:
通过操作系统提供的接口进行内存操作,所述操作包括:内存申请、内存使用、内存重用、内存归还。
与现有技术相比,本发明具有如下的有益效果:
本发明提供的多台Java虚拟机之间的数据传输方法和系统,利用了Java虚拟机提供的应用数据共享(APPCDS)特性,有效降低了序列化过程中元数据替换和对象数据格式转化带来的时间开销,加快了数据传输速率;通过零拷贝接口,有效节约了数据在拷贝到输入流时需要的内存空间开销,在保持原有序列化与反序列化接口语意的情况下,消除了反序列化过程中对象重构带来的时间和空间开销,极大的提高了Java对象反序列化效率。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为本发明提供的多台Java虚拟机之间的数据传输方法的原理示意图。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
图1为本发明提供的多台Java虚拟机之间的数据传输方法的原理示意图,如图1所示,以Java虚拟机1和Java虚拟机2之间的数据传输为例进行阐述。需要说明的是,本实施例不限定Java虚拟机的数量。本实施例中的方法可以包括如下步骤:
步骤1:通过共享文件启动多台Java虚拟机,并预留地址空间。
在步骤1中,多台Java虚拟机的同一类型对象的元数据信息存储地址相同。
本实施例中,预留地址空间的大小和位置可以通过用户传入的Java虚拟机参数来控制。且步骤1中预留地址空间的过程会在Java虚拟机启动阶段完成。
具体地,用户使用指定的相同共享文件在APPCDS机制下启动运行多个Java应用,每个应用在输入Java虚拟机启动命令和启动参数后,启动Java虚拟机,并进行初始化。在初始化过程中Java虚拟机将Java对象必需的元数据存放入指定位置,并提前预留一段堆外的地址空间。
步骤2:将要传输的Java对象以原格式放入输出流。
在步骤2中,通过序列化接口将存储在内存堆中的Java对象分段拷贝至输出流,并通过网卡将输出流的Java对象传输给各个Java虚拟机。
具体地,每个Java应用可在运行的任意时刻通过序列化接口,将需要传输的Java对象以Java内存的结构分段拷贝入对应输出流,并依据引用关系计算和修改相对应地引用地址。输出流中的数据可以通过网卡传送至其他Java虚拟机中。此步骤省去了对象格式转化与数据压缩的开销,从而提高了对象序列化的速度。
步骤3:将Java对象从输入流拷贝至预留地址空间,并读取Java对象。
在步骤3中,通过反序列化接口将预留地址空间与实际物理内存进行映射,并将输入流中的Java对象拷贝至预留地址空间;其中,预留地址空间中的Java对象供Java虚拟机直接使用。
本实施例中,Java虚拟机能够通过使用提供的轻量级反序列化接口将利用网卡读到的输入流中的数据拷贝入指定地址空间,并成为可以供Java虚拟机直接使用的Java对象。Java虚拟机能够对传输数据的引用关系进行自动调整,以保证数据的完整和可用性。
本实施例中,从输入流中读取的字节数组在被存入指定地址空间后无需任何其他操作即可被当作对象使用。且存储在预留地址空间中的反序列化对象仍然保持Java对象原有的高级语言特性和生命周期。
具体地,每个Java虚拟机可在从输入流获得其他Java虚拟机传过来的数据,Java应用可以利用反序列化接口,将预留的地址空间与实际物理内存进行映射,并将输入流中的数据直接拷贝入对应的物理内存当中形成新的Java对象。用户可以直接使用从该接口获得的Java对象。借助APPCDS共享元数据的特性,此步骤省去了对象重构,数据解压缩和指针修正的过程,从而大幅度降低了数据反序列化的开销。
步骤4:将预留地址空间回收。
具体地,当反序列化的Java对象使用完毕成为不再需要的垃圾对象后,Java虚拟机会对垃圾对象进行回收,对其所占用的内存空间进行重分配和再利用。
本实施例中,使用相同的共享文件(APPCDS)启动多个Java虚拟机,并预留地址空间;将要传输的Java对象直接以原格式放入输出流,消除了数据格式转化和压缩的过程;将Java对象直接从输入流拷贝至预留空间,直接读取对象,消除了对象构造,数据流解压缩和指针替换的过程;将预留空间回收,使其可以多次使用。
示例性的,本实施例中的网卡采用远程直接内存访问(RDMA)网卡,可实现多台虚拟机之间的数据传输,使得数据存取速度快,带宽高。并且结合Java虚拟机的应用数据共享特性,对现有的数据传输技术进行了改进,在保证数据正确性的同时大幅度提高虚拟机间的数据传输效率。
示例性的,上述方法还包括:
通过操作系统提供的接口进行内存操作,操作包括:内存申请、内存使用、内存重用、内存归还。
本实施例中,Java虚拟机能够通过操作系统提供的接口来直接获取内存,并进行申请、使用、重用、归还等一些列自动化管理操作。
本发明实施例还提供一种多台Java虚拟机之间的数据传输系统,包括:
虚拟机启动模块,用于通过共享文件启动多台Java虚拟机,并预留地址空间;
数据序列化模块,用于将要传输的Java对象以原格式放入输出流;
数据反序列化模块,用于将Java对象从输入流拷贝至预留地址空间,并读取Java对象;
回收模块,用于将预留地址空间回收。
可选地,多台Java虚拟机的同一类型对象的元数据信息存储地址相同。
可选地,数据序列化模块,具体用于:
通过序列化接口将存储在内存堆中的Java对象分段拷贝至输出流,并通过网卡将输出流的Java对象传输给各个Java虚拟机。
可选地,数据反序列化模块,具体用于:
通过反序列化接口将预留地址空间与实际物理内存进行映射,并将输入流中的Java对象拷贝至预留地址空间;其中,预留地址空间中的Java对象供Java虚拟机直接使用。
可选地,还包括:处理模块,具体用于:
通过操作系统提供的接口进行内存操作,操作包括:内存申请、内存使用、内存重用、内存归还。
需要说明的是,本发明提供的多台Java虚拟机之间的数据传输方法中的步骤,可以利用多台Java虚拟机之间的数据传输系统中对应的模块、装置、单元等予以实现,本领域技术人员可以参照系统的技术方案实现方法的步骤流程,即,系统中的实施例可理解为实现方法的优选例,在此不予赘述。
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统及其各个装置以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统及其各个装置以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同功能。所以,本发明提供的系统及其各项装置可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构;也可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。
Claims (6)
1.一种多台Java虚拟机之间的数据传输方法,其特征在于,包括:
步骤1:通过共享文件启动多台Java虚拟机,并预留地址空间;
步骤2:将要传输的Java对象以原格式放入输出流;
步骤3:将所述Java对象从输入流拷贝至预留地址空间,并读取所述Java对象;
步骤4:将所述预留地址空间回收;
所述步骤2包括,将需要传输的在内存堆中的Java对象以Java内存的结构分段拷贝入对应输出流,并依据引用关系计算和修改相对应地引用地址,通过网卡将输出流的所述Java对象传输给各个Java虚拟机;
所述步骤3包括:
通过反序列化接口将预留地址空间与实际物理内存进行映射,并将输入流中的所述Java对象拷贝至预留地址空间,所述预留地址空间中的所述Java对象供Java虚拟机直接使用。
2.根据权利要求1所述的多台Java虚拟机之间的数据传输方法,其特征在于,所述步骤1中多台Java虚拟机的同一类型对象的元数据信息存储地址相同。
3.根据权利要求1-2中任一项所述的多台Java虚拟机之间的数据传输方法,其特征在于,还包括:
通过操作系统提供的接口进行内存操作,所述操作包括:内存申请、内存使用、内存重用、内存归还。
4.一种多台Java虚拟机之间的数据传输系统,其特征在于,包括:
虚拟机启动模块,用于通过共享文件启动多台Java虚拟机,并预留地址空间;
数据序列化模块,用于将要传输的Java对象以原格式放入输出流;
数据反序列化模块,用于将所述Java对象从输入流拷贝至预留地址空间,并读取所述Java对象;
回收模块,用于将所述预留地址空间回收;
所述数据序列化模块包括,将需要传输的在内存堆中的Java对象以Java内存的结构分段拷贝入对应输出流,并依据引用关系计算和修改相对应地引用地址,通过网卡将输出流的所述Java对象传输给各个Java虚拟机;
通过反序列化接口将预留地址空间与实际物理内存进行映射,并将输入流中的所述Java对象拷贝至预留地址空间,所述数据反序列化模块,所述预留地址空间中的所述Java对象供Java虚拟机直接使用。
5.根据权利要求4所述的多台Java虚拟机之间的数据传输系统,其特征在于,多台Java虚拟机的同一类型对象的元数据信息存储地址相同。
6.根据权利要求4-5中任一项所述的多台Java虚拟机之间的数据传输系统,其特征在于,还包括:处理模块,具体用于:
通过操作系统提供的接口进行内存操作,所述操作包括:内存申请、内存使用、内存重用、内存归还。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011452890.1A CN112463309B (zh) | 2020-12-11 | 2020-12-11 | 多台Java虚拟机之间的数据传输方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011452890.1A CN112463309B (zh) | 2020-12-11 | 2020-12-11 | 多台Java虚拟机之间的数据传输方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112463309A CN112463309A (zh) | 2021-03-09 |
CN112463309B true CN112463309B (zh) | 2022-11-29 |
Family
ID=74801456
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011452890.1A Active CN112463309B (zh) | 2020-12-11 | 2020-12-11 | 多台Java虚拟机之间的数据传输方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112463309B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102880490A (zh) * | 2012-09-19 | 2013-01-16 | 南京大学 | 一种基于Java虚拟机的延时动态对象更新方法 |
CN103559076A (zh) * | 2013-11-04 | 2014-02-05 | 飞天诚信科技股份有限公司 | 一种使用寄生对象管理对象堆的方法和装置 |
CN107766120A (zh) * | 2016-08-23 | 2018-03-06 | 华为技术有限公司 | 一种虚拟机中对象信息的记录方法及相关设备 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110185129A1 (en) * | 2010-01-22 | 2011-07-28 | Sun Microsystems, Inc. | Secondary java heaps in shared memory |
US20180276016A1 (en) * | 2017-03-21 | 2018-09-27 | Ca, Inc. | Java virtual machine ability to process a native object |
-
2020
- 2020-12-11 CN CN202011452890.1A patent/CN112463309B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102880490A (zh) * | 2012-09-19 | 2013-01-16 | 南京大学 | 一种基于Java虚拟机的延时动态对象更新方法 |
CN103559076A (zh) * | 2013-11-04 | 2014-02-05 | 飞天诚信科技股份有限公司 | 一种使用寄生对象管理对象堆的方法和装置 |
CN107766120A (zh) * | 2016-08-23 | 2018-03-06 | 华为技术有限公司 | 一种虚拟机中对象信息的记录方法及相关设备 |
Non-Patent Citations (1)
Title |
---|
DwarfGC: A Space-efficient and Crash-consistent Garbage Collector in NVM for Cloud Computing;Heting Li, Mingyu Wu;《2018 IEEE Symposium on Service-Oriented System Engineering》;20180331;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112463309A (zh) | 2021-03-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103262030B (zh) | 经由动态聚合操作的快速且线性化并发优先级队列 | |
CN110750356B (zh) | 适用于非易失性内存的多核交互方法、系统及存储介质 | |
US11249758B2 (en) | Conditional branch frame barrier | |
US6493730B1 (en) | Efficient object faulting with generational garbage collection | |
JP2009032252A (ja) | クラッシュダンプ用のメモリアロケーション | |
CN102770841A (zh) | 用于产生最小引导映像的方法和装置 | |
WO2006018683A2 (en) | Flash file system management | |
JP6052406B2 (ja) | 分散処理システム、分散処理装置、分散処理方法および分散処理プログラム | |
CN112612623B (zh) | 一种共享内存管理的方法和设备 | |
CN104679572A (zh) | 基于预加载机制的插件支持方法 | |
CN104731569A (zh) | 一种数据处理方法及相关设备 | |
US20230297352A1 (en) | Method for Starting Serverless Container and Related Device | |
EP4318211A1 (en) | Method for inspecting code under weak memory order architecture, and corresponding device | |
CN113791870B (zh) | 一种WebAssembly虚拟机分布式系统细粒度迁移方法及系统 | |
CN115391237A (zh) | 应用于闪存存储控制器中的垃圾回收系统及方法 | |
CN113448897B (zh) | 适用于纯用户态远端直接内存访问的优化方法 | |
CN114490023A (zh) | 一种基于arm和fpga的高能物理可计算存储设备 | |
US20200327052A1 (en) | Compiling application with multiple function implementations for garbage collection | |
CN112463309B (zh) | 多台Java虚拟机之间的数据传输方法和系统 | |
US11474832B2 (en) | Intelligently determining a virtual machine configuration during runtime based on garbage collection characteristics | |
CN112667593A (zh) | 一种ETL流程执行hbase快速装载的方法与装置 | |
US20040015943A1 (en) | Embedded computer system equipped with an upgradeable software library | |
US9069821B2 (en) | Method of processing files in storage system and data server using the method | |
US20130145113A1 (en) | Memory pinning through buffer encapsulation | |
Zhang et al. | An incremental iterative acceleration architecture in distributed heterogeneous environments with GPUs for deep learning |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |