作者归档

下一代的多语言JVM:GraalVM

GraalVM是一款高性能的可嵌入式多语言虚拟机,它能运行不同的编程语言,包括:

  • 基于JVM的语言,比如Java, Scala, Kotlin和Groovy
  • 解释型语言,比如JavaScript, Ruby, R和Python
  • LLVM支持的原生语言,比如C, C++, Rust和Swift
阅读全文

Java 10的类型推导

Java 10带来了全新的语言特性:局部变量类型推导(local variable type inference)。它的主要目标就是减少样板代码(boilerplate),增强代码可读性。可以使用关键词var来替代局部变量的类型声明——编译器会根据变量初始化语句来自己填充正确的类型的。比如说:

Map<User, List<String>> userChannels = new HashMap<>();

阅读全文

JVM之动态方法调用:invokedynamic

在本文的前面的姊妹篇中,介绍了Java方法调用的5种操作码中的4种。它们是Java 8和Java 9中方法调用的标准字节码形式。

于是第五个操作码invokedynamic便进入了我们的视线。简单来说,Java 7中在语言层面上对invokedynamic是没有直接支持的。事实上,当Java 7的运行时首次引入invokedynamic指令时,javac编译器是不会生成这个字节码的。

阅读全文

JVM优化之循环展开

在JVM内部实现系列的前几篇文章中,我们已经看到了Java的HotSpot虚拟机的just-in-time (JIT)编译技术,包括逃逸分析和锁消除。本文我们将要讨论另一种自动优化,叫作循环展开。JIT编译器使用这项技术来让循环(比如Java的for或者while循环)执行得更加高效。

阅读全文

JVM优化之逃逸分析及锁消除

逃逸分析——我们在上一篇文章中所介绍的由编译器完成的一项的分析技术——使得删除锁的优化成为了可能。如果它能确认某个加锁的对象不会逃逸出局部作用域,就可以进行锁删除。这意味着这个对象同时只可能被一个线程访问,因此也就没有必要防止其它线程对它进行访问了。这样的话这个锁就是可以删除的。这个便叫做锁消除,本文是JVM实现机制的系列文章,这也正是今天要讲的主题。

阅读全文

JVM优化之逃逸分析与分配消除

在Java Magazine的前几期文章中,我们介绍了just-in- time (JIT) 编译技术的一些理论基础,以及如何使用Java Microbenching Harness(JMH)和开源工具JITWatch来进行可视化分析,以便搞清楚HotSpot VM的内部机制。在这期文章中,我们将要深入介绍一下逃逸分析(escape analysis)技术,这是JVM最有意思的优化手段之一。逃逸分析是JVM的一项自动分析变量作用域的技术,它可以用来实现某些特殊的优化,后续我们也会分析下这些优化。在开始之前,你只需要掌握一些HotSpot JVM的基本工作原理就可以了。

阅读全文

通过JVM日志来进行安全点分析

原文链接 作者: Plumbr 译者:之诸暇

许多事件都可能会导致JVM暂停所有的应用线程。这类暂停又被称为”stop-the-world”(STW)暂停。触发STW暂停最常见的原因就是垃圾回收了(github中的一个例子),但不同的JIT活动(例子),偏向锁擦除(例子),特定的JVMTI操作,以及许多场景也可能会导致应用程序暂停。

阅读全文

Java 8新的时间日期库的20个使用示例

原文链接 作者:Javin Paul 译者:之诸暇

除了lambda表达式stream以及几个小的改进之外,Java 8还引入了一套全新的时间日期API,在本篇教程中我们将通过几个简单的任务示例来学习如何使用Java 8的这套API。 阅读全文

Akka笔记之请求与响应

英文原文链接译文链接,原文作者:Arun Manivannan ,译者:有孚

前面我们讲到了Actor的消息传递,并看到了如何发送一条fire-n-forget消息(也就是说,消息发送给Actor后我们就不管了,不从Actor那接收响应)。

阅读全文

Akka笔记之日志及测试

英文原文链接译文链接,原文作者:Arun Manivannan ,译者:有孚

在前两篇笔记中(第一篇第二篇),我们简单地介绍了一下Actor以及它的消息传递是如何工作的。在本篇中,我们将看下如何解决TeacherActor的日志打印及测试的问题。

阅读全文

Akka笔记之消息传递

英文原文链接译文链接,原文作者:Arun Manivannan ,译者:有孚

在Akka笔记第一篇的介绍中,我们大致介绍了下Akka工具箱中的Actor。在第二篇当中,我们来看一下Actor消息传递的功能。这里还是延用之前使用的那个学生-老师的例子。

在Actor消息的第一部分中,我们会创建一个老师的Actor,但学生Actor则先不创建,而是使用一个叫做StudentSimulatorApp的主程序。

阅读全文

Akka笔记之Actor简介

英文原文链接译文链接,原文作者:Arun Manivannan ,译者:有孚

写过多线程的人都不会否认,多线程应用的维护是件多么困难和痛苦的事。我说的是维护,这是因为开始的时候还很简单,一旦你看到性能得到提升就会欢呼雀跃。然而,当你发现很难从子任务的错误中恢复或者有些僵尸BUG很难复现再或者你的分析器显示你的线程在写入一个共享状态前大部分时间都浪费在阻塞上面的时候,痛苦降临了。

我刻意没提Java的并发API,以及它里面的集合类使得多线程编程变得多么轻松简单,因为我相信既然你们点进了这篇文章,那就说明你希望能更好地控制你的子任务,或者你就是不喜欢使用锁以及同步块,希望能有一种更高层次的抽象。

阅读全文

Bash漏洞那些事儿

英文原文链接译文链接,原文作者:Troy Hunt ,译者:有孚

还记得Heartbleed漏洞吗?如果你相信今天这个铺天盖地的传言,那说明Shellshock和它是一类的,它的名字也同样令人畏惧(弹震症,一种精神疾病),就是缺了个酷点的LOGO而已(这些漏洞的市场部的人需要加把劲了)。不过认真来讲,它还是有可能成为一个大麻烦的,正如上次heartbleed漏洞中我所做的那样,我希望能汇总出一些资料,这样对我自己来说,我能知道如何去解决这个问题,也让别人能在各种传闻里真正认识到它潜在的风险。

阅读全文

JVM的持久代——何去何从?

英文原文链接译文链接,原文作者:Abhishek Gupta ,译者:有孚

本文会介绍一些JVM内存结构的基本概念,然后很快会讲到持久代,来看下Java SE 8发布后它究竟到哪去了。

基础知识

JVM只不过是运行在你系统上的另一个进程而已,这一切的魔法始于一个java命令。正如任何一个操作系统进程那样,JVM也需要内存来完成它的运行时操作。记住——JVM本身是硬件的一层软件抽象,在这之上才能够运行Java程序,也才有了我们所吹嘘的平台独立性以及WORA(一次编写,处处运行)。

阅读全文

GC对吞吐量的影响

英文原文链接译文链接,原文作者:Nikita Salnikov-Tarnovski,译者:有孚

在看内存管理术语表的时候偶然发现了”Pig in the Python(注:有点像中文里的贪心不足蛇吞象)”的定义,于是便有了这篇文章。表面上看,这个术语说的是GC不停地将大对象从一个分代提升到另一个分代的情景。这么做就好比巨蟒整个吞食掉它的猎物,以至于它在消化的时候都没办法移动了。

阅读全文

return top