Why mangling is necessary for Java names

Java client programs use Java Remote Method Invocation (RMI) to invoke methods in a server. RMI in turn uses one of two communication protocols between client and server:
Java™ Remote Method Protocol (JRMP)
RMI uses JRMP when both client and server applications are written in Java. CICS® does not use JRMP.
Internet Inter-ORB Protocol (IIOP)
RMI uses in an environment when client and server applications may be written in different languages. When IIOP is used as the communications protocol, Java client applications can use the RMI to invoke server programs in another language (C++, for example), as well as to invoke remote Java programs.
IIOP uses Interface Definition Language (IDL) to specify interfaces between objects in a language-independent way. When a Java client makes a remote method call, the Java method name, and its arguments, are converted to the equivalent IDL for transmission to the server using IIOP. It is at this point that mangling may be necessary, because there are many differences in the rules for Java names and IDL names. Some of these differences are:

In these cases, and others, Java names that are not permitted in IDL, or that are permitted but may be ambiguous, are mangled into an acceptable form.