Memahami bottleneck kinerja

Optimasi Kode di Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Apa itu bottleneck kinerja?

Mereka adalah kendala yang membatasi kecepatan dan efisiensi aplikasi.

Bayangkan menuang air melalui corong—bagian tersempit menentukan laju alir!

Air mengalir melalui corong

Optimasi Kode di Java

Jenis bottleneck

Bottleneck terikat CPU

  • Perhitungan kompleks
  • Algoritme tidak efisien

Bottleneck terikat I/O

  • Operasi basis data
  • Panggilan jaringan
  • Operasi berkas

Bottleneck terikat memori (dibahas di pelajaran berikutnya)

Optimasi Kode di Java

Mengukur kinerja dengan System.nanoTime()

  • System.nanoTime() - Pengukuran waktu presisi tinggi
    • Mengukur waktu berlalu
    • Mengembalikan nanodetik (1 miliar = 1 detik) sebagai angka long
  • Tidak seperti System.currentTimeMillis(), mengukur waktu dinding

$$

long startTime = System.nanoTime();
// Code to measure
long endTime = System.nanoTime();
long duration = endTime - startTime;
Optimasi Kode di Java

Menggunakan System.nanoTime()

// Measuring ArrayList.contains() performance
import java.util.ArrayList;
import java.util.List;

List<Integer> numbers = new ArrayList<>();
for (int i = 0; i < 100000; i++) {
    numbers.add(i);
}

long startTime = System.nanoTime(); boolean found = numbers.contains(99999); // O(n) operation long endTime = System.nanoTime();
Optimasi Kode di Java

Menggunakan System.nanoTime()

long duration = endTime - startTime;
System.out.println("Time taken: " + duration + " ns");
// Convert to milliseconds
System.out.println("Time taken: " + duration / 1_000_000.0 + " ms");
Time taken: 1239000000 ns
Time taken: 1239ms
  • ArrayList.contains() adalah operasi O(n)
Optimasi Kode di Java

Praktik terbaik untuk mengukur kinerja

  • Jalankan beberapa pengukuran
Optimasi Kode di Java

Jalankan beberapa pengukuran

long totalTime = 0;
for (int i = 0; i < 3; i++) {
    long start = System.nanoTime();
    findElementLinear(data, target);
    long iterationTime = System.nanoTime() - start;
    totalTime += iterationTime;
    System.out.println("Run " + (i+1) + ": " + iterationTime + " ns");
}
double averageTime = totalTime / 3.0;
System.out.println("Average: " + (long)averageTime + " ns");
Run 1: 3245678 ns
Run 2: 3198432 ns
Run 3: 3301234 ns
Average: 3248448 ns
Optimasi Kode di Java

Praktik terbaik untuk mengukur kinerja

  • Jalankan beberapa pengukuran
  • Bandingkan kinerja relatif
// Assume we have calculated avgTimeA and avgTimeB already
System.out.println("Operation A is" + (avgTimeA / avgTimeB) + "x slower");
Operation A is 4x slower
Optimasi Kode di Java

Ayo berlatih!

Optimasi Kode di Java

Preparing Video For Download...