Posted by: lrrp | February 18, 2015

ARM- Automatic resource management in Java7

x  x bARMautomatic resource management is another attractive features of Java 7 and project coin. As name implies that now JVM is going to be handling all the external resource and make programmer free to bother about resource management.  If my java programmers use any external resources like file, printer or any devices to close after the program execution completes. Normally we close the resources which we have open in beginning of our program or we decide that if program finish normally how to manage the resource or if our program finish abnormally how to close the resource.

ARM- Automatic resource management in Java

Earlier resource management was achieved by using try {} catch {} finally block we need to declare resource variable outside of try block and in catch or finally we use this variables for achieving normal execution of program.

Example of resource management in java before JDK7

Here is an example of how we used to do handle resource management before automatic resource management (ARM) feature was made available.

FileInputStream stockQuoteReader= null;

FileOutputStream stockQuoteWriter = null;

try {

stockQuoteReader = new FileInputStream(“StockQuotes.txt”);

stockQuoteWriter = new FileOutputStream(“StockQuotes.txt”);

int var;

while (var = != -1)


} finally {

if (stockQuoteReader!= null)


if (stockQuoteWriter!= null)


But with java 1.7 we manage this thing very easily by try with resource block where inside try we manage this external resources.

Signature of Automatic Resource Management (ARM)
Signature is try(resource1;resource2){} after final resource ;semicolon is not allowed and the resource should be like var=expression type and by default all the resources are final type.

What has been added in API for Automatic Resource Management
java.lang.AutoCloseable, interface has been added in API which contains single method close() throws Exception this interface is a parent of interface so all the input and output devices inherit this property.

Example of Automatic Resource Management (ARM) in JDK7
Here is example of automatic resource management with JDK 1.7 source base. Please make sure you run this with java source 1.7 otherwise you will get compilation error.

try (
FileInputStream stockQuoteReader = new FileInputStream(“StockQuotes.txt”);
FileOutputStream stockQuoteWriter = new FileOutputStream(“StockQuotes.txt”) //no semicolon
) {
int var;
while((var= != -1 )

In this code inside try we have declare two file stream one is input file we are reading from one file and writing to another file. After the whole process both streams will be closed automatically either the code has been executed normally or not that means stockQuoteReader.close() and stockQuoteWriter.close() called automatically which is the best part of ARM.

If we compare this with earlier example then if any exception occur during input file closing i.e. stockQuoteReader.close() , stockQuoteWriter.close() will never get executed so our code terminated abnormally.

Some important points which needs to be keep in mind when use ARM

  • Whatever resource we are using should be a subtype of AutoCloseable other wise will get compile time error.
  • The resources which we are using are closed in reverse order means stockQuoteWriter.close() will be called first then stockQuoteReader.close().

That’s all on new automatic resource management (ARM) feature on JDK7, some how it address the cluttering of code due to checked exception handling and code duplication on several exception cache block.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s


%d bloggers like this: