SLF4J - Profil Oluşturma

SLF4J Dağıtım sağlar slf4j-ext.jar bu, profil oluşturma, Genişletilmiş günlük kaydı, Olay günlüğü ve java aracısı ile günlük kaydı gibi işlevler için API'leri içerir.

Profil oluşturma

Bazen programcı, o programın gerçek kapasitesini ölçmek için bellek kullanımı, zaman karmaşıklığı veya programlarla ilgili belirli talimatların kullanımı gibi bazı özellikleri ölçmek ister. Programla ilgili bu tür ölçümlere profil oluşturma denir. Profil oluşturma, bu tür ölçümleri yapmak için dinamik program analizi kullanır.

SLF4J adlı bir sınıf sağlar Profiler içinde org.slf4j.profilerprofil oluşturma amaçlı paket. Bu, zavallı adamın profilcisi olarak bilinir. Programcı bunu kullanarak uzun süreli görevleri yerine getirmek için harcanan zamanı bulabilir.

Profiler sınıfını kullanarak profil oluşturma

Profil oluşturucu kronometreler ve alt kronometreler içerir ve bunları profil oluşturucu sınıfı tarafından sağlanan yöntemleri kullanarak başlatabilir ve durdurabiliriz.

Profil oluşturucu sınıfını kullanarak profil oluşturmaya devam etmek için aşağıda verilen adımları izleyin.

Adım 1 - Profil oluşturucu sınıfını örnekleyin

Profil oluşturucunun adını temsil eden bir String değeri ileterek Profiler sınıfının örneğini oluşturun. Bir Profiler sınıfını somutlaştırdığımızda, global bir kronometre başlatılacaktır.

//Creating a profiler
Profiler profiler = new Profiler("Sample");

Adım 2 - Bir çocuk kronometresi başlatın

Çağırdığımızda start() yöntem yeni bir çocuk kronometresini (adlandırılmış) başlatır ve önceki çocuk kronometrelerini (veya zaman göstergelerini) durdurur.

Çağırın start() yöntemi Profiler Oluşturulacak alt kronometrenin adını temsil eden bir String değeri ileterek sınıf.

//Starting a child stopwatch and stopping the previous one.
profiler.start("Task 1");
obj.demoMethod1();

Bu kronometreleri oluşturduktan sonra, görevlerinizi gerçekleştirebilir veya görevlerinizi çalıştıran bu yöntemleri çağırabilirsiniz.

3. Adım: Başka bir çocuk kronometresi başlatın (isterseniz)

İhtiyaç duyarsanız, başka bir kronometre oluşturun. start()yöntemi ve gerekli görevleri gerçekleştirin. Bunu yaparsanız, yeni bir kronometre başlatır ve bir önceki kronometreyi durdurur (yani görev 1).

//Starting another child stopwatch and stopping the previous one.
profiler.start("Task 2");
obj.demoMethod2();

4. Adım: Saatleri durdurun

Çağırdığımızda stop() yöntemiyle, son çocuk kronometreyi ve global kronometreyi durdurur ve geçerli Zaman Göstergesini döndürür.

// Stopping the current child stopwatch and the global stopwatch.
TimeInstrument tm = profiler.stop();

Adım 5: Zaman enstrümanının içeriğini yazdırın.

Şimdiki zaman göstergesinin içeriğini print() yöntem.

//printing the contents of the time instrument
tm.print();

Misal

Aşağıdaki örnek, SLF4J'nin Profiler sınıfını kullanarak profil oluşturmayı gösterir. Burada iki örnek görev aldık, 1'den 10000'e kadar sayıların karelerinin toplamını yazdırdık, 1'den 10000'e kadar sayıların toplamını yazdırdık. Bu iki görev için harcanan zamanı elde etmeye çalışıyoruz.

import org.slf4j.profiler.Profiler;
import org.slf4j.profiler.TimeInstrument;

