Are you still using the stock CF JVM? Stop today!

Last week I rebuilt my work workstation (an old server actually, running 2003 Std server, dual 3.06 Xeon's, 4 gigs of ram, I love it).  Of course, that meant that Coldfusion gets re-installed.  One of the apps I am developing is a very large Model-Glue / Coldspring / Transfer ORM application that makes heavy use of objects.  There is a little script in the onAppStart method that times how long it takes for the application to fire up, and writes a log entry with that data. The first time I fired up the application after installing CF, it *really* felt like it was taking a long time, so I went to check out the log.

Application reloaded in 165.563 seconds from 127.0.0.1.

OK, yea, that took a long time.  Then I realize I hadnt updated the coldfusion JVM yet.  So I went out and grabbed the latest JDK (note, you need the JDK, not the JVM only), and installed it to the default windows location.  Since I have Coldfusion developer installed in multiserver mode, I went to e:\JRun4\bin\jvm.config, and I changed the java.home line near the top to point to my newly installed JDK location, like so:

java.home=C:/Program Files/Java/jdk1.6.0_11

Then I stopped and re-started the coldfusion services, and fired up my application again...

Application reloaded in 14.453 seconds from 127.0.0.1.

Holy smokes! What a huge difference, 151 seconds faster!  So, lets say you are reloading your application maybe 4 times an hour throughout the day to test changes. 8 hours a day (yea, right, dont I wish!), 40 hours a week, 52 weeks in a year....carry the 1.... wow, after a year of struggling along on the stock JDK with its classloader bug, you could waste 349 hours in a year JUST reloading this application.  I bet this is a worse case scenario of course, but this should illustrate why updating today is a good idea!

*edited*

Aaron Longnion has some questions regarding the status of the 'save class files' and 'trusted cache' options which may have effected this test, so I ran a more thorough test and noted times for each one. Upgrading to the latest JVM has not only been rock-solid for stability, but it has proven to be much faster for both my development and my production servers (in load testing, after tweaking garbage collection, my production cluster was able to handle a far greater traffic load with the updated JVM than without it)

Stock JVM, no cache or class file save First request to CF after restart 100.071
Stock JVM, no cache or class file save Reload app after initial request 13.767
Stock JVM, no cache or class file save Reload app 2nd time after restart 11.876
Stock JVM, primed trusted cache + save class files First request to CF after restart 82.706
Stock JVM, primed trusted cache + save class files Reload app after initial request 11.891
Stock JVM, primed trusted cache + save class files Reload app 2nd time after restart 10.297
1.6.0_11 JVM, no cache or class file save First request to CF after restart 54.230
1.6.0_11 JVM, no cache or class file save Reload app 2nd time after restart 13.734
1.6.0_11 JVM, no cache or class file save Reload app 2nd time after restart 12.297
1.6.0_11 JVM, primed trusted cache + save class files First request to CF after restart 38.453
1.6.0_11 JVM, primed trusted cache + save class files Reload app 2nd time after restart 11.031
1.6.0_11 JVM, primed trusted cache + save class files Reload app 2nd time after restart 9.844

10 comments

Transfer object without the DB

There was an interesting post by John K yesterday on the Transfer-dev list, where he was asking about creating a transfer object that had no database behind it.  Basically, define the object in XML and then use the get / set methods to persist data around in a nice auto-generated cfc 9one of the things that Transfer is do good at).  There was some discussion whether Transfer would let you do this or not, so I had to give it a shot.  Turns out, you can define your object without any database and it works fine!

This started my brain going, you could define decorators against your objects, and use those to email a contact form that gets populated to your transient bean.  I think its kinda a slick way of making objects, and it would certainly be simpler to define the XML properties than creating a new cfc with get / set methods.  Anyone see any downfalls?

1 comments

tears (Happy Friday!)

Oh, let me taste your tears, the tears of unfathomable sadness!

1 comments

What does google have against obama?

OK, this is silly...

obama google autosuggest

5 comments

WOW Contest / RIAdventure Cruise

Joshua Cyr is running a contest over at Usefulconcept.com, the winner gets a free World of Warcraft account, the burning crusade expansion, and almost 80 days of pre-paid time.  All you have to do is comment on his blog entry.  Hurry up, the content ends tonight at midnight!

Click for the WoW RIAdventure content

The questions you have to answer are:

1) List your top reason someone should go to RIAdventure.
2) List your top reason you want to try out WOW (world of warcraft).

and my answers were:

1) Because the best way to learn is to be surrounded with enthusiastic people!
2) Because my cousin wants to play on a *real* server and this would get him started out great! (I play on a free server and its good enough for me with my limited time, but he wants to be a purist)

Good luck all

0 comments

Configuring Apache for speed

In ramping up for an alpha / beta test, one of the things I was testing was speed on the server the software was to be deployed on. Running Yahoo's ySlow, it gave me all kinds of input, non g-zipped components, missing header expiration dates on my files, etc. I wanted to share here with you some of the apache vhost configuration changes I made that made the site just *fly*! I am no apache expert, so there may be different ways to do this. But I can tell you, after making these changes the site FEELS a ton faster.

Read more...

6 comments

Intro to C++ - Part 3

OK, I have been slacking on this series. No Justice, thats a *BAD* Justice!. I have a coldfusion product going into alpha this week after more than a year of development, so what can I say =) Now on to more C++ goodness!

Read more...

1 comments

Intro to C++ - Part 2

Last week we went over the basics of configuring your IDE and compiling your first program. I have class this evening, but I wanted to point you to a resource that I will be developing as I go through this class. The CfCode C++ Blog Series is basically a listing of all posts in the series, as well as an example C++ program with what I hope are good comments throughout of what is going on. In today's iteration of this example document, I go over declaring constant variables, using cin and cout to accept input and provide output respectively. I define several data types, and show you how to evaluate expressions and place the result onto the screen. This example document also introduces static_cast to force a result to a specific data type. You can always find the latest version of my example document at http://www.cfcode.net/blog/page.cfm/c-series, or you can browse back through prior posts like this one to see the code as it grows. More tonight after class!

Read more...

0 comments