Immutable Collections for Java is a library providing immutable/persistent collection classes for Java. While collections are immutable, they provide methods for adding and removing values by creating new modified copies of themselves. Each copy shares almost all of its structure with other copies, to minimize memory consumption. The library includes a singly-linked (cons/cddr style) list/stack, an integer tree-based indexed list, a 2-3 tree-based random access indexed list, a 2-3 tree-based map, a hash tree-based map, and hash- and tree-based sets. All collections provide immutable Cursor as well as standard Iterator classes for looping through all elements. A utility class provides functional style algorithmic processing of Cursors, including foldLeft, foldRight, collect, select, and reject. The 2-3 tree and integer tree classes are optimized for performance and can be used alongside java.util Collections when immutability is needed for safe data sharing.
Immutables allows you to embrace immutablity to tackle complexity and concurrency challenges. To get the benefits of immutability in Java, there's an annotation processor to easily create simple and consistent value objects. You can think of it as Guava's Immutable Collections but for regular objects. It includes support for JSON marshaling, MongoDB repositories, and JAX-RS.
fsprotect is a set of scripts that combine tmpfs and aufs to make existing filesystems immutable. After the filesystems are protected, everything that is written will be lost when the computer powers off. It is a great tool for testing and for public computers like those in schools, libraries, etc. It is also very easy to use. It is currently available only for Debian-based systems.