一种java程序线程优化方法与流程

文档序号:18300964发布日期:2019-07-31 10:07阅读:402来源:国知局
一种java程序线程优化方法与流程

本发明涉及程序线程优化领域,尤其涉及一种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(inti=0;i<5;i++)中的参数“i”的初始值,步长,最大值,计算式存入多维数组。

步骤2:根据获取的循环变量的多维数组对java程序进行线程优化处理。

步骤2.1:根据循环变量的多维数组,判断循环变量之前是否存在互相依存关系。

如图3所示,根据循环变量的多维数组,将多维数组转换成矩阵,当循环变量之间有相互依存关系时,对于循环变量是不能做线程优化处理的,因此需要判断循环变量的使用是否存在相互依存关系。

例如循环:

1:for(inti=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程序的循环语句进行了自动优化,并使用多线程的方式运行程序,使得程序能够更好地发挥多核系统的执行优势,在相同硬件配置的情况下,提高程序的执行效率,从而达到减少运营成本的目的。所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。

上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1