写点什么

Java 开发者必读的 10 篇精选优秀技术文章

2015 年 11 月 17 日

作为最受欢迎的编程语言之一,Java 已经走过了 20 个年头。从已经落寞的诺基亚到现在火热的电商系统,我们都能看到 Java 语言的身影。经过 20 年的历练,这门语言已经逐渐成熟,并经过很多大型系统的考验。社区关于这门语言的讨论,也从语言使用过渡到了性能优化以及反思。

InfoQ 上有大量的关于 Java 性能、语言细节、语言对比等方面的文章,现在向大家推荐 10 篇精选的优秀文章,这些文章来自微信公众号 InfoQ,如果您对各类技术感兴趣,推荐关注,后续我们也将会把最优秀的内容第一时间通过微信公众号推送给您。

1、作为一名 Java 程序员,我为何不在生产项目中转向 GO

自 Google 在 2009 年发布 Go 语言的第一个正式版之后,这门语言就以出色的语言特性受到大家的追捧,尤其是在需要高并发的场景下,大家都会想到是不是该用 Go。随后,在国内涌现出了一批以七牛为代表的使用 Go 作为主要语言的团队,而许世伟大神本人也在各种场合下极力推动 Go 在国内的发展,于是在这种大环境下,中国的 Go 开发者群体逐渐超越了其他地区。

那么问题来了,业余时间好学是一回事,真正要将一个新东西运用到生产中则是另一回事。JavaScript 的开发者可以义无反顾地选择 Node.js,但是对于 Java 开发者来说,在下一个大项目里究竟是该选择 Go,还是 Java 呢?

扫描二维码关注公众号后,发送数字 1 即可阅读原文。

2、企业级 Java 应用最重要的 4 个性能指标

虽然很多人都曾预言 Java 将一蹶不振,但是不可否认的是,很多重要项目中,尤其是银行和政府一些大型项目,Java 仍在其中扮演着极其重要的角色。国内 APM 领军企业 OneAPM 的 Java 工程师陶炳哲,多次参与银行、运营商等大型企业的性能优化工作, 总结了企业级 Java 应用最应重视的 4 个性能指标,主要包括:商业事务,外部服务,垃圾回收以及应用布局。

扫描二维码关注公众号后,发送数字 2 即可阅读原文。

3、你的 Java 代码对 JIT 编译友好吗?

JIT 编译器是 Java 虚拟机(以下简称 JVM)中效率最高并且最重要的组成部分之一。但是很多的程序并没有充分利用 JIT 的高性能优化能力,很多开发者甚至也并不清楚他们的程序有效利用 JIT 的程度。

在本文中,我们将介绍一些简单的方法来验证你的程序是否对 JIT 友好。这里我们并不打算覆盖诸如 JIT 编译器工作原理这些细节。只是提供一些简单基础的检测和方法来帮助你的代码对 JIT 友好,进而得到优化。

扫描二维码关注公众号后,发送数字 3 即可阅读原文。

4、Java 大牛谈:我为什么反对用 Node

随着无线端的快速普及,前后端分离技术走上前台,而 Node 由于它的一些特性被工程师快速接受尤其是前端工程师,所以产生了很多 Node 是否会引起新的技术变革的讨论。

我本人是淘系的一个 Web 开发人员,基本上经历了淘系关于 Node 和 Java 技术选型讨论的过程,所以今天我给大家推演一下在像淘系这个环境下 Node 能否会成为主流的 Web 开发技术,当然后面也给出了我认为比较适合的场景。

扫描二维码关注公众号后,发送数字 4 即可阅读原文。

5、Java 永久代去哪儿了

在 Java 虚拟机(以下简称 JVM)中,类包含其对应的元数据,比如类的层级信息,方法数据和方法信息(如字节码,栈和变量大小),运行时常量池,已确定的符号引用和虚方法表。

