public class BiayaLintasBatas {
    // Model biaya JNI: setiap perjalanan Java -> native -> Java dikenai
    // biaya tetap, sedangkan biaya olah tiap data selalu 1 satuan.
    static final int BIAYA_LINTAS = 3;
    static final int BIAYA_OLAH = 1;

    public static void main(String[] args) {
        int jumlahData = 1000;

        // Pola buruk: satu panggilan native per data (dua arah per item).
        int perItem = jumlahData * (BIAYA_LINTAS * 2 + BIAYA_OLAH);

        // Pola sehat: satu panggilan batch untuk seluruh data.
        int batch = jumlahData * BIAYA_OLAH + BIAYA_LINTAS * 2;

        System.out.println("model biaya lintas batas JNI");
        System.out.println("jumlah data          : " + jumlahData);
        System.out.println("biaya per lintasan   : " + BIAYA_LINTAS + " satuan");
        System.out.println("biaya olah per data  : " + BIAYA_OLAH + " satuan");
        System.out.println();
        System.out.printf("panggilan per data : %d satuan%n", perItem);
        System.out.printf("panggilan batch    : %d satuan%n", batch);
        System.out.printf("rasio pemborosan   : %.1f kali%n", perItem / (double) batch);
    }
}
