1. 程式人生 > >SW練習中估算時間、記憶體限制輔助方法

SW練習中估算時間、記憶體限制輔助方法

1.記憶體限制

無論是SW.adv 還是SW.pro 題目中都有 “儲存限制 256MB\512MB” 解題同時,我們需要使用一些估算方法和措施,進行除錯

1.1 大概估算

//二維int陣列 10005*10005
//估算,1_0000_0000 int  * 4 bit /1024*1024 約等於 381.5MB
private static int[][] pool = new int[size][size];

//如果題目限制為256MB 執行後則會出現下面的Exception
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
	at sw.
test.CheckMemory.main(CheckMemory.java:24)

1.2 在IDE中設定VM Option

如下圖所示 在IDEA中 Run configuration 設定VM options 在這裡插入圖片描述 測試程式碼

package sw.test;

public class CheckMemory {
    private static int size = 1_0005;
    //private static int[][] pool = new int[size][size];


    /* 如果題目的記憶體限制在256M,可在Run configuration的 VM Option
        新增引數中新增 -Xmx256m
        本例中 二維int陣列 10005*10005
        估算,1_0000_0000 int  * 4 bit /1024*1024 約等於 381.5MB
        在修改為 -Xmx512m後,不在OutOfMemoryError
     */
public static void main(String[] args) { //TO-Do // 測試的程式碼段 int[][] pool = new int[size][size]; } }

2。時間限制

無論是SW.adv 還是SW.pro 題目中都有 “時間限制 1.0s\2.0s\3.0s”

2.1 大概估算

程式碼中 計算\執行 1_0000_0000次, 大概需時間1秒

2.2 使用程式碼計算

package sw.test;

import java.util.Random;

public class CheckMemory {
    private
static int size = 1_0005; //private static int[][] pool = new int[size][size]; /* 如果題目的記憶體限制在256M,可在Run configuration的 VM Option 新增引數中新增 -Xmx256m 本例中 二維int陣列 10005*10005 估算,1_0000_0000 int * 4 bit /1024*1024 約等於 381.5MB 在修改為 -Xmx512m後,不在OutOfMemoryError */ public static void main(String[] args) { //估演算法:程式碼中 計算\執行 1_0000_0000次, 大概需時間1秒 //簡單測試法: long startTime = System.currentTimeMillis(); //獲取開始時間 //TO-Do // 測試的程式碼段 Random random = new Random(startTime); int[][] pool = new int[size][size]; for (int i = 0; i <pool.length; i++) { for (int j = 0; j < pool.length; j++) { pool[i][j] = random.nextInt(); } } long endTime = System.currentTimeMillis(); //獲取結束時間 System.out.println("程式執行時間: " + (endTime - startTime) + "ms"); } } 程式執行時間: 932ms