JVM ’ 目录归档

自己动手写GC

原文链接译文链接,原文作者: Robert Nystrom,译者:有孚

当事情多得我喘不过气来的时候,我会出现一种异常的反应,就是找点别的事做,就能摆脱烦恼了。通常我会自己写一些独立的小程序。

有一天早上,我正在写书,工作,还要为Strang Loop准备的分享,这些东西让我感到快崩溃了,突然间我想到,“我要写一个垃圾回收程序”。

是的,我知道这听起来有点疯狂。不过你可以把我这个神经的想法当成是一堂编程语言基础的免费教程。通过百来行普通的C代码,我实现了一个标记删除的收集器,你懂的,它的确能回收内存。

在程序开发领域,垃圾回收就像一片鲨鱼出没的水域,不过在本文中,这只是个儿童池,你可以随意玩耍。(说不定还是会有鲨鱼,不过至少水浅多了不是?)

阅读全文

你所不知道的有关Java 和Scala中的同步问题

原文:Things You Didn’t Know About Synchronization in Java and Scala   译者: 李杰聪

在实际应用中所有的服务端程序都需要在多线程之间进行某种同步。大多数同步已经有框架完成了,比如我们的web服务器,DB客户端和消息框架。Java和Scala提供了大量的组件用来实现稳定的多线程程序。包括对象池,并发集合,高级锁,执行上下文等。

为了更好的理解这些组件,我们深入了解一下最常用的同步原语——对象所。这个是用synchronized 关键字来实现的,在Java中它是非常流行的多线程原语。这也是其他更复杂模式的基础,比如线程池和连接池,并发集合等。

Synchronized 关键字主要用在以下两个场景:

  1. 作为方法的修饰,此方法在同一个时间只能被一个线程执行。
  2. 把一个代码块声明为临界区,任何时间只有一个线程能访问。

阅读全文

JVM Attach机制实现

感谢支付宝同事【寒泉子】的投稿

attach是什么

在讲这个之前,我们先来点大家都知道的东西,当我们感觉线程一直卡在某个地方,想知道卡在哪里,首先想到的是进行线程dump,而常用的命令是jstack <pid>,我们就可以看到如下线程栈了

阅读全文

JVM性能优化, Part 5:Java的伸缩性

感谢朋友【吴杰】投递本文。

JVM性能优化系列文章由Eva Andearsson在javaworld上发表共计5篇文章,ImportNew上有前4篇译文。本文(第5篇)由吴杰翻译自:javaworld 。

很多程序员在解决JVM性能问题的时候,花开了很多时间去调优应用程序级别的性能瓶颈,当你读完这本系列文章之后你会发现我可能更加系统地看待这类的问题。我说过JVM的自身技术限制了Java企业级应用的伸缩性。首先我们先列举一些主导因素。

  • 主流的硬件服务器提供了大量的内存
  • 分布式系统有大量内存的需求,而且该需求在持续增长
  • 一个普通Java应用程序所持有的对空间大概在1GB~4GB,这远远低于一个硬件服务器的内存管理能力以及一个分布式应用程序的内存需求量。这被称之为Java内存墙,如下图所示(图中表述Java应用服务器和常规Java应用的内存使用量的演变史)。

图 1 Java内存墙(1980~2010)

Java内存墙

Java内存墙

上图源自:Azul Systems 阅读全文

JVM 内部运行线程介绍

感谢同事[觉梦]投递此稿。

hi,all

最近抽时间把JVM运行过程中产生的一些线程进行了整理,主要是围绕着我们系统jstack生成的文件为参照依据。  前段时间因为系统代码问题,造成性能瓶颈,于是就dump了一份stack出来进行分析。  stack 里面线程非常多,排查起来需要一定的经验,所以,对它们有一定了解,可以提高排查问题的效率。  现在网上资料也不是特别全,所以,导致很多新人在拿到一个stack文件之后,也不知知道从何看起。 下面我把这次整理的一些个人认为比较常见的线程列出来。 阅读全文

return top