public class ProfilerExample {
   public void demoMethod1(){
      double sum = 0;
      for(int i=0; i< 1000; i++){
         sum = sum+(Math.pow(i, 2));
      }
      System.out.println("Sum of squares of the numbers from 1 to 10000: "+sum);
   }
   public void demoMethod2(){
      int sum = 0;
      for(int i=0; i< 10000; i++){
         sum = sum+i;
      }
      System.out.println("Sum of the numbers from 1 to 10000: "+sum);
   }
   public static void main(String[] args) {
      ProfilerExample obj = new ProfilerExample();

      //Creating a profiler
      Profiler profiler = new Profiler("Sample");

      //Starting a child stop watch and stopping the previous one.
      profiler.start("Task 1");
      obj.demoMethod1();

      //Starting another child stop watch and stopping the previous one.
      profiler.start("Task 2");
      obj.demoMethod2();
 
      //Stopping the current child watch and the global watch.
      TimeInstrument tm = profiler.stop();

      //printing the contents of the time instrument
      tm.print();
   }
}

Çıktı

Yürütme üzerine, yukarıdaki program aşağıdaki çıktıyı üretir -

Sum of squares of the numbers from 1 to 10000: 3.328335E8
Sum of the numbers from 1 to 10000: 49995000
+ Profiler [BASIC]
|-- elapsed time [Task 1] 2291.827 microseconds.
|-- elapsed time [Task 2] 225.802 microseconds.
|-- Total [BASIC] 3221.598 microseconds.

Profiler Bilgilerinin Günlüğe Kaydedilmesi

Bu bilgileri kaydetmek için bir profilleyicinin sonucunu yazdırmak yerine yapmanız gerekenler -

  • Kullanarak bir kaydedici oluşturun LoggerFactory sınıf.

  • Profiler sınıfını başlatarak bir profil oluşturucu oluşturun.

  • Oluşturulan günlükçü nesnesini şuraya ileterek günlükçüyü profil oluşturucu ile ilişkilendirin. setLogger() yöntemi Profiler sınıf.

  • Son olarak, profil oluşturucunun bilgilerini yazdırmak yerine, log() yöntem.

Misal

Aşağıdaki örnekte, öncekinden farklı olarak (yazdırmak yerine), zaman enstrümanının içeriğini günlüğe kaydetmeye çalışıyoruz.

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.profiler.Profiler;
import org.slf4j.profiler.TimeInstrument;

public class ProfilerExample_logger {
   public void demoMethod1(){
      double sum = 0;
      for(int i=0; i< 1000; i++){
         sum = sum+(Math.pow(i, 2));
      }
      System.out.println("Sum of squares of the numbers from 1 to 10000: "+sum);
   }
   public void demoMethod2(){
      int sum = 0;
      for(int i=0; i< 10000; i++){
         sum = sum+i;
      }
      System.out.println("Sum of the numbers from 1 to 10000: "+sum);
   }
   public static void main(String[] args) {
      ProfilerExample_logger obj = new ProfilerExample_logger();

      //Creating a logger
      Logger logger = LoggerFactory.getLogger(ProfilerExample_logger.class);

      //Creating a profiler
      Profiler profiler = new Profiler("Sample");

      //Adding logger to the profiler
      profiler.setLogger(logger);

      //Starting a child stop watch and stopping the previous one.
      profiler.start("Task 1");
      obj.demoMethod1();

      //Starting another child stop watch and stopping the previous one.
      profiler.start("Task 2");
      obj.demoMethod2();

      //Stopping the current child watch and the global watch.
      TimeInstrument tm = profiler.stop();

      //Logging the contents of the time instrument
      tm.log();
   }
}

Çıktı

Yürütme üzerine, yukarıdaki program aşağıdaki çıktıyı üretir.

Sum of squares of the numbers from 1 to 10000: 3.328335E8
Sum of the numbers from 1 to 10000: 49995000