在过去(当自定义类加载器使用不普遍的时候),类几乎是“静态的”并且很少被卸载和回收,因此类也可以被看成“永久的”。另外由于类作为 JVM 实现的一部分,它们不由程序来创建,因为它们也被认为是“非堆”的内存。

在 JDK8 之前的 HotSpot 虚拟机中,类的这些“永久的”数据存放在一个叫做永久代的区域。永久代一段连续的内存空间,我们在 JVM 启动之前可以通过设置 -XX:MaxPermSize 的值来控制永久代的大小,32 位机器默认的永久代的大小为 64M,64 位的机器则为 85M。永久代的垃圾回收和老年代的垃圾回收是绑定的,一旦其中一个区域被占满,这两个区都要进行垃圾回收。但是有一个明显的问题,由于我们可以通过‑XX:MaxPermSize 设置永久代的大小,一旦类的元数据超过了设定的大小,程序就会耗尽内存,并出现内存溢出错误 (OOM)。

备注:在 JDK7 之前的 HotSpot 虚拟机中,纳入字符串常量池的字符串被存储在永久代中,因此导致了一系列的性能问题和内存溢出错误。想要了解这些永久代移除这些字符串的信息,请访问这里查看。

扫描二维码关注公众号后,发送数字 5 即可阅读原文。

6、Java9 新功能:HTTP2&REPL 篇

对 Java 9 的炒作将不再局限于模块化(modularity),Java 9 正在搜罗大量额外的功能模块,这些功能模块正作为 Java 增强提案(JEP)提交,并在 OpenJDK (Java SE 的参考实现项目)中实现。

在这篇文章中,我们将重点关注一些或将在 Java 9 整个生命周期中,对开发者的工作生活影响最大的 JEP,包括新的 HTTP/2 支持和 JShell REPL(读取 - 求值 - 打印 - 循环),后者带来了基于 shell 的交互式 Java 开发环境和探索性开发 API。

扫描二维码关注公众号后,发送数字 6 即可阅读原文。

7、简化你的 Java 代码,让工作更高效

计算机专家在问题求解时非常重视表达式简洁性的价值。Unix 的先驱者 Ken Thompson 曾经说过非常著名的一句话:“丢弃 1000 行代码的那一天是我最有成效的一天之一。”这对于任何一个需要持续支持和维护的软件项目来说,都是一个当之无愧的目标。早期的 Lisp 贡献者 Paul Graham 甚至将语言的简洁性等同为语言的能力。这种对能力的认识让可以编写紧凑、简介的代码成为许多现代软件项目选择语言的首要标准。

相比于其他程序设计语言,Java 语言的冗长已经名声在外。其主要原因是由于程序开发社区中所形成的惯例,在完成任务时,很多情况下,要更大程度地考虑描述性和控制。例如,长期来看,长变量名会让大型代码库的可读性和可维护性更强。描述性的类名通常会映射为文件名,在向已有系统中增加新功能时,会显得很清晰。如果能够一直坚持下去,描述性名称可以极大简化用于表明应用中某一特定的功能的文本搜索。这些实践让 Java 在大型复杂代码库的大规模实现中取得了极大的成功。

本文将着重介绍编写简洁 Java 代码的最佳实践,特别是关于 JDK8 中新增的功能。简而言之,Java 8 中 Lambda 表达式的引入让更加优雅的代码成为可能。这在用新的 Java Streaming API 处理集合时尤其明显。

扫描二维码关注公众号后,发送数字 7 即可阅读原文。

8、你的 Java 日志,有没有用这些改进办法

在任何系统中,日志都是非常重要的组成部分,它是反映系统运行情况的重要依据,也是排查问题时的必要线索。绝大多数人都认可日志的重要性,但是又有多少人仔细想过该怎么打日志,日志对性能的影响究竟有多大呢?今天就让我们来聊聊 Java 日志性能那些事。

扫描二维码关注公众号后,发送数字 8 即可阅读原文。

9、Java NIO 通信框架在电信领域的实践

