Does anyone know of any good books on this topic? I did search on amazon but ones that I found are pretty old publications.
closed as off-topic by durron597, Snowman, MichaelT, Dan Pichelman, GlenH7 Jul 21 '15 at 14:44
This question appears to be off-topic. The users who voted to close gave this specific reason:
Edit to cover revised question (originally required characteristics of high performance JEE languages in lieu of available of books).
You may find that Pro Java EE Performance Management & Optimization can help. It available on Zshops (from USA/UK) and Kindle if required. It may be a little dated at 2006, but the principles it details are sound.
General characteristics of a high performance JEE application
Assuming that you are targeting a Java web application, and not some JMS powered backend, then consider the following:
Having a stateless design reduces the impedance mismatch between the underlying web protocol (HTTP) and the application. You are able scale it much better because you can simply add more nodes to your cluster and not worry about sharing state between nodes.
If your overall number of complex instructions and processes is reduced then the effort your application has to make to get a request processed is reduced. If all functionality can be easily contained in a single application (e.g. single WAR with multiple JARs providing tiered functionality) then bottlenecks for the data flow are greatly reduced.
Efficient internal communication
Parsing takes time. If your system relies on XSLT transformation after transformation, XML marshalling then unmarshalling then marshalling again as you work through the layers spread over multiple machines in a DMZ, you're going to introduce some significant overheads. If all your internal systems work on Java then you could consider using RMI internally, with the public facing interface being based on RESTFul web services. Web services are really for heterogeneous architectures to allow interoperability.
Efficient use of resources
Use a caching layer if it will help. Perhaps test the performance of a more lightweight application container (say Jetty with Spring) instead of the more bloated WebSphere approach. Change the hardware in the servers to use solid state drives, or an entirely RAM-driven solution for extreme performance.
Optimised database access
Verify that there are no full table scans occurring on large tables as a result of poorly designed queries or indices. Your DBA should be able to direct you to performance issues on Oracle or DB2. Any modern JPA/JTA implementation (e.g. Hibernate) will produce efficient queries in response to an efficient domain model.