<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Plumbr blog</title>
	<atom:link href="http://plumbr.eu/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://plumbr.eu/blog</link>
	<description>Plumbr Team on how Java applications use memory and how we develop the Plumbr tool</description>
	<lastBuildDate>Wed, 05 Jun 2013 20:12:57 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.1</generator>
		<item>
		<title>Plumbr 3.0 beta &#8211; user experience and pricing changes</title>
		<link>http://plumbr.eu/blog/plumbr-3-0-beta-user-experience-and-pricing-changes?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618</link>
		<comments>http://plumbr.eu/blog/plumbr-3-0-beta-user-experience-and-pricing-changes#disqus_thread</comments>
		<pubDate>Wed, 05 Jun 2013 13:07:00 +0000</pubDate>
		<dc:creator>Ivo Mägi</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[new release]]></category>
		<category><![CDATA[per jvm pricing]]></category>
		<category><![CDATA[plumbr]]></category>
		<category><![CDATA[plumbr 3.0]]></category>
		<category><![CDATA[plumbr new release]]></category>

		<guid isPermaLink="false">http://plumbr.eu/blog/?p=1295</guid>
		<description><![CDATA[<p dir="ltr"><a href="http://plumbr.eu/blog/plumbr-3-0-beta-user-experience-and-pricing-changes/plumbr" rel="attachment wp-att-1296"><img class="alignright size-full wp-image-1296" title="Plumbr 3.0" src="http://static.plumbr.eu/blog/wp-content/uploads//2013/06/plumbr.png" alt="Plumbr 3.0" width="300" height="207" style="padding-left:10px;" /></a>3.0 release is changing the way you experience <a href="http://www.plumbr.eu">Plumbr</a> in action. We are also about to simplify the pricing in a week along the final 3.0 release. Both of the changes are based on your feedback, thus we expect you to be happy with the changes.</p>
<p>
In order to discover all the new look and feel, <a href="https://portal.plumbr.eu/register">register</a> yourself to get your hands of the latest release and access the new user interface. If you are an existing user, <a href="https://portal.plumbr.eu/sendPasswordResetEmail">generate yourself a password</a> using the same email address you used during the registration.
</p><br /><br /><a href="http://plumbr.eu/blog/plumbr-3-0-beta-user-experience-and-pricing-changes?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618">Continue reading on Plumbr blog</a>]]></description>
		</item>
		<item>
		<title>Reducing memory consumption by 20x</title>
		<link>http://plumbr.eu/blog/reducing-memory-consumption-by-20x?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618</link>
		<comments>http://plumbr.eu/blog/reducing-memory-consumption-by-20x#disqus_thread</comments>
		<pubDate>Thu, 30 May 2013 11:47:38 +0000</pubDate>
		<dc:creator>Nikita Salnikov-Tarnovski</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://plumbr.eu/blog/?p=1274</guid>
		<description><![CDATA[<a href="http://plumbr.eu/blog/?attachment_id=1279" rel="attachment wp-att-1279"><img src="http://static.plumbr.eu/blog/wp-content/uploads//2013/05/reduce-memory-usage.jpg" alt="Reduce memory use" title="Reduce memory use" width="300" height="200" class="alignright size-full wp-image-1279" /></a><p dir="ltr">This is going to be another story sharing our recent experience with memory-related problems. The case is extracted from a recent customer support case, where we had an issue with an application dying with <em>OutOfMemoryError</em> messages in logs. After running the application with <a href="http://www.plumbr.eu">Plumbr</a> attached we were sure we were not facing a memory leak this time. But something was still terribly wrong.</p>
<p dir="ltr">Lessons learned?</p>
<ul>
	<li dir="ltr">
<p dir="ltr">Do not let integration details cross system boundaries</p>
</li>
	<li dir="ltr">
<p dir="ltr">Redundant data will cost you. Remove it whenever you can.</p>
</li>
	<li dir="ltr">
<p dir="ltr">Primitives are your friends. Know thy tools and learn Trove if you already haven’t</p>
</li>
	<li dir="ltr">
<p dir="ltr">Be aware of the optimizations provided by your JVM</p>
</li>
</ul><br /><br /><a href="http://plumbr.eu/blog/reducing-memory-consumption-by-20x?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618">Continue reading on Plumbr blog</a>]]></description>
		</item>
		<item>
		<title>Automating a multi-platform build</title>
		<link>http://plumbr.eu/blog/automating-a-multi-platform-build?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618</link>
		<comments>http://plumbr.eu/blog/automating-a-multi-platform-build#disqus_thread</comments>
		<pubDate>Wed, 08 May 2013 08:53:39 +0000</pubDate>
		<dc:creator>Nikita Salnikov-Tarnovski</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ant]]></category>
		<category><![CDATA[artifactory]]></category>
		<category><![CDATA[Automated build]]></category>
		<category><![CDATA[bitbucket]]></category>
		<category><![CDATA[cross platform]]></category>
		<category><![CDATA[gradle]]></category>
		<category><![CDATA[jenkins]]></category>
		<category><![CDATA[multi platform]]></category>
		<category><![CDATA[multi-platform build]]></category>
		<category><![CDATA[proguard]]></category>
		<category><![CDATA[testng]]></category>

		<guid isPermaLink="false">http://plumbr.eu/blog/?p=1260</guid>
		<description><![CDATA[<p dir="ltr"><a href="http://plumbr.eu/blog/?attachment_id=1262" rel="attachment wp-att-1262"><img class="alignright size-full wp-image-1262" style="padding-left: 10px;" title="Automated build" src="http://static.plumbr.eu/blog/wp-content/uploads//2013/05/automated-build.jpg" alt="Automated build" width="300" height="225" /></a>This is the second post in the series describing our development infrastructure. We <a href="http://plumbr.eu/blog/supporting-multiple-platforms-sharing-our-experience">started with</a> describing the external goals related to multi-platform support. <a href="http://plumbr.eu/blog/supporting-multiple-platforms-sharing-our-experience">In the first post</a> we also reasoned why we need to test on different platforms separately. We concluded the post with the fact that instead of “<em>support as many <strong>configurations</strong> as possible</em>”, a lot more feasible goal would be “<em>support as many <strong>users</strong> as possible</em>”. From this customer-facing goal we now extracted internally used development goals:</p>

<ul>
	<li>Automate builds. <a href="http://www.plumbr.eu">Plumbr</a> release has to be built without any manual intervention.</li>
	<li>Automate tests. <a href="http://www.plumbr.eu">Plumbr</a> release has to be verified automatically using different testing techniques ranging from unit to acceptance tests.</li>
	<li>Automate infrastructure. Build infrastructure has to be able to launch and destroy the server instances used to build and test <a href="http://www.plumbr.eu">Plumbr</a> automatically.</li>
	<li>Provide transparency. Whether it is a functionality implemented or bug fixed - we need to know in which versions this change is present. If an exception is thrown, we need to be able to map the obfuscated stacktrace back to the actual source code using the correct version of the obfuscation map.</li>
</ul><br /><br /><a href="http://plumbr.eu/blog/automating-a-multi-platform-build?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618">Continue reading on Plumbr blog</a>]]></description>
		</item>
		<item>
		<title>Supporting multiple platforms &#8211; sharing our experience</title>
		<link>http://plumbr.eu/blog/supporting-multiple-platforms-sharing-our-experience?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618</link>
		<comments>http://plumbr.eu/blog/supporting-multiple-platforms-sharing-our-experience#disqus_thread</comments>
		<pubDate>Mon, 06 May 2013 09:03:28 +0000</pubDate>
		<dc:creator>Nikita Salnikov-Tarnovski</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[cross platform java]]></category>
		<category><![CDATA[cross platform support]]></category>
		<category><![CDATA[java development infrastructure]]></category>
		<category><![CDATA[java infrastructure]]></category>
		<category><![CDATA[multi platform java]]></category>
		<category><![CDATA[multi platform support]]></category>

		<guid isPermaLink="false">http://plumbr.eu/blog/?p=1231</guid>
		<description><![CDATA[<a href="http://plumbr.eu/blog/?attachment_id=1233" rel="attachment wp-att-1233"><img class="alignright size-full wp-image-1233" style="padding-left: 10px;" title="Cross platform support" src="http://static.plumbr.eu/blog/wp-content/uploads//2013/05/cross-platform.png" alt="Cross platform support" width="300" height="234" /></a>This post is part of our open culture. We do not believe into closed processes, so we decided to share some interesting concepts about our development infrastructure. Or more precisely - how do we support multiple platforms in <a href="http://www.plumbr.eu/">Plumbr</a> development.
<p dir="ltr">
Lets start with our goals in mind. Among other goals we are aiming towards, the one adding vasts amounts of complexity is the number of platforms we need to support. If you have thought that for Java it will all be about <a href="http://en.wikipedia.org/wiki/Write_once,_run_anywhere">Write Once, Run Anywhere</a> then - make a second guess.</p> 
<p dir="ltr">It all falls apart the very same minute you create something truly low-level and optimized to the last possible bit. Suddenly all kind of unexpected small details start to matter, such as the garbage collector selection, minor differences in the classloader implementations or the way JVM vendors have decided to interpret certain parts of the JVM specification.</p><br /><br /><a href="http://plumbr.eu/blog/supporting-multiple-platforms-sharing-our-experience?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618">Continue reading on Plumbr blog</a>]]></description>
		</item>
		<item>
		<title>My impressions from JavaOne Russia</title>
		<link>http://plumbr.eu/blog/my-impressions-from-javaone-russia?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618</link>
		<comments>http://plumbr.eu/blog/my-impressions-from-javaone-russia#disqus_thread</comments>
		<pubDate>Mon, 29 Apr 2013 08:53:27 +0000</pubDate>
		<dc:creator>Nikita Salnikov-Tarnovski</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[java conference]]></category>
		<category><![CDATA[java conference experience]]></category>
		<category><![CDATA[java conference speaker]]></category>
		<category><![CDATA[javaone]]></category>
		<category><![CDATA[javaone moscow]]></category>
		<category><![CDATA[javaone russia]]></category>

		<guid isPermaLink="false">http://plumbr.eu/blog/?p=1208</guid>
		<description><![CDATA[<a href="http://plumbr.eu/blog/?attachment_id=1219" rel="attachment wp-att-1219"><img src="http://static.plumbr.eu/blog/wp-content/uploads//2013/04/russia.jpg" alt="JavaOne Russia" title="JavaOne Russia" width="300" height="300" class="alignright size-full wp-image-1219" /></a><p/>I have just recently returned from <a href="http://www.oracle.com/javaone/ru-en/index.html">JavaOne Russia</a> conference. JavaOne is one of the biggest and the most known conferences for Java developers. The event held in Moscow draw the attention of about 3,000 participants. I was selected to present their my talk about "Multi-platform Java application development". I will convert that talk into a blog post in near future, stay tuned.
<p/>But what I would like to share with you today are my impressions of this conference. Being a speaker gave me a really good opportunity to see the event from the different angles:<br /><br /><a href="http://plumbr.eu/blog/my-impressions-from-javaone-russia?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618">Continue reading on Plumbr blog</a>]]></description>
		</item>
		<item>
		<title>How to create a memory leak</title>
		<link>http://plumbr.eu/blog/how-to-create-a-memory-leak?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618</link>
		<comments>http://plumbr.eu/blog/how-to-create-a-memory-leak#disqus_thread</comments>
		<pubDate>Tue, 23 Apr 2013 09:50:30 +0000</pubDate>
		<dc:creator>Ivo Mägi</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[how to create a memory leak]]></category>
		<category><![CDATA[java memory]]></category>
		<category><![CDATA[java memory leak]]></category>
		<category><![CDATA[memory leak]]></category>
		<category><![CDATA[memory leak sample]]></category>
		<category><![CDATA[out of memory]]></category>
		<category><![CDATA[outofmemory]]></category>
		<category><![CDATA[outofmemoryerror]]></category>

		<guid isPermaLink="false">http://plumbr.eu/blog/?p=1151</guid>
		<description><![CDATA[<a href="http://plumbr.eu/blog/?attachment_id=1186" rel="attachment wp-att-1186"><img src="http://static.plumbr.eu/blog/wp-content/uploads//2013/04/leak.jpg" alt="How to create a memory leak" title="How to create a memory leak" width="300" height="400" style="padding-left:10px;" class="alignright size-full wp-image-1186" /></a><p dir="ltr">This is going to be a rather evil post - something you will be googling when you really wish to make someone’s life a misery. In the world of Java development memory leaks are just the type of bugs you would introduce in this case. Days or even weeks of sleepless nights in the office are guaranteed for your victim.</p>
<p dir="ltr">We will describe two leaks in this post. Both of them are easy to understand and reproduce. The leaks   originate from the real world case studies, but for the sake of clarity we have extracted the demo cases to be shorter and simpler for you to grasp.</p> 
<p>But rest assured - after we have both seen and fixed hundreds of leaks - cases similar to those demoed this are more common than you might have expected.</p><br /><br /><a href="http://plumbr.eu/blog/how-to-create-a-memory-leak?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618">Continue reading on Plumbr blog</a>]]></description>
		</item>
		<item>
		<title>There is no application server</title>
		<link>http://plumbr.eu/blog/there-is-no-application-server?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618</link>
		<comments>http://plumbr.eu/blog/there-is-no-application-server#disqus_thread</comments>
		<pubDate>Thu, 11 Apr 2013 12:07:25 +0000</pubDate>
		<dc:creator>Ivo Mägi</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://plumbr.eu/blog/?p=1101</guid>
		<description><![CDATA[<a href="http://plumbr.eu/blog/there-is-no-application-server/spoon-bend" rel="attachment wp-att-1133"><img src="http://static.plumbr.eu/blog/wp-content/uploads//2013/04/there-is-no-spoon.jpg" alt="There is no spoon" title="There is no spoon" width="300" height="400" class="alignright size-full wp-image-1133" /></a><p dir="ltr">We have recently <a href="http://plumbr.eu/blog/most-popular-application-servers">posted data</a> about application server market share we gathered from the free <a href="http://www.plumbr.eu/">Plumbr</a> deployments. And it resonated well - via different channels we got hundreds of comments and opinions on how to interpret the data.</p> 
<p> But one of the arguments in its different forms kept coming after us through every channel. Whether it took the form of “Tomcat is not an application server” or “This data is irrelevant as it is not focused on real application servers such as <a href="http://www.oracle.com/technetwork/middleware/weblogic/overview/index.html">Weblogic</a> or <a href="http://www-01.ibm.com/software/websphere/">WebSphere</a>”, it just kept surfacing.</p>
<p dir="ltr">I made us wonder - why does Java community have so different opinion abou what actually is an application server. So we decided to shed some light upon the issue. Looking into the most obvious source - namely <a href="http://en.wikipedia.org/wiki/Application_server">Wikipedia</a> - and things do not look too bad:</p><br /><br /><a href="http://plumbr.eu/blog/there-is-no-application-server?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618">Continue reading on Plumbr blog</a>]]></description>
		</item>
		<item>
		<title>Most popular memory configurations</title>
		<link>http://plumbr.eu/blog/most-popular-memory-configurations?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618</link>
		<comments>http://plumbr.eu/blog/most-popular-memory-configurations#disqus_thread</comments>
		<pubDate>Tue, 26 Mar 2013 11:30:55 +0000</pubDate>
		<dc:creator>Vladimir Šor</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[heap]]></category>
		<category><![CDATA[heap consumption]]></category>
		<category><![CDATA[heap size]]></category>
		<category><![CDATA[java heap statistics]]></category>
		<category><![CDATA[java permgen]]></category>
		<category><![CDATA[java statistics]]></category>
		<category><![CDATA[permgen]]></category>
		<category><![CDATA[permgen size]]></category>

		<guid isPermaLink="false">http://plumbr.eu/blog/?p=1087</guid>
		<description><![CDATA[<p dir="ltr"><a href="http://plumbr.eu/blog/?attachment_id=1090" rel="attachment wp-att-1090"><img class="alignright size-full wp-image-1090" style="padding: bottom:10px;" title="Java memory consumption" src="http://static.plumbr.eu/blog/wp-content/uploads//2013/03/java-memory-consumption1.jpg" alt="Java memory usage" width="300" height="200" /></a>The post is the third in the series where we publish statistical data about the Java installations. The dataset used originates from the free<a href="http://www.plumbr.eu/"> Plumbr</a> installations out there totalling 1,024 different environments we have collected during the past six months.</p>
<p dir="ltr"><a href="http://plumbr.eu/blog/most-popular-java-environments">First post in the series</a> analyzed the foundation - on what OS the JVM is run, whether it is a 32 or 62-bit infrastructure and what JVM vendor and version were used. <a href="http://plumbr.eu/blog/most-popular-application-servers">Second post </a>focused on the different application servers used. The one you are reading now sheds some light upon the heap sizes used by Java applications.</p><br /><br /><a href="http://plumbr.eu/blog/most-popular-memory-configurations?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618">Continue reading on Plumbr blog</a>]]></description>
		</item>
		<item>
		<title>We got hacked</title>
		<link>http://plumbr.eu/blog/we-got-hacked?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618</link>
		<comments>http://plumbr.eu/blog/we-got-hacked#disqus_thread</comments>
		<pubDate>Fri, 22 Mar 2013 08:56:07 +0000</pubDate>
		<dc:creator>Nikita Salnikov-Tarnovski</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[hacked]]></category>
		<category><![CDATA[hacker]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[java hack]]></category>
		<category><![CDATA[java hacked]]></category>
		<category><![CDATA[jenkins]]></category>
		<category><![CDATA[restore java]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://plumbr.eu/blog/?p=1066</guid>
		<description><![CDATA[<p dir="ltr"><a href="http://plumbr.eu/blog/we-got-hacked/hacker-with-computer-wearing-balaclava" rel="attachment wp-att-1068"><img class="alignright size-full wp-image-1068" style="padding-bottom:10px" title="Java hack" src="http://static.plumbr.eu/blog/wp-content/uploads//2013/03/hacked.jpg" alt="Java hack" width="300" height="199" /></a>Two weeks ago we got hacked. Which was something we have anticipated for the long time - after all, you cannot expect to run a reasonable business and not be a target of some malicious attacks. So as we finally reached our “goal” we had to face the consequences implied.</p>
<p dir="ltr">Full disclosure: no customer data was exposed during the attack and no <a href="http://www.plumbr.eu/">Plumbr</a> executables were harmed during the attack.</p><br /><br /><a href="http://plumbr.eu/blog/we-got-hacked?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618">Continue reading on Plumbr blog</a>]]></description>
		</item>
		<item>
		<title>Permgen leak detection polished &#8211; Plumbr 2.1 released</title>
		<link>http://plumbr.eu/blog/permgen-leak-detection-polished-plumbr-2-1-released?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618</link>
		<comments>http://plumbr.eu/blog/permgen-leak-detection-polished-plumbr-2-1-released#disqus_thread</comments>
		<pubDate>Thu, 21 Mar 2013 09:11:58 +0000</pubDate>
		<dc:creator>Ivo Mägi</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://plumbr.eu/blog/?p=1049</guid>
		<description><![CDATA[<p dir="ltr"><a href="http://plumbr.eu/blog/?attachment_id=1052" rel="attachment wp-att-1052"><img class="alignright size-full wp-image-1052" style="padding-left: 10px;" title="New Java Version" src="http://static.plumbr.eu/blog/wp-content/uploads//2013/03/new-java-version.jpg" alt="New Java Version" width="300" height="300" /></a>We have both the good and the bad news for you in this version upgrade. The good news is that - we have significantly improved <a href="http://plumbr.eu/blog/what-is-a-permgen-leak">permgen leak</a> detection based on data gathered from the hundreds of reports we have detected since the initial version was launched back in July 2012. Based on the data and feedback we can now say this functionality is matured and stable.</p>
<p dir="ltr">The sad news is also related to the maturity of this functionality - we announce that starting <strong>from April 8th, 2013 the permgen leak reports will no longer be available for free</strong>. So - take the chance while it is still possible, <strong>download <a href="http://plumbr.eu/">Plumbr</a></strong> and get rid of all your existing permgen leaks without us charging you a dime.</p><br /><br /><a href="http://plumbr.eu/blog/permgen-leak-detection-polished-plumbr-2-1-released?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618">Continue reading on Plumbr blog</a>]]></description>
		</item>
		<item>
		<title>Most popular application servers</title>
		<link>http://plumbr.eu/blog/most-popular-application-servers?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618</link>
		<comments>http://plumbr.eu/blog/most-popular-application-servers#disqus_thread</comments>
		<pubDate>Thu, 14 Mar 2013 09:33:42 +0000</pubDate>
		<dc:creator>Vladimir Šor</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[application servers]]></category>
		<category><![CDATA[GAE]]></category>
		<category><![CDATA[Geronimo]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[jetty]]></category>
		<category><![CDATA[most popular application servers]]></category>
		<category><![CDATA[tomcat]]></category>
		<category><![CDATA[weblogic]]></category>
		<category><![CDATA[websphere]]></category>

		<guid isPermaLink="false">http://plumbr.eu/blog/?p=1035</guid>
		<description><![CDATA[<a href="http://plumbr.eu/blog/?attachment_id=1037" rel="attachment wp-att-1037"><img class="alignright size-full wp-image-1037" title="Popular Application Servers" src="http://static.plumbr.eu/blog/wp-content/uploads//2013/03/application-server.jpg" alt="Popular Application Servers" width="300" height="206" /></a>The post is the second post in the series where we publish statistical data about the Java installations. The dataset used originates from the free<a href="http://www.plumbr.eu/"> Plumbr</a> installations out there totalling 1,024 different environments we have collected during the past six months.

<a href="http://plumbr.eu/blog/most-popular-java-environments">First post in the series</a> analyzed the foundation - on what OS the JVM is run, whether it is a 32 or 62-bit infrastructure and what JVM vendor and version were used. In this post we are going to focus on the application servers used.

It proved to be a bit more challenging task than originally expected - the best shot we had towards the goal was to extract it from the bootstrap classpath. With queries similar to “<em>grep -i tomcat classpath.log</em>”.<br /><br /><a href="http://plumbr.eu/blog/most-popular-application-servers?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618">Continue reading on Plumbr blog</a>]]></description>
		</item>
		<item>
		<title>Hunting down memory leaks: a case study</title>
		<link>http://plumbr.eu/blog/hunting-down-memory-leaks-a-case-study?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618</link>
		<comments>http://plumbr.eu/blog/hunting-down-memory-leaks-a-case-study#disqus_thread</comments>
		<pubDate>Tue, 05 Mar 2013 09:57:22 +0000</pubDate>
		<dc:creator>Nikita Salnikov-Tarnovski</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[classloader]]></category>
		<category><![CDATA[classloader leak]]></category>
		<category><![CDATA[connectionpool]]></category>
		<category><![CDATA[driver]]></category>
		<category><![CDATA[drivermanager]]></category>
		<category><![CDATA[heap]]></category>
		<category><![CDATA[jdbc]]></category>
		<category><![CDATA[memory leak]]></category>
		<category><![CDATA[permgen]]></category>
		<category><![CDATA[permgen leak]]></category>

		<guid isPermaLink="false">http://plumbr.eu/blog/?p=1001</guid>
		<description><![CDATA[<a href="http://plumbr.eu/blog/hunting-down-memory-leaks-a-case-study/the-girl-on-the-background-of-arrows-camouflage" rel="attachment wp-att-1010"><img src="http://static.plumbr.eu/blog/wp-content/uploads//2013/03/hunting.jpg" alt="Searching memory leaks" title="Searching memory leaks" width="300" height="254" style="padding-left:10px" class="alignright size-full wp-image-1010" /></a>A week ago I was asked to fix a problematic webapp suffering from <a href="http://plumbr.eu/blog/what-is-a-memory-leak">memory leaks</a>. How hard can it be, I thought - considering that I have both seen and fixed hundreds of leaks over the past two years or so. 

But this one proved to be a challenge. 12 hours later I had discovered no less than five leaks in the application and had managed to fix four of them. I figured it would be an experience worth sharing. For the impatient ones - all in all I found leaks from
<ul>
	<li><a href="http://www.mysql.com">MySQL</a> drivers launching background threads</li>
	<li><a href="http://docs.oracle.com/javase/7/docs/api/index.html?java/sql/DriverManager.html">java.sql.DriverManager</a> not unloaded on redeploys</li>
	<li><a href="http://jolbox.com/">BoneCP</a> loading resources from the wrong classloaders</li>
	<li><a href="http://docs.oracle.com/javase/7/docs/api/javax/sql/DataSource.html">Datasource</a> registered into a <a href="http://en.wikipedia.org/wiki/Java_Naming_and_Directory_Interface">JNDI</a> tree blocking unloading</li>
	<li><a href="http://en.wikipedia.org/wiki/Connection_pool">Connection pool</a> using finalizers tied to <a href="http://www.google.com">Google’s</a> implementation of reference queue running in a separate thread</li>
</ul><br /><br /><a href="http://plumbr.eu/blog/hunting-down-memory-leaks-a-case-study?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618">Continue reading on Plumbr blog</a>]]></description>
		</item>
		<item>
		<title>Most popular Java environments</title>
		<link>http://plumbr.eu/blog/most-popular-java-environments?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618</link>
		<comments>http://plumbr.eu/blog/most-popular-java-environments#disqus_thread</comments>
		<pubDate>Wed, 27 Feb 2013 08:09:22 +0000</pubDate>
		<dc:creator>Vladimir Šor</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[java 6]]></category>
		<category><![CDATA[java 7]]></category>
		<category><![CDATA[java popularity]]></category>
		<category><![CDATA[java statistics]]></category>
		<category><![CDATA[java version]]></category>
		<category><![CDATA[jdk 6]]></category>
		<category><![CDATA[jdk 7]]></category>
		<category><![CDATA[popular java version]]></category>

		<guid isPermaLink="false">http://plumbr.eu/blog/?p=981</guid>
		<description><![CDATA[<a href="http://plumbr.eu/blog/?attachment_id=982" rel="attachment wp-att-982"><img class="alignright size-full wp-image-982" style="padding-left:10px;" title="Java version statistics" src="http://static.plumbr.eu/blog/wp-content/uploads//2013/02/java-versions.jpg" alt="Java version statistics" width="300" height="182" /></a>We have now been discovering leaks for more than a year with <a href="http://www.plumbr.eu/">Plumbr</a>. Throughout this time we have gathered anonymous statistics from the free <a href="http://www.plumbr.eu/">Plumbr</a> installations out there. And as we are good guys, we decided to share our discoveries with you.

The post is going to be the first in the forthcoming series. We start with the environments used: if you are interested which is the most popular JVM vendor or JVM version, whether 32bit is more popular architecture than 64bit or whether Windows 8 is more popular than Windows XP - this will all be covered in our post. In the next series we are analyzing the application server market shares and different configuration settings on the JVMs.<br /><br /><a href="http://plumbr.eu/blog/most-popular-java-environments?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618">Continue reading on Plumbr blog</a>]]></description>
		</item>
		<item>
		<title>Common benchmarking pitfalls</title>
		<link>http://plumbr.eu/blog/common-benchmarking-pitfalls?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618</link>
		<comments>http://plumbr.eu/blog/common-benchmarking-pitfalls#disqus_thread</comments>
		<pubDate>Thu, 21 Feb 2013 07:38:31 +0000</pubDate>
		<dc:creator>Ivo Mägi</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[benchmark]]></category>
		<category><![CDATA[classloader]]></category>
		<category><![CDATA[gc pause]]></category>
		<category><![CDATA[how to write benchmark]]></category>
		<category><![CDATA[java benchmark]]></category>
		<category><![CDATA[JIT]]></category>
		<category><![CDATA[Just In Time Compilation]]></category>
		<category><![CDATA[microbenchmark]]></category>

		<guid isPermaLink="false">http://plumbr.eu/blog/?p=959</guid>
		<description><![CDATA[<a href="http://plumbr.eu/blog/?attachment_id=960" rel="attachment wp-att-960"><img class="alignright size-full wp-image-960" style="padding-left:10px;" title="Pitfall" src="http://static.plumbr.eu/blog/wp-content/uploads//2013/02/pitfall.jpg" alt="Pitfall" width="300" height="226" /></a>Every once in awhile each and every one of us is trying to measure performance of certain parts of the code. It can be either a fully functional application measured against specific number of user transactions per minute or a microbenchmark. Which you have written to prove that your fellow developer is wrong.

Especially in the latter case it is beneficial to be aware of the pitfalls skewing your benchmark results. Looking into the benchmarks I have created ~seven years ago, I have to admit I have been proving my point on several cases I was actually incorrect. My apologies, dear friends. But I have learned something along the way and think it is worth sharing. So that you would not end up in the same stupid situation.<br /><br /><a href="http://plumbr.eu/blog/common-benchmarking-pitfalls?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618">Continue reading on Plumbr blog</a>]]></description>
		</item>
		<item>
		<title>How expensive is a method call in Java</title>
		<link>http://plumbr.eu/blog/how-expensive-is-a-method-call-in-java?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618</link>
		<comments>http://plumbr.eu/blog/how-expensive-is-a-method-call-in-java#disqus_thread</comments>
		<pubDate>Tue, 19 Feb 2013 08:44:21 +0000</pubDate>
		<dc:creator>Nikita Salnikov-Tarnovski</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[java benchmark]]></category>
		<category><![CDATA[Java JIT]]></category>
		<category><![CDATA[JIT]]></category>
		<category><![CDATA[Just In Time Compilation]]></category>
		<category><![CDATA[method call]]></category>
		<category><![CDATA[method inlining]]></category>

		<guid isPermaLink="false">http://plumbr.eu/blog/?p=935</guid>
		<description><![CDATA[<a href="http://plumbr.eu/blog/?attachment_id=937" rel="attachment wp-att-937"><img class="alignright size-full wp-image-937" style="padding-left:15px;" title="Java source code" src="http://static.plumbr.eu/blog/wp-content/uploads//2013/02/java-source.jpg" alt="Java source code" width="300" height="225" /></a>We have all been there. Looking at the poorly designed code while listening to the author’s explanations about how one should never sacrifice performance over design. And you just cannot convince the author to get rid of his 500-line methods because chaining method calls would destroy the performance.

Well, it might have been true in 1996 or so. But since then <a href="http://en.wikipedia.org/wiki/Java_virtual_machine">JVM</a> has evolved to be an amazing piece of software. One way to find out about it is to start looking more deeply into optimizations carried out by the virtual machine. The arsenal of techniques applied by the<a href="http://en.wikipedia.org/wiki/Java_virtual_machine"> JVM</a> is quite extensive, but lets look into one of them in more details. Namely<a href="http://en.wikipedia.org/wiki/Inline_function"> method inlining</a>. It is easiest to explain via the following sample:<br /><br /><a href="http://plumbr.eu/blog/how-expensive-is-a-method-call-in-java?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss20130618">Continue reading on Plumbr blog</a>]]></description>
		</item>
	</channel>
</rss>
