Valhalla项目的价值

我对Valhalla项目的进度一直很感兴趣,但是Brian Goetz最近的信息“ Valhalla项目:目标 ”提高了我的兴趣。 我经常喜欢Goetz的作品,因为他结合了我最想成为技术作者的两个特征:他比他所写的内容更了解他所写的主题,而且还能够以可接近的水平介绍这些概念。向我们其他人缺乏他在这一领域知识的深度。 邮件“ Valhalla项目:目标 ”在许多方面都具有重要意义,并且很容易接近; 任何对Valh​​alla项目为何如此激动感兴趣的人都应该直接阅读该书。 尽管我建议阅读原始的,易于理解的消息 ,但我通过阅读本文中的此消息收集了一些意见。

在我的软件开发人员职业生涯中,无论我使用哪种编程语言,我通常都会发现大多数软件开发都需要一系列权衡取舍 。 遇到性能最好的代码比慢代码的可读性差的地方很常见。 实际上,这种权衡是导致过早优化的原因 。 过早优化的危险在于它是“过早的”,因为实际上并不需要通过可读性较低的代码获得的性能提升,因此人们正在有效地交换“更危险”或“更昂贵”的代码以获得不必要的性能优势。

在Java中,通常在使用对象时进行这种折衷。 对象通常更易于使用,并且是与高度使用的标准Java集合一起使用所必需的,但是对象的开销在内存和开销方面可能会非常昂贵。 Goetz在“ Valhalla项目:目标”中指出,Valhalla项目有可能成为相对罕见的情况之一,在这种情况下,可以实现“安全性,抽象性,封装性,表达性和[和]可维护性”。

Goetz提供了与对象和维护对象标识相关的成本的简要摘要。 从对在不需要对象身份的情况下维护对象身份的缺点的简要说明之后,Goetz转向了现在期望的Java值类型如何解决此问题的描述。 除了简要描述值类型的优点外,Goetz还为值类型提供了一些备用名称和短语,可能有助于更好地理解它们:

  • “像Java类一样的聚合放弃了它们的身份”
  • “代码就像一个类,就像一个整数一样工作”
  • “更快的对象”
  • “可编程原语”
  • “便宜的东西”
  • “更丰富的原语”

关于值类型,Goetz写道:“我们不必强迫用户在抽象/封装/安全性和性能之间进行选择。 我们可以同时拥有。” 我们不是每天都有蛋糕也可以吃 。

在“ Valhalla项目:目标”中,Goetz还讨论了“扩展泛型以允许对所有类型进行抽象的目标,包括基本类型,值甚至是void”。 他使用了JDK的示例,该示例需要在其API中提供多种方法来涵盖非引用类型但必须由API支持的项,因为“泛型目前仅限于仅对引用类型进行抽象。” Goetz指出,即使自动装箱允许在API中使用原语,并期望与该原语相对应的引用类型(例如将int参数自动装箱为Integer引用),这种装箱也会降低性能。 在对问题进行了适当的解释之后,Goetz总结道:“如果我们一次编写一个通用类或方法,并抽象所有可能的数据类型,而不仅仅是引用类型,那么对每个人来说都会更好。” 他补充说:“能够一次编写东西……意味着更简单,更富表现力,更常规,更可测试,更可组合的库,而在处理原语和值时不会像今天的拳击那样失去性能。”

Goetz在声明“ Valhalla:目标”时总结说:“ Valhalla可能是出于性能方面的考虑,但是将其视为增强抽象性,封装性,安全性,可表达性和可维护性的一种更好的方法-“不”放弃性能。 从这个角度来看,我真的很喜欢Valhalla项目:我们可以获得使用对象和引用类型的许多好处,同时又不放弃使用基元的性能好处。

Valhalla项目:目标为您提供了许多简洁而平易近人的思路。 阅读这篇文章增加了我对Valhalla项目的未来的兴趣,我希望我们可以在JDK中看到它。

翻译自: https://www.javacodegeeks.com/2016/10/value-project-valhalla.html

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

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

相关文章

python里clear和copy_python之字典

通过名字引用值得数据结构.这种结构类型称为映射.字典是python中唯一内建的映射类型.字典中的值并没有特殊的顺序,但是都存储在一个特定的键里.键可以是数字,字符串甚至是元组.某些情况下,字典比列表更加适用:1.表征游戏棋盘的状态,每个键都是由坐标值组成的元组;2.存储文件修改…

实用类-会员信息

