परफॉर्मेंस बॉटलनेक्स को समझना

Java में कोड ऑप्टिमाइज़ करना

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

परफॉर्मेंस बॉटलनेक्स क्या हैं?

ये वे constraints हैं जो हमारी एप्लिकेशन की गति और कुशलता सीमित करती हैं.

सोचिए, फ़नल से पानी डालते हैं — सबसे संकरी जगह ही फ्लो तय करती है!

फ़नल से बहता पानी

Java में कोड ऑप्टिमाइज़ करना

बॉटलनेक्स के प्रकार

CPU-बाउंड बॉटलनेक्स

  • जटिल कैलकुलेशन
  • अक्षम एल्गोरिदम

I/O-बाउंड बॉटलनेक्स

  • डेटाबेस ऑपरेशंस
  • नेटवर्क कॉल्स
  • फ़ाइल ऑपरेशंस

मेमोरी-बाउंड बॉटलनेक्स (आगे के लेसन में)

Java में कोड ऑप्टिमाइज़ करना

System.nanoTime() से परफॉर्मेंस मापना

  • System.nanoTime() - उच्च-सटीकता समय मापन
    • बीता हुआ समय मापता है
    • नैनोसेकंड्स (1 billion = 1 second) long नंबर के रूप में लौटाता है
  • System.currentTimeMillis() के विपरीत, वॉल क्लॉक टाइम मापता है

$$

long startTime = System.nanoTime();
// Code to measure
long endTime = System.nanoTime();
long duration = endTime - startTime;
Java में कोड ऑप्टिमाइज़ करना

System.nanoTime() का उपयोग

// ArrayList.contains() की परफॉर्मेंस मापना
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();
Java में कोड ऑप्टिमाइज़ करना

System.nanoTime() का उपयोग

long duration = endTime - startTime;
System.out.println("Time taken: " + duration + " ns");
// मिलीसेकंड में बदलें
System.out.println("Time taken: " + duration / 1_000_000.0 + " ms");
Time taken: 1239000000 ns
Time taken: 1239ms
  • ArrayList.contains() एक O(n) ऑपरेशन है
Java में कोड ऑप्टिमाइज़ करना

परफॉर्मेंस मापन के सर्वोत्तम तरीके

  • कई बार माप चलाएँ
Java में कोड ऑप्टिमाइज़ करना

कई बार माप चलाएँ

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
Java में कोड ऑप्टिमाइज़ करना

परफॉर्मेंस मापन के सर्वोत्तम तरीके

  • कई बार माप चलाएँ
  • सापेक्ष परफॉर्मेंस तुलना करें
// मान लें avgTimeA और avgTimeB पहले से निकाले गए हैं
System.out.println("Operation A is" + (avgTimeA / avgTimeB) + "x slower");
Operation A is 4x slower
Java में कोड ऑप्टिमाइज़ करना

अभ्यास करते हैं!

Java में कोड ऑप्टिमाइज़ करना

Preparing Video For Download...