
jvm虚拟机
文章平均质量分 64
楼主学习jvm虚拟机过程中的个人总结
栋先生
Java程序员,努力学习,早日成为大神!
展开
-
JVM概述
Java 虚拟机 Java 虚拟机(Java virtual machine,JVM)是运行 Java 程序必不可少的机制。JVM实现了Java语言最重要的特征:即平台无关性,同时学习JVM也是一个java程序员在成长过程中的必经之路。本系列博客总结了LZ在学习JVM时的一些经验和面试要点,希望可以帮助到大家。原创 2017-04-17 21:54:24 · 1271 阅读 · 0 评论 -
一、JVM内存区域详解
Java中虚拟机在执行Java程序的过程中会将它所管理的内存区域划分为若干不同的数据区域。下面来介绍几个运行时数据区域。 一、程序计数器1.1 简述程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器。1.2 作用大家都知道,Java程序从源文件创建到程序运行要经过两大步骤: 1...原创 2017-03-18 21:21:31 · 884 阅读 · 0 评论 -
二、OutOfMemoryError实战
本文通过一些可执行代码来验证异常发生的场景,并且会初步介绍几个与内存相关的最基本的虚拟机参数。 本文的主要目的有两个: 1. 通过代码验证Java虚拟机规范中描述的各个运行时区域储存的内容。 2. 希望读者在工作中遇到实际的内存溢出异常时,能根据异常的信息快速判断是哪个区域的内存溢出,知道怎样的代码可能会导致这些区域的内存溢出,以及出现这些异常后该如何处理。原创 2017-04-16 22:27:46 · 1819 阅读 · 1 评论 -
三、JVM之对象的创建
上篇博文中已经介绍过了jvm内存的概况,接下来我们从jvm的角度来重新来认识一下Java对象是如何创建。 Java是一门面向对象的语言,在Java程序运行的时候无时无刻都有对象的产生。在 语言方面 ,创建一个对象仅仅是一个new关键字而已。那么在 虚拟机中 ,对象(仅指普通对象,不包括数组和Class对象等)的创建又是一个怎么样的过程呢?一、 类加载虚拟机遇到一条new指令时,首先将...原创 2017-03-20 12:57:05 · 657 阅读 · 0 评论 -
四、Java对象的内存布局
上篇博客介绍的对象的创建过程,本文来介绍一下对象的组成结构。 在HotSpot虚拟机中,对象在内存中的布局划分为3个区域:对象头(Header),实例数据(Instance Data)以及对齐填充(Padding)。对象头HotSpot虚拟机对象的对象头一般包含两部分信息。第一部分用于存储对象自身的运行时数据,例如HashCode、GC分代年龄等信息。在32位和64位的JVM中...原创 2017-03-31 20:26:15 · 648 阅读 · 2 评论 -
五、Java对象的访问定位
Java对象在访问的时候,我们需要通过java虚拟机栈的reference类型的数据去操作具体的对象。由于reference类型在java虚拟机规范中只规定了一个对象的引用,并没有定义这个这个引用应该通过那种方式去定位、访问java堆中的具体对象实例,所以一般的访问方式也是取决与java虚拟机的类型。目前主流的访问方式有通过句柄和直接指针两种方式。原创 2017-03-31 20:27:39 · 554 阅读 · 0 评论 -
六、jvm之如何判断对象已死?
在堆里面几乎存放中Java程序运行所动态生成的所有对象,垃圾回收器在对堆进行回收前,第一件事情就是要确定这些对象之中还有哪些存活,哪些已经死去(即不可能再被任何途径使用的对象)。判断的方式有两种:引用计数算法和可达性算法。 目前虚拟机基本都是采用 可达性算法,为什么不采用引用计数算法呢?下面就说说引用计数法是如何统计所有对象的引用计数的,再对比分析可达性算法是如何解决引用技术算法的不足。原创 2017-03-31 20:29:19 · 901 阅读 · 0 评论 -
七、引用(reference)详解
什么是引用?如果reference类型的数据中存储的数值代表的是另外一块内存的起始地址,就称这块内存代表着一个引用。引用不等同于对象本身,根据虚拟机种类的不同,可能是一个指向对象起始地址的引用指针,也可能是指向一个代表对象的句柄或其他与此对象相关的位置。原创 2017-03-31 20:31:25 · 16244 阅读 · 0 评论 -
八、java对象和方法区的垃圾回收
即使在可达性分析算法中不可达的对象,也并非是“非死不可”的,这时候它们暂时处于“缓刑”阶段,要真正宣告一个对象死亡,至少要经历两次标记过程:如果对象在进行可达性分析后发现没有与GC Roots相连接的引用链,那它将会被第一次标记并且进行一次筛选,筛选的条件是此对象是否有必要执行finalize()方法.原创 2017-04-16 22:30:08 · 1917 阅读 · 0 评论 -
九、垃圾回收算法
本文主要介绍垃圾收集算法的思想及其发展过程。1. 标记-清除算法(Mark-Sweep)2. 复制算法 (Copying)3. 标记-整理算法(Mark-Compact)4. 分代收集算法 (Generational Collecting)原创 2017-04-03 22:01:59 · 547 阅读 · 0 评论 -
十、垃圾收集器
如果说垃圾回收算法是内存回收的方法论,那么垃圾回收器就是内存回收的具体实现。 HotSpot中总共有7种收集器,本文逐一介绍这些收集器的特性、基本原理和使用场景。原创 2017-04-03 22:04:10 · 624 阅读 · 0 评论 -
十一、GC日志详解
每一种收集器的日志形式都是由它们自身的实现所决定的,换而言之,每个收集器的日志格式都可以不一样。原创 2017-04-16 22:32:09 · 1088 阅读 · 0 评论 -
十三、JDK的命令行工具
前面的博文我们介绍了一些关于jvm的一些基础知识,本文介绍一些jdk的命令行工具,通过这些工具我们可以对运行日志、异常堆栈、GC日志、线程快照(threaddump/javacore 文件)、堆转储快照(heapdump/hprof 文件)等文件进行分析,从而定位解决问题。 jdk的彬目录中有许多命令行工具,其中java.exe、javac.exe这两个命令行工具是我们最熟悉的。同时,还有其他的许原创 2017-04-16 22:33:59 · 1533 阅读 · 0 评论