JMS is a Java specification that defines a common way for Java programs to asynchronously and reliably send and receive messages through message queues or topics. It uses providers like WebLogic JMS, MQ JMS and Sun ONE Message Queue to implement the standard and allow communication between loosely coupled applications. JMS can also be used to transport SOAP messages using message transformers and provides features like durable subscriptions, transactions, and message selectors.