从广义上看电信软件的范围非常广,细分实际可以分为两大类:系统软件和业务应用软件。

系统软件包括路由器底层的信令机软件、手机操作系统等,业务应用软件主要包括客户关系管理 CRM、网上营业厅、融合计费 OCS 和各类消息网关,例如短信网关、彩信网关等。

本文重点介绍电信业务应用软件的技术变迁历史,以及华为电信软件架构演进和 Java NIO 框架在技术变迁中起到的关键作用。

扫描二维码关注公众号后,发送数字 9 即可阅读原文。

10、写代码这回事儿,架构师你可以说不吗?

要让一个成功的架构得以实现,架构师必须要在整个生命周期始终保持与交付团队的紧密合作。保持紧密合作能够促进架构层面的快速反馈循环。并且还能够为架构师提供更多的与团队交流架构愿景和领导团队的机会。

正如本文题目所描述的那样,架构师除了可以参与到实际的编码工作中之外,还有许多其他的方式可以参与到交付团队中,例如结对编程和同行评审。相反,某些参与方式有可能会对团队造成负面影响,例如接管交付、不允许团队自组织或者采用集体所有制。

其中一个关键目的是为了避免“象牙塔”架构师的角色——只在项目最初发布架构,然后就再也不见踪影。谋求与交付团队的协作关系,共同努力尽早识别和解决架构性缺陷,从而交付成功的架构和最终的产品。

扫描二维码关注公众号后,发送数字 10 即可阅读原文。

2015 年 11 月 17 日 21:009949
用户头像
郭蕾 做有意思的事情!

发布了 210 篇内容, 共 108.8 次阅读, 收获喜欢 27 次。

关注

评论

发布
暂无评论
发现更多内容

week-10-part2 学习总结

陈龙

week-11-part2 学习总结

陈龙

第七周 性能优化(一) 作业 「架构师训练营 3 期」

feiyun123

前端也要懂机器学习(上)

执鸢者

机器学习 前端 特征选择

产品与服务

JiangX

创业 产品 投资 服务 28天写作

第12周作业

Jack

架构师训练营第二期 Week 12 作业

bigxiang

架构师训练营第2期

从大局着眼,立微处发力

张老蔫

28天写作

Java Kafka 简单示例

Java kafka

架构师训练营一期大作业一

陈龙

HDFS SHELL详解(3)

罗小龙

hadoop 28天写作 hdfs shell

创业失败启示录|校园里的蓝色单车(分析篇)

青城

创业 28天写作 创业失败启示录 青城

Windows10 Kafka Docker 集群搭建

Docker kafka

电动车基本知识(28天写作 Day3/28)

mtfelix

自动驾驶 28天写作 电动汽车

架构师训练营第二期 Week 12 总结

bigxiang

架构师训练营第2期

第七周 性能优化作业

简简单单

Java程序经验小结:谨慎的使用本地方法

后台技术汇

28天写作

第七周 学习总结

简简单单

Java并发编程实战(3)- 互斥锁

技术修行者

Java 并发编程 多线程

数仓面试高频考点--解决hive小文件过多问题

五分钟学大数据

大数据 hive 面试题 数仓

week-10-part1微服务调用的时序图

陈龙

第七周命题作业

cc

堡垒机是什么?

网络技术平台

第六周 技术选型(二) 作业 「架构师训练营 3 期」

feiyun123

构师训练营 - 第十二周课后练习

joshuamai

python自学 第一章 初始python

WEB前端修行日志

Python

RocketMQ如何保证消息可靠性

双儿么么哒

RocketMQ

构师训练营 - 第十二周学习总结

joshuamai

架构师系列 13 Spark 大数据处理在金融领域中的应用

桃花原记

week-11-part1分析系统不可用的原因

陈龙

架构师训练营一期大作业二

陈龙

微服务架构下如何保证事务的一致性

微服务架构下如何保证事务的一致性

Java开发者必读的10篇精选优秀技术文章-InfoQ