JVM
文章平均质量分 93
Ricky_Fung
「Stay hungry. Stay foolish.」
展开
-
深入理解Java虚拟机(一)-jvm运行时数据区
前言对于Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每一个new操作去写对应的delete/free代码,不容易出现内存泄漏和内存溢出问题,由虚拟机管理内存。不过,也正是Java程序员把内存控制的权力交给了Java虚拟机,一旦出现内存泄漏和溢出方面的问题,如果不了解Java虚拟机是如何使用内存的,那么排查错误将会成为一项异常艰难的工作。本文将从概念上介绍Java虚拟机内存的各个区原创 2016-04-30 23:16:37 · 4372 阅读 · 0 评论 -
深入理解Java虚拟机(三)-垃圾收集
概述说到垃圾收集(Garbage Collection,GC),大部分人都会把这项技术当做Java语言的伴生产物。事实上,GC的历史比Java久远,1960年诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言。当Lisp还在胚胎时期时,人们就在思考GC需要完成的3件事情: 哪些内存需要回收? 什么时候回收? 如何回收? 经过半个多时间的发展,目前内存的动态分配与内存回收技术已经相原创 2016-05-01 08:54:41 · 969 阅读 · 0 评论 -
深入理解Java虚拟机(二)-对象分配、布局和访问
上一篇文章介绍了Java虚拟机运行时数据区域,本文以常用的HotSpot虚拟机为例,深入探讨HotSpot虚拟机在Java堆中对象创建、布局和访问的全过程。对象的创建Java是一门面向对象的编程语言,在Java程序的运行过程中无时无刻都有对象被创建出来。在语言层面上,创建对象通常仅仅是一个new关键字而已,而在虚拟机中,对象(本文中讨论的对象限于普通Java对象,不包括数组和Class对象等)的创建原创 2016-05-01 01:52:27 · 1350 阅读 · 0 评论 -
深入理解Java虚拟机(四)-垃圾收集算法
概述当前的商业虚拟机的垃圾收集都采用“分代收集”(Generational Collection)算法,这种算法并没有什么新的思想,只是根据对象存活周期的不同将内存划分为几块。一般是把Java堆分为新生代和老年代,这样就可以根据各个年代的特点采用最适当的收集算法。在新生代中,每次垃圾收集时都发现有大批的对象死去,只有少量存活,那就选用复制算法,只需要付出少量存活对象的复制成本就可以完成收集。而老年代原创 2016-05-01 19:38:47 · 1046 阅读 · 0 评论 -
JVM性能监控工具(一)-jdk命令行工具
概述当系统出bug需要定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。这里所说的数据包括:运行日志,异常堆栈,GC日志,线程快照(threaddump/javacore文件),堆转储快照(heapdump/hprof文件)等。使用适当的虚拟机监控和分析工具可以加快我们分析数据、定位问题的速度。JDK的命令行工具JDK本身提供了很多方便的JVM性能监控工具,除了集成式的原创 2016-05-19 18:46:16 · 5207 阅读 · 0 评论