Dear Shiva,
# 1) It is my experience that applications in virtual hosts tend to run slower because they share the disks, causing the applications to be I/O bound.
You can check this is the case by measuring the performance in one virtual machine with the other one shut down. If there is a large difference, your VM's are competing for resources and thus slowing eachother down.
# 2)
Java is quite capable of finding out about the cores you have in your machine. Old Java versions required the -server flag to use more than one core, but newer versions will automatically pick up and use all cores.
The switch you set is a tunable of the garbage collector and it is one I would not futz with unless I know precisely what I am doing. So please remove that flag and use -server instead.
IP addresses never influence performance, unless the TCP configuration is screwed up, causing time-outs. This should lead to error messages, not to slow response times.