了解有关JDK9紧凑弦乐的信息(视频回顾Charlie Hunt)

JDK 9引入了一个称为紧凑字符串的新功能。 鉴于Java程序中普遍存在字符串,我认为这是一个非常重要的更改,所有Java开发人员都必须理解。

在此视频中,查理·亨特(Charlie Hunt)解释了此新功能的历史和实现。 该视频实际上与紧凑字符串无关。 仅将紧凑型字符串作为案例研究来介绍,以说明如何通过大量工作来共同改善三腿工作,延迟,吞吐量和内存占用。

如果您有时间,我绝对建议您观看整个视频,尽管紧凑弦乐的实际部分始于26:24。

如果您需要5分钟的概览,请看以下要点:

  • 字符串密度(JEP 254紧凑字符串)是JDK 9的功能。
  • 目的是在不影响性能(延迟或吞吐量)的同时减少内存占用,并保持完全的向后兼容性。
  • JDK 6引入了压缩字符串,但是从未将其引入以后的JVM中。 这是一个完整的重写。
  • 为了确定可以节省多少内存,分析了960个不同的Java应用程序堆转储。
  • 堆转储的实时数据大小在300MB到2.5GB之间。
  • char []消耗了实时数据的10%至45%
  • 绝大多数字符的大小仅为一位(即ASCII)
  • 75%的字符数组不超过35个字符
  • 平均而言,应用程序大小的减少为5-15%(由于标题大小,char []大小减少了约35-45%)
  • 它的实现方式是,如果String中的所有字符仅使用1个字节(较高的字节为0),则将使用byte []而不是char [](IS0-8859-1 / Latin1编码)。 会有一个再见指示使用哪种编码。
  • 未使用UTF8,因为它支持可变长度的字符,因此对于随机访问不起作用。
  • 字符串上的private final byte coder指示编码。 请注意,将来有空间支持更多编码。
  • 对于所有64位JVM,由于8字节对象对齐需要'死'空间,因此不需要额外的字段来存储额外的字段。
  • 在线提供400个JMH基准测试,吞吐量不会受到影响。
  • 原因是String高度优化,因为仅String就有55种特定的JVM功能。
  • 使用行业基准SPECjbb2015进行的延迟测试也得到了改进,并且在SPECjbb2005上进行了回归测试
  • 可以使用-XX:+ CompactStrings启用和禁用该功能,但是默认情况下将启用它。

翻译自: https://www.javacodegeeks.com/2016/02/learn-jdk9-compact-strings-video-review-charlie-hunt.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/354285.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

a算法解决八数码问题_javascript,八皇后问题解决

八皇后问题 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。 该问题是国际西洋棋棋手马克斯贝瑟尔于1848年提出: 在88格的国际象棋上摆放八个皇后,使其不能互相攻击, 即:任意两个皇后都不能处于…

vue项目中使用mock(二)

一,安装: npm install mockjs --save-dev目录: src 同级目录下新建 mock 文件夹 下 新建 mock.js 和 tags.js 文件 二,main.js 中导入: require(/mock/mock.js)三,mock.js 文件: const Moc…

CentOS6.9部署zabbix3.0监控系统

环境: [rootredis ~]# uname -a Linux redis 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux [rootredis ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [rootredis ~]# getenforce Disabled [rootredis …

输出整形变量语句_Python合集之Python变量

在上一节的合集中,我们了解了Python的保留字与标识符,本节我们将进一步了解一下Python中关于变量的问题。变量严格意义上来讲应该称之为“名称”,也可以理解为标签。在Python中,不需要先声明变量名及其数据类型,直接赋…

FormData使用方法详解

FormData的主要用途有两个: 1、将form表单元素的name与value进行组合,实现表单数据的序列化,从而减少表单元素的拼接,提高工作效率。 2、异步上传文件 一、创建formData对象 1、创建一个空对象: //通过FormData构造函…

IKVM:java代码c#调用

在工作中遇到对接java接口,涉及到java加密或签名问题,.net无法实。就将java代码编辑为dll给.net调用 注:这里只做简单java代码处理,不涉及到复杂的java包 java文件处理: 第一步:简单java代码 package com.zht;//c#命名…

activemq 连接_ActiveMQ网络连接器

activemq 连接这篇文章对我以及对ActiveMQ的网络连接器的工作方式可能感兴趣的任何ActiveMQ贡献者都适用。 我最近花了一些时间查看代码,并认为最好画一些快速的图表来帮助我记住我学到的知识,并在将来发现问题时帮助将来确定在哪里进行调试。 如果我输入…

