Mobile agents are self Autonomous: i.e. Agent itself decides when and where to migrate next. Applying this definition to a distributed shared memory systems where client's requests are cpu-intensive tasks, can we prefer mobile agents that can select a node itself to migrate to that node and execute client request
Mobile agents are programs that can move thru a network under their own control, migrating from host to host and interacting with other agents and resources on each host. After the mobile agent completes it's work, it would normally return to the host of its origination.
Isn't a mobile agent itself a form of distributed computing. For example, an agent can be used by a physician on his laptop. The agent would interact with imaging department to provide xrays etc, interact with patients database to get patients medical info and also interact with the billing department to bill the patient.
Is Java a good platform for mobile agents? IMHO, yes, primarily because of platform independence. The byte code can be executed on any platform as opposed to native code. Also, there are other compelling reasons for using the Java platform. But I don't want to turn this into a long winded explanation.
can we prefer mobile agents that can select a node itself to migrate to that node and execute client request
Well, isn't this what a mobile agent is supposed to do? I'm not aware of any type of variation.