Saturday, November 4, 2017

What is Garbage Collection log? How to enable & analyze?

Objects are created in the memory to service incoming requests. Once requests are serviced, newly created objects will become useless (i.e. garbage). This garbage must be evicted from the memory so that there is enough room created in the memory to service the new incoming requests. If there isn’t sufficient memory, the application can experience poor response times, OutOfMemoryError, and fatal crashes.
In Java, Android, C#…, garbage collection is automatic, whereas in the several predecessor programming languages (C, C++) – programmer must write code explicitly to release the objects after they are used. So, it’s a major convenience for Java, Android, and C# application developers. But this automatic garbage collection is not free, it comes with a price. Automatic Garbage Collection can have a profound impact on:
1.       Application Response Time
2.       CPU
3.       Memory

Application Response Time

To garbage collect objects automatically, entire application has to be paused intermittently to mark the objects that are in use and sweep away the objects that are not used. During this pause period, all customer transactions which are in motion in the application will be stalled (i.e. frozen). Depending on the type of GC algorithm and memory settings that you configure, pause times can run from few milliseconds to few seconds to few minutes. Thus, Garbage Collection can affect your application SLA (Service Level Agreement) significantly.


Garbage collection consumes a lot of CPU cycles. Each application will have thousands/millions of objects sitting in memory. Each object in memory should be investigated periodically to see whether they are in use? If it’s in use, who is referencing it? Whether those references are still active? If they are not in use, they should be evicted from memory. All these investigations and computation requires a considerable amount of CPU power.


Of course, poor GC configuration can lead to high memory consumption and vice versa. Most applications saturate memory first before saturating other resources (CPU, network bandwidth, storage). Most applications upgrade their EC2 instance size to get additional memory rather to get additional CPU or network bandwidth.
Thus to have top notch SLAs and reduce the bill from your cloud hosting provider, your applications Garbage collection has to be function effectively.
In order to study and optimize Garbage Collections impact on the application’s performance, one has to enable Garbage Collection Logging. Besides that, Garbage Collections logs can be used to troubleshoot memory-related problems in the application.

Saturday, July 22, 2017

JavaFx with SpringBoot

In this example we will see how to create a JavaFx project using spring boot.

Step 1 - Create a new maven project using below command. If you are new to spring boot, please check my previous article on standalone spring boot application.

mvn archetype:generate -DgroupId=com.javaxp -DartifactId=TestJavaFx -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

Step 2 - Create below file -


Standalone SpringBoot Helloworld example

Step 1 - Run the below maven command. If maven is not installed in your machine please click here to check how to install maven.

mvn archetype:generate -DgroupId=com.javaxp -DartifactId=TestSpringboot -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

How to install maven and create a new blank maven project

Step 1 - Go to maven site and download maven binary zip archive as shown below

Step 2 - Once you download the file extract it to a particular location and set below Windows environment variables
M2_HOME - C:\TestMaven\apache-maven-3.5.0
MAVEN_HOME - C:\TestMaven\apache-maven-3.5.0

PATH - C:\TestMaven\apache-maven-3.5.0\bin

Make sure that JDK is installed and "JAVA_HOME" variable is added in your Windows environment variable

Now test maven using below command

mvn -version


Note - You can change the default maven localRepository as per your requirement, just go to apache-maven-3.5.0/conf/settings.xml and change the path


Friday, July 14, 2017

Poor Employers in the Age of Technology

Every entrepreneur desires to have most skilled, diligent, well-mannered and reliable professionals. This is probably because the employees are the strength of an organization having the power to make or break it. While the motivated, creative and problem-solving employees support employer to flourish the business, the lazy, fickle and unproductive workforce can cause huge loss to the company.

Mostly it is a poor recruitment process that let the losers enter into the organization but sometimes the blame of turning a skillful person into unproductive creature goes to the technology. While the technological advancement has changed the human lifestyle, it has also changed the environment of workplaces. It is hard to imagine an office without computers, the internet, air conditioners and supportive technologies. While all these pieces of machinery have become necessities to work, these are the hindrances as well. So, the chances of employer bearing huge monetary loss or, in worst cases, losing his business are more because of the facilities provided to the employees than just the lack of efforts.

We have rounded up here a few basic facilities provided by the employer to its workforce that reversely cause his own failure.         

Internet – The main distraction that kills productivity

While the internet is a compulsion for online businesses, software houses, and many other businesses, it is full of distraction. Smartphones, social media, and emails are among the major workplace productivity killers. While the employer provides its employee with the internet for work-related tasks, the mischievous guys use the service for updating their Facebook profiles, playing games, and watching YouTube videos. Resultantly, they fail to accomplish their tasks at the time and make the employer bear the loss.