CN110069243A - 一种java程序线程优化方法 - Google Patents
一种java程序线程优化方法 Download PDFInfo
- Publication number
- CN110069243A CN110069243A CN201811289574.XA CN201811289574A CN110069243A CN 110069243 A CN110069243 A CN 110069243A CN 201811289574 A CN201811289574 A CN 201811289574A CN 110069243 A CN110069243 A CN 110069243A
- Authority
- CN
- China
- Prior art keywords
- java program
- variable
- carried out
- optimization method
- cyclic variable
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/22—Procedural
-
- 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5017—Task decomposition
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供一种java程序线程优化方法,涉及程序线程优化领域,所述方法包括以下步骤:步骤1:对java程序文件进行初始化处理,获取java程序中初始化处理的循环变量的参数内容,并构建多维数组;步骤2:根据获取的循环变量的参数内容的多维数组对java程序进行线程优化处理;步骤3:调取通用函数对java程序进行代码重写。发明解决了现有技术中java程序难以发挥多核处理器的执行优势,导致硬件配置高,而运行效果变化不明显的问题。
Description
技术领域
本发明涉及程序线程优化领域,尤其涉及一种java程序线程优化方法。
背景技术
随着信息技术的快速发展,手机已经成为人们日常工作生活的必须品。基于安卓系统的软件和应用层出不穷,其中,java语言不仅应用于服务端的开发还被广泛用于手机端的应用开发。
在在应用程序开发过程中,需要对程序进行优化,比如寻找空指针,无效参数等,对于与硬件配合方面考虑较少,然而随着技术的不断进步,处理器多核化,内存容量扩大化,硬件水平在不断提升,但程序本身不能很好的适应,很难发挥硬件上的优势,从而会有硬件上更新提高使用高配置了,而运行效果却变化不明显的现象。
发明内容
鉴于以上所述现有技术的缺点,本发明的目的在于提供一种java程序线程优化方法,用于解决现有技术中java程序难以发挥多核处理器的执行优势,导致硬件配置高,而运行效果变化不明显的问题。
本发明提供一种java程序线程优化方法,所述方法包括以下步骤:
步骤1:对java程序文件进行初始化处理,获取java程序中初始化处理的循环变量的参数内容,并构建多维数组;
步骤2:根据获取的循环变量的参数内容的多维数组对java程序进行线程优化处理;
步骤3:调取通用函数对java程序进行代码重写。
进一步的,所述初始化处理步骤如下:
步骤1.1:对java程序源代码的字符流进行分割,并构造Token树结构;
步骤1.2:判断分割后的Token树结构中是否包含有函数定义循环,判断,开始,结束的关键词和符号;若有,则使用堆栈记录循环,判断开始和结束位置,并新建数组对循环,判断开始和结束位置进行保存;
步骤1.3:判断分割后的Token中是否包含有定义数据类型的单词或者用户自定义的class,若有,则根据单词在Token树结构中出现的位置来确定是局部变量还是全局变量,并新建数组对变量的参数名称和使用位置进行保存;
步骤1.4:基于循环,判断开始和结束位置的数组和局部变量和全局变量参数名称和使用位置的数组,获取java程序中循环变量的相关参数内容,并构建多维数组。
进一步的,所述局部变量是逻辑函数中进行初始化处理的变量,全局变量是Token最外层的变量。
进一步的,所述变量使用位置为参数在Token树结构的位置以及涉及代码的行数。
进一步的,所述线程优化处理步骤如下:
步骤2.1:根据循环变量的多维数组,判断循环变量之间是否存在互相依存关系;
步骤2.2:对存在互相依存关系的循环变量进行有限次数的线性变换,直到循环变量不存在相互依存关系;
步骤2.3:采用多线程方式对线性变换处理后的循环变量进行线程优化处理。
进一步的,所述代码重写是调用通用函数,遍历Token树结构执行java程序代码重写。
如上所述,本发明的一种java程序线程优化方法,具有以下有益效果:
本发明中,对java程序的循环语句进行了自动优化,并使用多线程的方式运行程序,使得程序能够更好地发挥多核系统的执行优势,在相同硬件配置的情况下,提高程序的执行效率,从而达到减少运营成本的目的。
附图说明
图1为本发明实施例中公开的线程优化方法流程图;
图2为本发明实施例中公开的初始化处理流程图;
图3为本发明实施例中公开的线程优化处理流程图。。
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
如图1所示,本发明提供一种java程序线程优化方法,在对java程序进线程优化前,需要选择支持的java版本,其中,主要支持jdk1.6,jdk1.7以及jdk1.8;然后对java程序进线程优化,包括以下步骤:
步骤1:对java程序文件进行初始化处理,获取java程序中初始化处理的循环变量的参数内容,并构建多维数组;
如图2所示,首先调用函数对java程序源代码的字符流进行分割,并构造Token树结构;
然后判断分割后的Token树结构中是否包含有函数定义循环,判断,开始,结束的关键词和符号,例如:“while,for,do…while,if,else”,以及括号和分号等,若有,则使用堆栈记录循环,判断开始和结束位置,并新建一个数组对判断开始和结束位置进行保存,从而实现对java文件内容板块的分割;
判断分割后的Token树结构中是否包含定义数据类型的单词或者用户自定义的Class,例如:“int,char,boolean”等赋值处理,若存在,则根据单词和Class在Token树结构中出现的位置来确定是局部变量还是全局变量,并新建一个数组对变量的参数名称和使用位置进行保存。
其中,在Token最外层的为全局变量,在“for,if,…”逻辑函数中进行初始化处理的是局部变量,记录的变量的使用位置为Token树结构位置以及涉及代码的行数。
最后记录函数定义循环初始化处理时使用的循环变量相关的参数内容至多维数组,例如循环:for(int i=0;i<5;i++)中的参数“i”的初始值,步长,最大值,计算式存入多维数组。
步骤2:根据获取的循环变量的多维数组对java程序进行线程优化处理。
步骤2.1:根据循环变量的多维数组,判断循环变量之前是否存在互相依存关系。
如图3所示,根据循环变量的多维数组,将多维数组转换成矩阵,当循环变量之间有相互依存关系时,对于循环变量是不能做线程优化处理的,因此需要判断循环变量的使用是否存在相互依存关系。
例如循环:
1:for(int i=0;i<5;i++){
2:a[i]=1;
3:b[i]=b[i-1]+1;
4:};
其中,第二行a[i]=1,为没有依存关系;第三行b[i]=b[i-1]+1,数组b[i]使用了前一个循环的b[i-1],因此有依存关系。
对于存在依存关系的循环变量,特别是两层以上的循环变量,需要对循环变量进行线性变换,改变变量的写法,从而使本来有依存关系的循环变量没有依存关系。
对于是否有依存关系的判断,可以用参数关系的向量来表示;
例如循环(1):
1:for(i=1;i<7;i++){
2:for(j=i+1;j<i+6;j++){
3:A[i][j]=A[i-1][j]+1;
4:}
5:}
上述使用的循环变量为两层,分别为i和j;其中i的参数变化为A[i]=A[i-1]+…的形式,增长方向为顺序增长,i参数之间的关系为+1来表现;j的参数变化是A[j]=A[j]+…的形式,j参数之间的关系为0来表现。
参数i,j的参数关系的向量为(1,0),参数关系为0的则为没有依存关系,参数关系不为0的则为有依存关系,参数关系为0的越在前越可以提高并列执行的效率,减少依存关系的影响。
步骤2.2:为了有效进行多线程来优化程序,需要对存在依存关系的循环变量进行有限次数的线性变化处理(不限于图3所示的5次,可以根据具体情况设置),从而使本来有依存关系的循环变量没有依存关系。
本发明采用基础的矩阵交换、矩阵旋转、矩阵偏移对循环变量进行线性变换处理得到没有依存关系的循环;例如采用如下矩阵交换的方式:
使循环(a)变换为循环(b)的形式,其中T为特征值。
其中,
具体实施如下:
对循环(1)进行矩阵交换,此时的交换方式可以用如下矩阵表示:此处先对参数范围进行转换,原来的参数范围为i:[1,7),j:[i+1,i+6);i转换为j,j转换为i。
则参数范围改写为1<=j<=6,j+1<=i<=j+5;
形式转换为2<=i<=12,i-5<=j<=i-1;
则循环(1)变换为循环(2):
1:for(i=2;i<13;i++){
2:for(j=i-5;j<i-1;j++){
3:A[j][i]=A[j-1][i]+1;
4:}
5:}
对于循环(2),参数i的参数关系为0,因此可以对第二层循环进行并列的多线程优化处理;
类似的,对于矩阵旋转,转换方式可以表示为:即将i转化为i,j转化为i+j;
类似的,对于矩阵偏移,转换方式可以表示为:即将i转化为i′+2,j转化为j。
即根据实际的循环变量选择上述矩阵交换、矩阵旋转、矩阵偏移对循环变量进行线性变换处理得到没有依存关系的循环。
步骤2.3:采用多线程方式对线性变换处理后的循环变量进行线程优化处理。
首先在文件底部生成Runnable的内部类,替代循环变量进行新的初始化;
具体代码如下:
然后调用执行类函数run(),将此内容和插入Token树结构;
具体代码如下:
最后将原来的循环(1)变为下面这样的形式:
步骤3:调取通用函数对java程序进行代码重写。
调用通用函数,遍历Token树结构对线程优化处理后的程序执行java程序代码重写。
综上所述,本发明对java程序的循环语句进行了自动优化,并使用多线程的方式运行程序,使得程序能够更好地发挥多核系统的执行优势,在相同硬件配置的情况下,提高程序的执行效率,从而达到减少运营成本的目的。所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。
Claims (6)
1.一种java程序线程优化方法,其特征在于,所述方法包括以下步骤:
步骤1:对java程序文件进行初始化处理,获取java程序中初始化处理的循环变量的参数内容,并构建多维数组;
步骤2:根据获取的循环变量的参数内容的多维数组对java程序进行线程优化处理;
步骤3:调取通用函数对java程序进行代码重写。
2.根据权利要求1所述的java程序线程优化方法,其特征在于,所述初始化处理步骤如下:
步骤1.1:对java程序源代码的字符流进行分割,并构造Token树结构;
步骤1.2:判断分割后的Token树结构中是否包含有函数定义循环,判断,开始,结束的关键词和符号;若有,则使用堆栈记录循环,判断开始和结束位置,并新建数组对循环,判断开始和结束位置进行保存;
步骤1.3:判断分割后的Token中是否包含有定义数据类型的单词或者用户自定义的class,若有,则根据单词在Token树结构中出现的位置来确定是局部变量还是全局变量,并新建数组对变量的参数名称和使用位置进行保存;
步骤1.4:基于循环,判断开始和结束位置的数组和局部变量和全局变量参数名称和使用位置的数组,获取java程序中循环变量的相关参数内容,并构建多维数组。
3.根据权利要求2所述的java程序线程优化方法,其特征在于,所述局部变量是逻辑函数中进行初始化处理的变量,全局变量是Token最外层的变量。
4.根据权利要求2所述的java程序线程优化方法,其特征在于,所述变量使用位置为参数在Token树结构的位置以及涉及代码的行数。
5.根据权利要求1所述的java程序线程优化方法,其特征在于,所述线程优化处理步骤如下:
步骤2.1:根据循环变量的多维数组,判断循环变量之间是否存在互相依存关系;
步骤2.2:对存在互相依存关系的循环变量进行有限次数的线性变换,直到循环变量不存在相互依存关系;
步骤2.3:采用多线程方式对线性变换处理后的循环变量进行线程优化处理。
6.根据权利要求1所述的java程序线程优化方法,其特征在于,所述代码重写是调用通用函数,遍历Token树结构执行java程序代码重写。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811289574.XA CN110069243B (zh) | 2018-10-31 | 2018-10-31 | 一种java程序线程优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811289574.XA CN110069243B (zh) | 2018-10-31 | 2018-10-31 | 一种java程序线程优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110069243A true CN110069243A (zh) | 2019-07-30 |
CN110069243B CN110069243B (zh) | 2023-03-03 |
Family
ID=67365847
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811289574.XA Active CN110069243B (zh) | 2018-10-31 | 2018-10-31 | 一种java程序线程优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110069243B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111090466A (zh) * | 2019-12-20 | 2020-05-01 | 北京字节跳动网络技术有限公司 | 调用指令的优化方法、装置、设备和存储介质 |
CN116483545A (zh) * | 2023-06-19 | 2023-07-25 | 支付宝(杭州)信息技术有限公司 | 一种多任务执行方法、装置以及设备 |
Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6295642B1 (en) * | 1999-04-29 | 2001-09-25 | International Business Machines Corporation | Method and apparatus for partial just in time compiling in a data processing system |
US20070087756A1 (en) * | 2005-10-04 | 2007-04-19 | Hoffberg Steven M | Multifactorial optimization system and method |
CN1965308A (zh) * | 2004-04-22 | 2007-05-16 | 瓦拉泰克有限公司 | 具有协作对象的修改后的计算机架构 |
CN101361129A (zh) * | 2006-09-21 | 2009-02-04 | 索尼株式会社 | 再现设备,再现方法和再现计算机程序产品 |
US20110314444A1 (en) * | 2010-06-18 | 2011-12-22 | Microsoft Corporation | Compiler-Generated Invocation Stubs for Data Parallel Programming Model |
US20120102473A1 (en) * | 2010-10-23 | 2012-04-26 | International Business Machines Corporation | Abstract method removal for reduced memory footprint with optimizer tool |
US8180964B1 (en) * | 2007-09-28 | 2012-05-15 | The Mathworks, Inc. | Optimization of cache configuration for application design |
CN102981839A (zh) * | 2012-11-06 | 2013-03-20 | 无锡江南计算技术研究所 | 合并执行大规模并行线程的数据扩展优化方法 |
CN103186412A (zh) * | 2011-12-31 | 2013-07-03 | 北京新媒传信科技有限公司 | 基于jvm服务器的性能优化方法 |
CN103218551A (zh) * | 2013-05-03 | 2013-07-24 | 飞天诚信科技股份有限公司 | 一种保护java程序的方法 |
CN104391742A (zh) * | 2014-11-11 | 2015-03-04 | 小米科技有限责任公司 | 应用优化方法和装置 |
CN106371836A (zh) * | 2016-08-31 | 2017-02-01 | 郑州众智科技股份有限公司 | 基于android手机的变量操作组件的实现方法 |
CN108628635A (zh) * | 2018-05-07 | 2018-10-09 | 广州视源电子科技股份有限公司 | 获取参数名和局部变量名的方法、装置、设备及存储介质 |
-
2018
- 2018-10-31 CN CN201811289574.XA patent/CN110069243B/zh active Active
Patent Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6295642B1 (en) * | 1999-04-29 | 2001-09-25 | International Business Machines Corporation | Method and apparatus for partial just in time compiling in a data processing system |
CN1965308A (zh) * | 2004-04-22 | 2007-05-16 | 瓦拉泰克有限公司 | 具有协作对象的修改后的计算机架构 |
US20070087756A1 (en) * | 2005-10-04 | 2007-04-19 | Hoffberg Steven M | Multifactorial optimization system and method |
CN101361129A (zh) * | 2006-09-21 | 2009-02-04 | 索尼株式会社 | 再现设备,再现方法和再现计算机程序产品 |
US8180964B1 (en) * | 2007-09-28 | 2012-05-15 | The Mathworks, Inc. | Optimization of cache configuration for application design |
US20110314444A1 (en) * | 2010-06-18 | 2011-12-22 | Microsoft Corporation | Compiler-Generated Invocation Stubs for Data Parallel Programming Model |
US20120102473A1 (en) * | 2010-10-23 | 2012-04-26 | International Business Machines Corporation | Abstract method removal for reduced memory footprint with optimizer tool |
CN103186412A (zh) * | 2011-12-31 | 2013-07-03 | 北京新媒传信科技有限公司 | 基于jvm服务器的性能优化方法 |
CN102981839A (zh) * | 2012-11-06 | 2013-03-20 | 无锡江南计算技术研究所 | 合并执行大规模并行线程的数据扩展优化方法 |
CN103218551A (zh) * | 2013-05-03 | 2013-07-24 | 飞天诚信科技股份有限公司 | 一种保护java程序的方法 |
CN104391742A (zh) * | 2014-11-11 | 2015-03-04 | 小米科技有限责任公司 | 应用优化方法和装置 |
CN106371836A (zh) * | 2016-08-31 | 2017-02-01 | 郑州众智科技股份有限公司 | 基于android手机的变量操作组件的实现方法 |
CN108628635A (zh) * | 2018-05-07 | 2018-10-09 | 广州视源电子科技股份有限公司 | 获取参数名和局部变量名的方法、装置、设备及存储介质 |
Non-Patent Citations (2)
Title |
---|
SHAWN HAGGETT,ET AL.: "Tokenisation and compression of Java class files", 《JOURNAL OF SYSTEMS ARCHITECTURE》 * |
林传文,等: "Java虚拟机中的只读锁优化", 《小型微型计算机系统》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111090466A (zh) * | 2019-12-20 | 2020-05-01 | 北京字节跳动网络技术有限公司 | 调用指令的优化方法、装置、设备和存储介质 |
CN116483545A (zh) * | 2023-06-19 | 2023-07-25 | 支付宝(杭州)信息技术有限公司 | 一种多任务执行方法、装置以及设备 |
CN116483545B (zh) * | 2023-06-19 | 2023-09-29 | 支付宝(杭州)信息技术有限公司 | 一种多任务执行方法、装置以及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN110069243B (zh) | 2023-03-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10885003B2 (en) | Compiling graph-based program specifications | |
CN106663075B (zh) | 执行基于图的程序规范 | |
US9535975B2 (en) | Parallel programming of in memory database utilizing extensible skeletons | |
CN104965761B (zh) | 一种基于gpu/cpu混合架构的流程序多粒度划分与调度方法 | |
CN106687921A (zh) | 在基于图的程序中指定组件 | |
CN104820613B (zh) | 一种异构多核程序的编译方法 | |
CN104050202B (zh) | 用于搜索数据库的方法和装置 | |
CN106687919B (zh) | 用于控制多个组件的执行的方法、系统和计算机可读介质 | |
US8826250B2 (en) | Method for just-in-time compilation and execution of code blocks within discrete event simulations | |
US9424099B2 (en) | Method and system for synchronization of workitems with divergent control flow | |
US20210232394A1 (en) | Data flow processing method and related device | |
CN103324765B (zh) | 一种基于列存储的多核并行数据查询优化方法 | |
CN106605209B (zh) | 控制数据处理任务 | |
Laarman | Scalable multi-core model checking | |
CN106462386B (zh) | 排序分布式输入数据的排序方法和处理系统 | |
CN110069243A (zh) | 一种java程序线程优化方法 | |
CN106293736B (zh) | 用于粗粒度多核计算系统的两级编程装置及其计算方法 | |
CN103942095B (zh) | 一种基于异构加速平台的二维相位解缠绕方法 | |
CN100432999C (zh) | Oracle下利用表结构体对整记录进行数据存取的方法 | |
US20190102152A1 (en) | Interactive code optimizer | |
US20110185328A1 (en) | System and Method for Circuit Design Floorplanning | |
Wang et al. | Minimizing the overheads of dependent {AND}-parallelism | |
US9633160B2 (en) | Method of placement and routing in a reconfiguration of a dynamically reconfigurable processor | |
Abdolrashidi | Improving Data-Dependent Parallelism in GPUs Through Programmer-Transparent Architectural Support | |
Middendorf et al. | Scheduling of recursive and dynamic data-flow graphs using stream rewriting |
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 |