java 空间换时间_java空间换时间该如何实现?

在系统中,由于资源是有限的,所以为了能够在一些有限的资源内,达成某些特定的性能目标,就需要使用时间换空间或空间换时间的方法,下面我们就来了解下其中实现。

时间换空间

这种方法一般会用于嵌入式设备或内存、硬盘空间不足的情况下,它能通过牺牲CPU的方式,来获得原本要更多内存或硬盘空间才能完成的工作。

在程序中,交换两个变量最常用的方法是使用一个中间变量,而引入额外的变量意味着要使用空间也更多。如若采用下面方法,我们就可以免去中间变量,而达到变量交换目的,但代价则是引入了更多的CPU运算。

例:aa = a + b;

b = a - b;

aa = a - b;

其他较为有用的例子就属对无符号整数的支持了。我们知道,在Java语言中是不支持无符号整数的,这意味着当我们需要无符号的byte时,就得使用short代替,这就造成了空间的浪费。

PS:程序性能优化的关键其实就在于掌握各部分组件的性能平衡点。如若一个系统CPU资源空闲,但内存使用紧张,就可以考虑使用时间换空间的策略,达到整体性能的改良。反之,如若CPU资源紧张,而内存资源有空闲,则可以使用空间换时间的策略,提升整体性能。

空间换时间

相对于时间换空间,空间换时间则是尝试使用更多的内存或磁盘空间换取CPU资源或网络资源等,它会通过增加系统的内存消耗,来加快程序的运行速度。

缓存就是空间换时间典型应用。缓存是一块额外的系统内存区,如果没有缓存,程序依然可能够常工作。但在一般情况下,缓存中会总是保存那些来之不易的数据,如果没有缓存,重新取得这些数据就会花费大量的资源和时间。使用缓存的话,就避免了频繁的资源消耗,又加快了程序的运行速度。

实际上,空间换时间是一种软件设计思路,除缓存外,在某些算法中,其实也可以使用这样的技术。如下:public class SpaceSort

{

public static int arrayLen = 1000000;

public static void main( String[] args)

{

int[] a = new int[arrayLen];

int[] old = new int[arrayLen];

Map  map = new HashMap  ();

int count = 0;

while( count 

{ //初始化数组数据

int value = (int)( Math.random() * arrayLen * 10) + 1;

if( map.get( value) == null)

{

map.put( value, value);

a[count] = value;

count++;

}

}

System.arraycopy( a, 0, old, 0, a.length); //这里只是为了保存原有数组

long start = System.currentTimeMillis();

Arrays.sort( a);

System.out.println( "Arrays.sort spend:" + (System.currentTimeMillis() - start) + " ms");

System.arraycopy( old, 0, a, 0, old.length); //恢复原有数据

start = System.currentTimeMillis();

spaceToTime( a);

System.out.println( "spaceToTime spend:" + (System.currentTimeMillis() -

start) + " ms");

}

以上就是本篇文章的所有内容,更多相关java常见问题及解决方法敬请关注奇Q工具了解详情。

推荐阅读:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值