录入会员生日,形式必须是“月/日”,如“09/12”;录入的密码必须在6-10位之间;允许用户重复输入,直到输入正确为止。 1 package demo3;2 3 import java.util.Scanner;4 5 public class Test8 {6 public static void…

GDAL学习总结

GDAL介绍 GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。OGR是GDAL项目的一个分支,功能与GDAL类似,只不过…

matlab能用矩阵操作就不要用for循环

1.MATLAB尽量少用for循环来操作矩阵,多用本身的矩阵操作函数 比如,想将矩阵的第三列通过第二列计算得到,以下两种方式得到的结果一致,但不用for更简洁。 a 6; feature_labelnum(:,3) a * sqrt(feature_labelnum(:,2));%第三列…

jsp快到截止日期字体颜色变色_jsp页面中字体变色问题 - Java / Web 开发

jsp页面中字体变色问题 - Java / Web 开发[title]function diyCheck(){var fm document.frmMain;s1fm.YEAR.value;if(s12010){}年 [YEAR]计划 [PLANINOROUT] 问题:当页面中年的值为2009时正常显示,如果年的值为2010时,字体颜色变为红色&…

基于Flask、MySQL和Echarts的*市CPI和物价水平数据可视化分析

基于Flask、MySQL和Echarts的*市CPI和物价水平数据可视化分析 引言: 在当前社会经济背景下,CPI(居民消费价格指数)和物价水平的波动对市场和居民生活产生直接影响。本文将介绍一款基于Flask、MySQL和Echarts的数据可视化系统&…

windows server 2008 iis6.0 无法下载.exe

以下都是我自己的见解,如果有不对的地方,请各位大佬纠正,谢谢。 正常来讲,访问.exe文件,只需要在mini类型添加 application/octet-stream 后缀名 .exe 就可以下载.exe文件的。 这里是我配置了 application/octet-strea…

MATLAB错误:‘conv2’

MATLAB错误 Undefined function conv2 for input arguments of type double and attributes full 3d real. 原因:Color images are 3 dimensional arrays (x,y,color). conv2 is only defined for 2-dimensions, so it wont work directly on a 3-dimensional ar…

抽象工厂模式设计模式_抽象工厂设计模式解释

抽象工厂模式设计模式抽象工厂设计模式是工厂设计模式的另一种形式。 这种模式可以被视为“超级工厂”或“工厂工厂”。 抽象工厂设计模式(属于“四人帮”的一部分)属于“创新设计模式”类别,它提供了一种方法来封装一组具有公共链接的工厂而…

json php 数组读写_PHP如何将数据写入JSON?

I am newer for php. I want make php page cache, query data from mysql and store data into json format.I have many questions:which type of file should I store? .json or .txt or .cache? for I also need use json decode return datas into page.I want use cron…

加密后24位且最后两位是==

发现 某 xml 文件中的 标签 id 都是 24位大小写字母、数字加号、/等 共计 24位 且最后两位都是 测试发现用 16位数字经过base64可以得到类似的 格式 加密前:1234567890123456加密后:MTIzNDU2Nzg5MDEyMzQ1Ng 我这里的需求不是要解密,只是要模…

Java Syncrhonisers

线程通信主要通过共享对字段和对象的访问来发生。 尽管这种通信方式非常高效,但它易于出现诸如线程干扰和内存一致性之类的错误。 同步是一种有助于防止此类错误的工具。 但是,同步不是免费提供的,并且在访问当前由另一个线程持有的锁或对象…

MATLAB的VLFeat工具箱

下载地址:http://www.vlfeat.org/ 简介:VLFeat开源库实现了流行的计算机视觉算法,专门用于图像理解和局部特征提取和匹配。算法包括Fisher向量、VLAD、SIFT、MSER、k-means、分级k-means、agglomerative information bottleneck、SLIC超像素…

Phinecos(洞庭散人) 专注于开源技术的研究与应用 TinyXML:一个优秀的C++ XML解析器

读取和设置xml配置文件是最常用的操作,试用了几个C的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好。 TinyXML是一个开源的解析XML的解析库,能够用于C,能…

windows聚焦壁纸不更新_Win10无法自动更换聚焦锁屏壁纸怎么办?

Win10无法自动更换聚焦锁屏壁纸怎么办?在Win10系统的默认情况下,锁屏界面设置的是Windows聚焦,如果我们使用微软账户登录,系统会自动更换锁屏壁纸,让我们每天都能看到不一样的锁屏壁纸。然而有用户发现,系统…

jdbc-------JDBCUtil类 工具类

jdbcutil 主要处理的是 连接数据库, 和关闭各个流 1, 数据库连接的配置信息: mysql.properties (在工程的目录下)个人配置 urljdbc:mysql://localhost:3306/test drivercom.mysql.jdbc.Driver usernameroot password123 2, 获取连…

1.关于python

开始时间:2018年12月6日19:13:24 python第一次接触,将学习《简明python3教程》这本书,顺便做下笔记。 ----------------------------------------------------------------------------------------------------- 1、python的特点&#xf…

mybatis 使用in 查询时报错_MyBatis(四):mybatis中使用in查询时的注意事项

packagecom.boco.jobmonitor.model;importjava.util.Date;importjavax.persistence.GeneratedValue;importjavax.persistence.GenerationType;importjavax.persistence.Id;public classJobitem {/*** 唯一键 pk* 列名:id 类型:INTEGER(10) 允许空:false 缺省值:null*/IdGenerat…

python网络聊天器多线程版

在之前的一篇文章(python网络编程-udp)中实现了一个简单的udp聊天器,只能在单线程下进行收发数据,在学习完多线程之后,实现一个能同时收发数据的udp聊天器。 说明: 编写一个有2个线程的程序线程1用来接收数…

CentOS 7 / RHEL 7 systemd 指令

CentOS 7 已经切换到 systemd,系统指令也有所变化。之前用于启动、重启、停止各种服务的service 作为向后兼容的指令还能使用,但是将来可能会消失。同时,chkconfig 也改成了systemctl 了。这里列举了一些常用的对应于 service 和 chkconfig 的…