Web Testing, Java Testing, Server Monitoring
  Home   Products   Services   On-Demand   Downloads   Sales   Support   About Us  

Java Performance Profiling

This tutorial provides instructions on how to use AppPerfect Java Profiler product for detecting performance bottlenecks in a java application. This tutorial assumes you have successfully downloaded and installed AppPerfect Profiler on your machine with the default options.

This document is divided into following sections

  1. Creating Project
  2. AppPerfect Java Profiler

Within each section, multiple exercises are listed. All exercises assume you have installed the product in C:\AppPerfect\Profiler folder and will be referred as Profiler_HOME henceforth in tutorial. If you have installed the product in some other folder, modify the instructions below appropriately.

For this tutorial, create a java file called 'Person.java' copy-pasting the code shown below and compile it.


import java.util.*;
import java.io.*;

public class Person
{
private final Date birthDate;

public Person(Date birthDate)
{
this.birthDate = birthDate;
}

public boolean isBabyBoomer()
{
Calendar gmtCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
gmtCal.set(1946, Calendar.JANUARY, 1, 0, 0, 0);
Date boomStart = gmtCal.getTime();
gmtCal.set(1965, Calendar.JANUARY, 1, 0, 0, 0);
Date boomEnd = gmtCal.getTime();
return birthDate.compareTo(boomStart) >= 0 &&
birthDate.compareTo(boomEnd) < 0;
}

public static void main(String[] args) throws IOException
{
final Person p = new Person(new Date());
new Thread(new Runnable()
{
public void run()
{
for(int i = 0; i < 1000; ++i)
{
p.isBabyBoomer();
}
}

}).start();
System.out.print("press any key to continue...");
InputStreamReader reader = new InputStreamReader(System.in);
reader.read();
reader.read();
}
}

Creating Project

Exercise 1: Launch AppPerfect Java Profiler

  1. Click on Start -> Programs ->AppPerfect Profiler x.x.x -> AppPerfect Java Profiler
  2. On launching AppPerfect Java Profiler a Welcome page will be displayed. Go through the brief description given for product.
    NB: Welcome page is displayed only when Profiler x.x.x is launched and last time no project was opened.

Exercise 2: Creating a Project

  1. Launch the Project Wizard by clicking File ->New... menu option. The New Project wizard will be launched.
  2. Go through the instruction provided on top of the General tab.
  3. Keep the default project name and location for the purpose of this exercise. We don't have to provide "Notification" settings or "Target Application Machine" settings for this exercise. Click on the Next button.
  4. In the Import tab do nothing. Click the Next button.
  5. In the Source tab provide the location of source file "Person.java". Click the Next button.
  6. Use the default JDK which is bundled with AppPerfect Java Profiler and click on the Next button.
  7. In the "Environment" tab provide the location of "Person.class" file.
  8. Click on "Verify Classpath" button to validate the classpath.
  9. Classpath validation dialog will be launched and the classpath will be verified. A message saying that the classpath specified is correct should be displayed. Click on the "OK" button. Click on the Next button.
  10. In the "Target" tab select Target Application type as "Local/Desktop Application".
  11. For working folder provide the path to the folder containing the the "Person.class" file.
  12. Specify the Main Class as "Person".
  13. Select the "Launch target application automatically" checkbox. Click on the Finish button.
  14. A confirmation message saying that the project is saved will be displayed. Click on the OK button.

AppPerfect Java Profiler

NB: Please follow the steps provided in the "Creating Project" section to first create a Project, then proceed further.

Exercise 1: Define a Java Profiler project

  1. Once the Project is successfully created another dialog - Define Project Properties dialog - will be displayed.
  2. Read the instructions at top of each tab.
  3. Go through the descriptions for Profiling Types. Keep the default Development Mode Profiling and select Profiling Options tab.
  4. Study the descriptions of the three profiling options. You can configure Filters using Configure Filters option.Use default values.
  5. Study the descriptions of Instrumentation Options. Use the default: Dynamic Instrumentation enabled.
  6. Click through all the menu items to familiarize yourself with the available features and how to access them.
  7. Click on Tools ->Options... menu item. Click on the "Browsers, JDKs & DBs" node and ensure that the JDK path has been set correctly. This is the path provided for JDK during installation of AppPerfect Java Profiler. You may modify the path or add new JDK through this dialog box. It is critical that a correct version of JDK is available for AppPerfect Java Profiler to perform correctly.
  8. Click Help -> Table of Contents menu item to see AppPerfect Java Profiler product documentation.

