changeset 65:5f24c115b6e6

154: Remove Serialization
author mr
date Sun, 01 Apr 2012 11:41:55 -0700
parents 327c362eef5b
children b676352055c9
files jep-154.md
diffstat 1 files changed, 121 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jep-154.md	Sun Apr 01 11:41:55 2012 -0700
@@ -0,0 +1,121 @@
+JEP: 154
+Title: Remove Serialization
+Author: Alan Bateman
+Organization: Oracle
+Created: 2012/4/1
+Type: Feature
+State: Posted
+Exposure: Open
+Component: core/libs
+Scope: SE
+Discussion: core dash libs dash dev at openjdk dot java dot net
+Effort: M
+Duration: L
+Template: 1.0
+Internal-refs: Oracle:jplan:417072696c466f6f6c
+
+
+Summary
+-------
+
+Deprecate, disable, and ultimately remove the Java SE Platform's serialization
+facility.
+
+
+Non-Goals
+---------
+
+It is not a goal of this proposal to introduce an alternative serialization
+mechanism.
+
+
+Motivation
+----------
+
+Developers are well aware of the myriad shortcomings of Java's serialization
+facility.  The plan to remove it and its associated APIs in the `java.io`
+package was first announced many years ago.
+
+One of the motivations for this change is that the Object Serialization Stream
+Protocol severely limits performance. The protocol was designed with the
+assumption that the serialized stream would be transmitted over an unreliable
+connection. It is for this reason that each object and descriptor is written
+twice to the stream, to allow the bytes to be compared by the receiver. In
+severely-degraded environments, _e.g._, Microsoft Windows machines running the
+McAfee Antivirus program, the `TC_OBJECT` constant and associated object data
+may be written to the serialized stream up to eight times due to timeouts
+caused by real-time virus scanning. Several attempts have been made to avoid
+writing duplicate data to the stream but none has been successful due to
+compatibility issues.
+
+A lesser-known issue, and the main reason that this change has been flagged for
+several releases, is that the available values for `serialVersionUID` are
+running out. Although a `serialVersionUID` is declared as a `long` (and so up
+to 2^64 values are available) it is truncated to a 32-bit value in the class
+descriptor (`TC_CLASSDESC`). In early versions of the JDK the `serialver` tool
+contacted `java.sun.com` to reserve `serialVersionUID` values as needed and
+this ensured that there would be values available for many generations of
+future developers. This allocation process was discontinued in Sun's JDK 6 and
+in all OpenJDK releases due to concerns from various free-software and privacy
+advocates. It was replaced with a reservation mechanism that allocates a large
+block of `serialVersionUID` values for each JDK installation. The result is
+that the available range of `serialVersionUID` values has been running out
+quickly and current predictions are that values will likely overflow and wrap
+around by the end of 2012. Once this happens it is expected that many
+applications will start to fail intermittently, throwing
+`InvalidObjectException`.
+
+Another motivation to removing serialization is that the `transient` keyword is
+slated to be re-allocated to another Java language feature planned for a future
+release. Details of this language feature will be outlined in a future JEP.
+
+
+Description
+-----------
+
+Removing Java Serialization will clearly have some compatibility impact and
+developers will need time to change their applications.
+
+The proposal is that serialization be removed in a phased manner, as follows.
+
+In a JDK 7 update, possibly update 6, the `Serializable`, `ObjectInputStream`,
+`ObjectOutputStream`, and associated classes in the `java.io` package will be
+deprecated.  This will require a corresponding Maintenance Review of the Java
+SE 7 Platform Specification ([JSR
+336](http://www.jcp.org/en/jsr/proposalDetails?id=336)).
+
+In Java SE 8 these types will be removed and all classes in the platform will
+be changed so that they no longer implement `Serializable`. A new VM option,
+possibly `-XX:+EnableSerialization`, will be introduced as a compatibility
+option to re-enable serialization for applications that still require it. The
+details as to how this option will work require further investigation. One
+approach is to build two copies of `rt.jar`, one with the classes that
+implement `Serializable` and the other (the default) with classes that do non
+implement Serializable. As JDK 8 is slated to ship in modular form then it may
+be possible to ship with two copies of each JDK module. Other approaches,
+including byte-code instrumentation techniques, will also be explored.
+
+In Java SE 9 the option to enable serialization will be removed.
+
+
+Risks and Assumptions
+---------------------
+
+Implementation of this proposal may hinder the adoption of Java 8.
+
+There is some chance that the Java SE 8 ([JSR
+337](http://www.jcp.org/en/jsr/proposalDetails?id=337)) Expert Group will
+object to this plan or, at the very least, revise it significantly.
+
+If the compatibility option to re-enable serialization requires that the JDK
+ship with two copies of `rt.jar` (or two copies of the JDK modules) then it may
+have some impact on the size of the JDK download.
+
+
+Impact
+------
+
+  - Compatibility: High
+  - Documentation: Medium
+  - TCK: High
+  - Twitter: High