Skip to main content

Compact Strings -  Java 9 Feature

Motivation

The current implementation of the String class stores characters in a char array, using two bytes (sixteen bits) for each character. Data gathered from many different applications indicates that strings are a major component of heap usage and, moreover, that most String objects contain only Latin-1 characters. Such characters require only one byte of storage, hence half of the space in the internal char arrays of such String objects is going unused

Description

We propose to change the internal representation of the String class from a UTF-16 char array to a byte array plus an encoding-flag field. The new String class will store characters encoded either as ISO-8859-1/Latin-1 (one byte per character), or as UTF-16 (two bytes per character), based upon the contents of the string. The encoding flag will indicate which encoding is used.

String-related classes such as AbstractStringBuilder, StringBuilder, and StringBuffer will be updated to use the same representation, as will the HotSpot VM's intrinsic string operations.

This is purely an implementation change, with no changes to existing public interfaces. There are no plans to add any new public APIs or other interfaces.

The prototyping work done to date confirms the expected reduction in memory footprint, substantial reductions of GC activity, and minor performance regressions in some corner cases.

Comments

Popular posts from this blog

What is Servet ?

A servlet is a java class that extends an application hosted on a web server. Handles the HTTP request-response process (for our purposes) Often thought of as an applet that runs on a server. Provides a component base architecture for web development, using the Java Platform The foundation for Java Server Pages (JSP). Alternative to CGI scripting and platform specific server side applications.

What is Applet ?

***What is an Applet? An Applet is a program that can be referenced by an HTML source code of a web page. It is dynamically downloaded from a web server to a browser and it is executed in the environment provided by the browser. Applet Viewer can also be used to execute  the applet. ***FirstApplet.java import java.applet.Applet; import java.awt.Graphics; /*<applet code=“FirstApplet” width=200 height=200> </applet>*/ public class FirstApplet extends Applet { public void paint(Graphics g) { g.drawString(“Hello World”,20,100); } } *** In the above example, The first two line is importing the java.applet and java.awt.Graphics package. The third line is the comment entry which is used only for applet viewer to execute the applet using the HTML source code. The next line declares the FirstApplet class which extends Applet class. Note that each applet created by user must extend the Applet class. There is a paint() method defined...