Exercise 2: Start Profiling

  1. To start profiling click on Project -> Run from the menubar.
  2. A progress message will be shown while target application is launched.
  3. Observe the dynamic updation of data in the default Project Summary view. You can see various profiling metrics such as heap memory usage, object instance count and Thread count.
  4. From the Navigational Tree select CPU Profiling node.
  5. On the right hand side, expand the Execution Time, Cumulative Execution Time and Number of Invocations nodes and you will see that the isBabyBoomer() method has taken 343 ms to execute which is significant as compared to the other methods and the cumulative execution time is 687ms.
  6. You can also check out Methods and Invocation Tree views for further details. You can view help to get more details about these views.
  7. Stop Profiling by selecting Project -> Stop.
  8. Click Yes to stop profiling.
  9. Click No to collect information from the target application.
  10. Now modify the Person.java file by replacing it with the following:
    import java.util.*;
    import java.io.*;

    public class Person
    {
    private final Date birthDate;

    public Person(Date birthDate)
    {
    this.birthDate = birthDate;
    }

    /**
    * The starting and ending dates of the baby boom.
    */
    private static final Date BOOM_START;
    private static final Date BOOM_END;

    static
    {
    Calendar gmtCal =
    Calendar.getInstance(TimeZone.getTimeZone("GMT"));
    gmtCal.set(1946, Calendar.JANUARY, 1, 0, 0, 0);
    BOOM_START = gmtCal.getTime();
    gmtCal.set(1965, Calendar.JANUARY, 1, 0, 0, 0);
    BOOM_END = gmtCal.getTime();
    }

    public boolean isBabyBoomer()
    {
    return birthDate.compareTo(BOOM_START) >= 0 &&
    birthDate.compareTo(BOOM_END) < 0;
    }

    public static void main(String[] args) throws IOException
    {
    final Person p = new Person(new Date());
    new Thread(new Runnable()
    {

    public void run()
    {
    for(int i = 0; i < 1000; ++i)
    {
    p.isBabyBoomer();
    }
    }

    }).start();
    System.out.print("press any key to continue...");
    InputStreamReader reader = new InputStreamReader(System.in);
    reader.read();
    reader.read();
    }
    }

  11. Recompile Person.java.
  12. Select Project -> Run to start profiling.
  13. From the Navigational Tree select CPU Profiling node.
  14. On the right hand side, expand the Execution Time, Cumulative Execution Time and Number of Invocations nodes and you will see that the isBabyBoomer() method has taken 15 ms to execute and the cumulative execution time has also fallen to 93ms.
  15. This indicates that isBabyBoomer() method was causing a performance bottleneck, and by certain minor modifications, the execution time has reduced drastically!
  16. You can also check out Methods and Invocation Tree views for further details. You can view help to get more details about these views.
  17. Stop Profiling by selecting Project -> Stop.
  18. Click Yes to stop profiling.
  19. Click No to collect information from the target application.

Products


Web Application Testing
   Web Functional Testing
   Cross Browser Testing
   iPhone Apps Testing
   Web Services Testing
   AJAX Testing
   Flash Testing

Web Load Testing
   Web Application Load Testing
   Web Services Load Testing
   Database Load Testing
   Distributed Load Testing
   AJAX Load Testing
   Flash Load Testing

Application Testing
   .Net Testing / GUI Testing

Test Manager
   Automated Test Management


Agentless Monitor
   Server Monitoring
   Website Monitoring/URL Monitoring
   Java Monitoring
   SNMP Network Monitoring
   Web Server Monitoring
   Database Monitoring

Java Testing
   Java Code Analysis
   Java Profiling
   Java Unit Test


Services


   Hosted Web Testing
   Software Testing Services

Solutions


   Cloud Testing
   Web Testing
   Load Testing
   Automated Testing
   Web Services Testing
   IT Monitoring
   Java Testing
      Java Code Testing
      Java Performance
      Java Unit Testing
      Java Coding Rules


Software development tools


   Eclipse Plugins
   Netbeans Plugins
   JDeveloper Plugins
   JBuilder Plugins
   IntelliJ IDEA Plugins

Support


   Online Demo Center
   Tutorials
   Load Test Docs
   Web Test Docs
   App Test Docs
   Java Code Test Docs
   Java Profiler Docs
   Java Unit Test Docs
   Agentless Monitor Admin Guide
   Agentless Monitor User Guide
   Test Manager User Guide


About Us


   Company
   Customers
   Contact Info

© 2003-2010 AppPerfect Corporation
AppPerfect is a trademark of AppPerfect Corporation.
Terms of Use |  Privacy Statement |  Site Map