Fields that are never read at runtime are unnecessary and should be removed.

Fields are considered dead if at runtime they are never read directly or indirectly, for example through a framework or a use of reflection. Any field which is not dead is considered to be "live".

Fields are considered to be dead if they are only written to, and never read.

Before making any changes, confirm that the field is not required by verifying that the field is only read from dead methods. This confirmation is necessary because there may be project-specific frameworks or techniques which can introduce hidden dependencies. If this project is for a library, then consider whether the field is part of the external API, and may be used in external projects that are not included in the snapshot.

After confirming that the field is not required, remove the field. You will also need to remove any references to this field, which may, in turn, require removing other unused classes, methods and fields.

In the following example, we have a class containing a single field called deadField:

The field is only read from the method getDeadField. However, getDeadField is never called, so the field is never read at runtime. The field is therefore marked as dead.

In this example, we have another class containing a single field called writtenToField:

The field is written to in the method runThing, which is live because it is called by the main method. However, the field is never read at runtime, only written to. The field is therefore marked as dead.

In this example, we have a class representing something that can be serialized to and from XML:

The field field is written and read by the serialization framework in order to store the contents of the object in an XML file, or to construct an instance of the object from an XML file. The field is therefore considered to be read at runtime, which makes the field live.