JPS – Java Process Status tool

You are running your java program and wondering what all process are running in JVM. Ever wondered how to see java process ?
Use JPS for viewing Java Virtual Machine Status

The jps tool lists the instrumented HotSpot Java Virtual Machines (JVMs) on the target system. The tool is limited to reporting information on JVMs for which it has the access permissions.

If jps is run without specifying a hostid, it will look for instrumented JVMs on the local host. If started with a hostid, it will look for JVMs on the indicated host, using the specified protocol and port. A jstatd process is assumed to be running on the target host.

The jps command will report the local VM identifier, or lvmid, for each instrumented JVM found on the target system. The lvmid is typically, but not necessarily, the operating system’s process identifier for the JVM process. With no options, jps will list each Java application’slvmid followed by the short form of the application’s class name or jar file name. The short form of the class name or JAR file name omits the class’s package information or the JAR files path information.

The jps command uses the java launcher to find the class name and arguments passed to themain method. If the target JVM is started with a custom launcher, the class name (or JAR file name) and the arguments to the main method will not be available. In this case, the jpscommand will output the string Unknown for the class name or JAR file name and for the arguments to the main method.

The list of JVMs produced by the jps command may be limited by the permissions granted to the principal running the command. The command will only list the JVMs for which the principle has access rights as determined by operating system specific access control mechanisms.

Options-

The jps command supports a number of options that modify the output of the command. These options are subject to change or removal in the future.

-q
Suppress the output of the class name, JAR file name, and arguments passed to the mainmethod, producing only a list of local VM identifiers.
-m
Output the arguments passed to the main method. The output may be null for embedded JVMs.
-l
Output the full package name for the application’s main class or the full path name to the application’s JAR file.
-v
Output the arguments passed to the JVM.
-V
Output the arguments passed to the JVM through the flags file (the .hotspotrc file or the file specified by the -XX:Flags=filename> argument).
-Joption
Pass option to the java launcher called by javac. For example, -J-Xms48m sets the startup memory to 48 megabytes. It is a common convention for -J to pass options to the underlying VM executing applications written in Java.

Java Clone method

To clone something is to make a duplicate of it.The clone() method in Java makes an exact duplicate of an object .

Why would someone need cloneing ?
Java’s method calling semantics are call-by-refrence , which allows the called method to modify the state of an object that is passed into it . Cloning the input object before calling the method would pass a copy of the object keeping orignal safe.

Cloneing is not enabled by default in classes that you write.Clone method is a protected method , which means that your code cannot simply call it .Only the class defining can clone it’s objects.

Foo f = new Foo();
Foo f2 = new f.clone();

If you try clone() without any special prepration as in code written above you will encouter errors.

How to clone?
You must do two things to make your class cloneable:

  • Override Object’s Clone method
  • Implement the empty Cloneable interface

Example :

public class FooClone impements Cloneable{

public FooObject clone() throws CloneNotSupportedException

( return super.clone();

)

// more code

How to use Java member accessibility modifiers

Java member accessibility modifiers in Java

In Java by using accessibility modifiers a class can control what information is accessible to other classes.
Accessibility of members can be one of the following.

  • public
  • protected
  • default(also known as package accessibility)
  • private

public Members

Public access is the least restrictive of all access modifiers .A public member is accessible everywhere , both in its class’s package and in other packages where it’s class is visible .This is true for both instances and static members.

protected Members

Protected members are accessible in the package containing class and by all subclasses of this class in any package where this class is visible . {it is less restrictive than the defaultaccessibility}

Default Accessibility Members

When no access modifier is specified for a member it is only accessible by another class in the package where it’s class is defined .Even if its class is visible in another package the member is not accessible there .

private Members

private is most restrictive of all the access modifiers .Private members are not accessible from any other class .This also applies to subclasses , whether they are in the same package or not.

It is a good design strategy to make all members variables private and provide public access methods for them.