如何让fragment刷新界面_快速实现android版抖音主界面的心得

原文作者:DK_BurNIng如何快速确定竞品某个界面的实现方式?当你收到产品一个需求是模仿某个竞品且时间很短没有过多时间给你调研技术方案的时候,如何尽快确定这个功能的技术方案呢? 这里我给出我自己的一个小窍门,可以避…

js的深浅拷贝( 赋值后原值被覆盖的问题 )

1,浅拷贝( 浅拷贝会复制所有引用对象的指针,而不是具体的值 ) 复制对象的所有属性都不是引用类型时,就可以使用浅拷贝 浅拷贝方式: Object.assign() [].slice()2,深拷贝( 复制一个…

使用JBoss Cool Store的终极云零售指南

我们一直在讨论为什么应用程序开发人员在App Dev Cloud Stack系列中不能再忽略其堆栈了。 带有JBoss Cool Store的App Dev Cloud 我们从头到尾讨论了各个层,但尚未为您提供除Red Hat Container Development Kit(CDK)之外的任何应用程序开发…

02.Python 3.6.4下载与安装

02.Python 3.6.4下载与安装 https://www.python.org/downloads/release/python-364/ Windows x86-64可执行文件安装程序视窗对于AMD64 / EM64T / x64,不是安腾处理器bee5746dc6ece6ab49573a9f54b5d0a131684744SIG我下载的是这个: https://www.python.or…

根据浏览器navigator区分PC端还是移动端,区分操作系统,区分浏览器型号

1,区分PC端还是移动端 methods:{_isMobile() {let flag navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i)return flag;}, }, m…

mysql 用户授权_mysql添加、删除用户和授权用户

MySql中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束):1.新建用户1.1 登录MYSQL:>mysql -u root -p>密码1.2 创建用户:mysql> insert into mysql.user(Host,User,Password) values("localhos…

2018年1月 常用的linux命令

项目中经常用到的Linux命令 (注意:linux命令要小写哦!) (1)、ls 显示当前目录下的文件 (2)、vi vim 进入编辑器,可以选择你要编辑的文档,一般我们将项目打…

vue-element-admin中 vuex 的使用

vue-element-admin 中 vuex 是模块化的。 登录流程 1,HTTP 配置(utils/request.js) 2,API 配置(api/user.js) import request from /utils/requestexport function login(username, password) {return …

javafx2_JavaFX 2 GameTutorial第4部分

javafx2介绍 这是与JavaFX 2游戏教程相关的六个部分系列的第四部分。 如果您错过了第1部分 , 第2部分或第3部分 ,我建议您在开始本教程之前仔细阅读它们。 回顾一下,在第3部分中,我为您提供了许多经典街机风格游戏以及所使用的不同…

mysql 实体类_Mysql生成实体类

-- 查询数据表结构SELECTCONCAT(‘"e.‘,SUBSTRING(COLUMN_NAME,1),‘,"‘),COLUMN_NAME,‘,‘,COLUMN_TYPE,column_commentFROMINFORMATION_SCHEMA.COLUMNSWHERE table_schema ‘xcb‘and table_name ‘t_product‘;-- 生成Java实体类SELECTCONCAT(‘Column(name&…

vue 兄弟组件之间的传值

1. 定义一个公共的bus.js //bus.js import Vue from vue export default new Vue()2. 在子组件A里用$emit发射数据 <script> // 引入公共的bug&#xff0c;来做为中间传达的工具 import Bus from ./bus.js export default {methods: {details(data) {//发射组件A的数据…

Java 8:声明接口中的私有方法和受保护的方法

引入Java 8时&#xff0c;我们可以在接口中使用默认方法。 此功能的主要驱动程序是允许扩展接口&#xff0c;同时保留对旧接口版本的向后兼容性。 一个示例是在现有Collection类中引入stream()方法。 有时&#xff0c;当我们想引入几种默认方法时&#xff0c;它们可能共享一些…

sysbench 1.0.6 mysql_Sysbench 测试mysql数据库性能(version:sysbench-1.1.0)

继上面安装完Mysql rpm 安装之后需要用sysbench对数据库进行性能测试&#xff1a;下载git clone https://github.com/akopytov/sysbench.git或者直接去github下载&#xff1a;https://github.com/akopytov/sysbench安装前准备除了上面Mysql rpm 安装提到的需要安装的四个rpm&am…