官术网_书友最值得收藏!

Storing Interned Strings in CDS Archives

The main goal of this feature is to reduce memory footprint caused by creating new instances of string in every JVM process. All the classes that are loaded in any JVM process can be shared with other JVM processes via Class Data Sharing (CDS) archives.

Oh, I did not tell you about CDS. I think it's important to spend some time to understand what CDS is, so you can understand the underlying performance improvement.

Many times, small applications in particular spend a comparatively long time on startup operations. To reduce this startup time, a concept called CDS was introduced. CDS enables sharing of a set of classes loaded from the system JAR file into a private internal representation during the JRE installation. This helps a lot as then any further JVM invocations can take advantage of these loaded classes' representation from the shared archive instead of loading these classes again. The metadata related to these classes is shared among multiple JVM processes.

CDS stores strings in the form of UTF-8 in the constant pool. When a class from these loaded classes begins the initialization process, these UTF-8 strings are converted into String objects on demand. In this structure, every character in every confined string takes 2 bytes in the String object and 1 byte to 3 bytes in the UTF-8, which essentially wastes memory. Since these strings are created dynamically, different JVM processes cannot share these strings.

Shared strings need a feature called pinned regions in order to make use of the garbage collector. Since the only HotSpot garbage collector that supports pinning is G1; it only works with the G1 garbage collector.

主站蜘蛛池模板: 游戏| 丁青县| 柘荣县| 临安市| 溧阳市| 威宁| 南康市| 高台县| 五莲县| 台北市| 合山市| 富阳市| 富蕴县| 桂阳县| 柏乡县| 于都县| 镇远县| 温州市| 利川市| 湟源县| 瓦房店市| 昌图县| 天峨县| 天峻县| 鄂尔多斯市| 志丹县| 新营市| 文化| 长汀县| 佛山市| 汉源县| 久治县| 康马县| 彰化县| 梓潼县| 临沧市| 德钦县| 措勤县| 建宁县| 通州区| 栖霞市|