千家信息网

Java之JIT的示例分析

发表于:2024-11-19 作者:千家信息网编辑
千家信息网最后更新 2024年11月19日,这篇文章主要为大家展示了"Java之JIT的示例分析",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Java之JIT的示例分析"这篇文章吧。James Go
千家信息网最后更新 2024年11月19日Java之JIT的示例分析

这篇文章主要为大家展示了"Java之JIT的示例分析",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Java之JIT的示例分析"这篇文章吧。

James Gosling,加拿大计算机科学家,完成了 Java 的原始设计,并实现了 Java 最初版本的编译器和虚拟机,也是公认的 "Java 之父"。

Evrone 是一家企业软件开发公司,旗下担任技术布道师 (DevRel) 的 Grigory Petrov 最近对 James Gosling 进行了采访。

James Gosling 在此次访谈中聊了大量关于编程语言的话题,例如对现代编程语言新特性的看法、怎么看待编程语言更新后引起的破坏性变更、为什么不是所有编程语言都使用 JIT 技术等。

Grigory:我们希望以软件开发和软件顾问的身份在俄罗斯组织 Python、Ruby、Java 和 Go 社区。通过这次采访,我希望能展现这个行业的基本问题,进而为开发者同行提供帮助。你在 Java 领域的经验和工作经历可以帮助开发者变得更好,所以我们一起尝试完成这个目标吧!

有些编程语言,例如 Go,舍弃了类和继承这些特性。与此同时,其他语言则试验了一些新特性,如 Rust 中的 traits。作为语言设计师,你认为编程语言应该用怎样的现代、通用、合理方式来进行组合(Composition)。

James:我应该会继续使用类,因为我发现类对于这种场景非常有效。事实上,对于如何做不同的事情,我没有任何好的、清晰的想法。在 C 语言中,宏的存在几乎是一场灾难,因为宏不是语言的一部分,而是在语言之外的特性。Rust 正好希望通过合适的方式在语言中使用宏。

对于其他编程语言,如 Lisp 家族,它们有一套定义语法的方法,这些语法几乎完全和语义无关。我曾经写过许多 Lisp,沉迷于用 Lisp 程序来操作 Lisp 程序的技术。有些语言能够让你以不同的方式做到这一点,像 Groovy,我们可以直接使用 AST。而 Rust 则具有语法集成的宏。

Lisp 通过运算代码片段来生成新代码,在 Java 领域,这种方式也会经常被使用。虽然是非常底层的方法,不过却很受欢迎。因为开发者可以对注解进行组合,并使用不同的语言生成字节码,这是非常强大的技术,经常被用在意想不到的场景。例如 Jackson 框架,它通过计算序列化器提升了性能。

当然,这既是强大的技术,但也非常难以驾驭。这个技术充满可能性,但这种可能性是有限的。我对 Lombok 有着强烈的爱恨交加情感。它添加了许多优秀的 Java 特性,但从另一方面来说,这也暴露了其弱点。因为有些特性本应是内置功能。

Grigory:我们最近采访了 Ruby 的作者 Yukihiro Matsumoto,他提到他在最新的 Ruby 3.0 主要版本中做了一个实验。他试图在没有引入破坏性变更的情况下发布这个版本,看看会发生什么。我知道 Java 对"破坏性"持谨慎态度。那么是否所有编程语言都要考虑兼容性的问题,每个大版本都兼容是一个好主意吗?还是说这种情况只用于特定的语言,如 Ruby 或 Java?

James:这几乎完全取决于开发者社区的规模。每一项重大变更都会给开发者带去困扰,如果社区的开发者不多,那么破坏性更改不是大问题。另外还必须权衡成本效益。如果添加了某项破坏性的变更,它会增加负担,但与此同时也会带来一些好处,那么可以考虑。例如,如果将下标运算符从方括号更改为圆括号,它可能不会带来任何好处,并且会引起开发者极大的困扰。那这就是一个愚蠢的变更。

举个例子,JDK 9 引入了一个极其罕见的破坏性变更:如果开发者使用了一些所谓的隐藏 API,封装机制就会被打乱,那些破坏封装边界,以不应该使用的方式使用 API 的开发者,从 8 升级到 9 会碰到不少问题。

还有一种情况:当某处存在错误,并且开发者为该错误实现了变通方法。在这种情况下,如果修复了错误,那么有可能会对这些变通方法造成破坏。Java 也存在这种案例,我们的做法是要么不修复错误,要么引入正确的实现方法。

Grigory:我们来聊聊企业和产业的发展吧。我自己从未有过给机器人编程的经历,但我曾在为数百万人创造软件的公司工作了一段时间。拿今天和 20~25 年前来对比,我发现像 GitHub 这样的社交编码平台得到了巨头公司的支持,它帮助个人开发者和企业或工业软件开发者进行开源开发。那么我们是否可以认为现在是开源软件的黄金时代,你怎么看?

