Synchronized Method Overhead

Question:
I am interested in keeping my code running as fast as possible. Is there a cost associated with making my methods synchronized, and if so, how significant a cost?

Answer:
There is a time penalty associated with executing synchronizedmethods and blocks. The value of this penalty varies depending on thevirtual machine, the underlying operating system, the threadimplementation, and other factors. When you execute a synchronizedmethod or block, the JVM checks if the calling thread owns the monitorassociated with synchronized code. If so, the JVM increments acounter associated with the monitor to account for recursive lockacquisition and execution continues normally until the end of thesynchronized code is reached, whereupon the JVM decrements the lockcounter. If the counter equals zero, the JVM releases the thread’sownership of the monitor. If the calling thread did not already ownthe monitor, the JVM checks to see if any other thread already ownsthe monitor. If so, the calling thread is blocked until the monitoris released and another attempt to acquire it can be made. If not,the JVM assigns ownership of the monitor to the thread and incrementsthe lock counter.

All of the aforementioned tasks consume CPU cycles that would notnormally be executed in unsynchronized code. A JVM or JIT, such asHotSpot, can perform various optimizations to reduce the cost of thesetasks. But there will always be a cost. The only way to assess theimpact on the performance of your code is to time the code in yourprojected production environment. You can also take steps to makesure you are not unnecessarily using synchronization. Blindlysynchronizing all the methods of a class is often not necessary. Twomethods may access completely different data structures and notrequire mutual exclusion. In such a case, you would eschew declaringthe methods as synchronized. Instead, you would create separate lockvariables for use in synchronized blocks in each method.

It is possible to squeeze better performance out of threaded programs byonly synchronizing those code blocks that require protection.Unfortunately, performance is also very sensitive to the JVM.Traditionally, the high-overhead implementations of synchronization inJVMs has discouraged fine-grained synchronization. This encouragedthe synchronization of large code blocks. In an optimized runtimelike HotSpot, fine-grained synchronization is more efficient, causingold code with coarse-grained locks to unnecessarily block threads forlong periods of time. In the end, the rule with multithreaded code isthat you’ve got to measure your actual performance against yourrequirements and tweak accordingly.

Share the Post:
Share on facebook
Share on twitter
Share on linkedin

Overview

The Latest

homes in the real estate industry

Exploring the Latest Tech Trends Impacting the Real Estate Industry

The real estate industry is changing thanks to the newest technological advancements. These new developments — from blockchain and AI to virtual reality and 3D printing — are poised to change how we buy and sell homes. Real estate brokers, buyers, sellers, wholesale real estate professionals, fix and flippers, and beyond may

man on floor with data

DevX Quick Guide to Data Ingestion

One of the biggest trends of the 21st century is the massive surge in internet usage. With major innovations such as smart technology, social media, and online shopping sites, the internet has become an essential part of everyday life for a large portion of the population. Due to this internet

payment via phone

7 Ways Technology Has Changed Traditional Payments

In today’s digital world, technology has changed how we make payments. From contactless cards to mobile wallets, it’s now easier to pay for goods and services without carrying cash or using a checkbook. This article will look at seven of the most significant ways technology has transformed traditional payment methods.