600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 二维数组横向和纵向遍历的巨大差距:缺页问题

二维数组横向和纵向遍历的巨大差距:缺页问题

时间:2022-09-24 17:35:38

相关推荐

二维数组横向和纵向遍历的巨大差距:缺页问题

缺页问题

缺页是引入了虚拟内存后的一个概念。操作系统启动后,在内存中维护着一个虚拟地址表,进程需要的虚拟地址在虚拟地址表中记录。一个程序被加载运行时,只是加载了很少的一部分到内存,另外一部分在需要时再从磁盘载入。被加载到内存的部分标识为“驻留”,而未被加载到内存的部分标为“未驻留”。操作系统根据需要读取虚拟地址表,如果读到虚拟地址表中记录的地址被标为“未驻入”,表示这部分地址记录的程序代码未被加载到内存,需要从磁盘读入,则这种情况就表示"缺页"。这个时候,操作系统触发一个“缺页”的硬件陷井,系统从磁盘换入这部分未“驻留”的代码。

引入了分页机制(也就有了缺页机制),则系统只需要加载程序的部分代码到内存,就可以创建进程运行, 需要程序的另一部分时再从磁盘载入并运行,从而允许比内存大很多的程序同时在内存运行。

引自:操作系统中的缺页

代码测试

/*** 测试缺页造成的时间消耗*/public class TestPageMissing {public static void main(String[] args) {int[][] arr = new int[5000][6000];//横向遍历long start1 = System.currentTimeMillis();for(int i = 0;i < 5000;i++)for(int j = 0;j < 6000;j++)arr[i][j] = 1;long end1 = System.currentTimeMillis();//纵向遍历long start2 = System.currentTimeMillis();for(int j = 0;j < 6000;j++)for(int i = 0;i < 5000;i++)arr[i][j] = 1;long end2 = System.currentTimeMillis();System.out.println("横向遍历耗时:" + (end1 - start1) + "秒,纵向遍历耗时:" + (end2 - start2) + "秒.");}}

运行结果

原因分析:

纵向遍历二维数组的跳度很大,导致内存中读取数据的缺页增加,使得在辅存中读取数据的次数增加,降低运行效率。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。