James:我不知道如何回答,因为这个问题涉及到未来。"现在是开源软件的黄金时代"这个观点隐含着"是不是从现在开始要走下坡路"的意思。如果现在是黄金时代,那么未来就不是黄金时代了吗?

所以我的看法是,无论黄金时代是什么模样,我们所处的环境正变得越来越好,一步步靠近理想中的"黄金时代"。目前,我们面临着各种围绕安全以及人类进行网络恐怖主义的危机。当这种事情仍在发生或正在发生,我不认为这是黄金时代。如果有某种方式可以终结网络恐怖主义--那将是非常"黄金"的时代,愿我们拭目以待。我想说的是,这是一个真正伟大的时代,但它可以变得更好。

Grigory:你在 Java 和 JVM 中使用了 JIT 技术。JIT 带来了非常惊人的速度,并且不影响语言的优雅语法和高级特性。许多编程语言都参考了 Java,例如 C# 和 JavaScript,它们通过热路径编译对代码进行重新编译的速度接近 C 和 C++。但许多其他语言,如 Python、Ruby、PHP,虽然具备可选的 JIT,但没有那么流行。许多主流编程语言也没使用 JIT 来提升性能。所以,为什么不是所有编程语言都使用 JIT 来为开发者提供更快的速度?

James:事实上,静态类型语言更适合通过 JIT 来提升性能。对于动态语言,比如 Python,这其实非常难。通常大家最终所做的是在语言中添加注解,这样就会得到像 TypeScript 这种编程语言,它本质上是带有类型注解的 JavaScript。这很有趣,因为 JavaScript 本质上是去除类型声明的 Java。因此,TypeScript 本质上是具有混合语法的 Java。

但如果你是一名用 Python 快速编写脚本的开发者,在他们看来,声明让他们觉得很困扰,思考变量的类型是非常烦人的事情。脚本语言世界中的大多数开发者并不关心性能问题。他们更在意的是能否用最快的速度完成开发,并不关心性能和相关的细节。

Grigory:有一个非技术问题。当我们谈论不同的语言时,在你个人看来,对于刚入门的开发者或者相关专业的学生而言,该选择什么语言作为他们学习的第一门语言?

James:对这个问题的回答我肯定会有一点偏心,毕竟 Java 已经被成功地使用了这么多年。但我本人学习的第一门编程语言是 PDP-8 汇编代码,差不多同一时期还学习了 Fortran。所以我认为对于初学者,可以教他们任何东西,因为每个人的学习能力不一样。

不过在这个问题上,我觉得要更多地考虑初学者未来的职业道路。如果希望成为一名全面发展的软件开发者,去构建一款大型的高性能系统,那么 JVM 语言是无法绕过去的,无论学习的是何种 JVM 语言。例如 Clojure、Scala 和 Kotlin。但如果是一名物理专业的学生,我会对他说 Python 也很不错。

事实上,我认为选择哪门编程语言作为第一门学习的语言并不是什么大问题。虽然许多人会一直坚持使用自己学习的第一门语言,但如果能够他们学习多门语言,并来回切换使用,这其实更好。我甚至觉得大学应该开设比较编程语言优劣的课程。课程内容是用 5 种不同的编程语言完成作业,这样的课程设计能让学生快速学习这些语言,因为它们其实也没有太大的区别。不过学生通过这种方式会思考语言的优缺点。

很久以前我上过这样的课程,例如使用 Cobol 完成数值计算,使用 Fortran 完成符号操作,对于这两种语言来说,这些任务都不是它们擅长的领域,但我最后还是拿到了 A 的成绩。

以上是"Java之JIT的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

语言 开发 开发者 编程 编程语言 学习 问题 时代 软件 黄金 技术 方式 特性 破坏性 不同 性能 方法 语法 帮助 代码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 服务器口令应不低于 计算机网络技术专什本 代码软件开发平台 软件开发费用怎么分摊 万方数据库资源包括报纸吗 市北区电商软件开发企业 贵州大学复试数据库 服务器管理都管理什么问题 阿里云收件服务器怎么填写 对数据库动态特性描述 宁波网络安全大赛题目 软件开发的法律免责 两个数据库如何并行跑 erp服务器哪个配置好 毕业现在在广州软件开发公司工作 基于B树的数据库引擎 国家网络安全宣传周每年几次 香港美国华云云服务器 文件管理软件服务器版 数据库字段名称最长 网络安全帽可以用于手机的吗 曙光服务器管理口账户 深圳网络技术培训 tcga数据库都有什么癌症样本 数据库与安全信息管理 幼儿园网络安全教育知识教案反思 镇江市博莱软件开发有限公司 2019年网络安全宣传口号 如何从分表中引入数据库 南京铭骏创软件开发有限公司
0