
Java虚拟机(JVM)
文章平均质量分 91
smile4lee
这个作者很懒,什么都没留下…
展开
-
【深入理解JVM】:推荐阅读
王晨纯, 面向GC的Java编程原创 2016-05-12 16:58:08 · 858 阅读 · 0 评论 -
【深入理解JVM】:类加载机制
概述虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。与那些在编译时需要进行链接工作的语言不同,在Java语言里,类型的加载、连接和初始化过程都是在程序运行期间完成的,例如import java.util.*下面包含很多类,但是,在程序运行的时候,虚拟机只会加载哪些我们程序需要的类。这种策略虽然会原创 2016-05-06 10:13:25 · 6468 阅读 · 3 评论 -
【深入理解JVM】:Class类文件结构
概述我们平时在DOS界面中往往需要运行先运行javac命令,这个命令的直接结果就是产生相应的class文件,然后基于这个class文件才可以真正运行程序得到结果。自然。这是Java虚拟机的功劳,那么是不是Java虚拟机只能编译.java的源文件呢?答案是否定的。时至今日,Java虚拟机已经实现了语言无关性的特点。而实现语言无关性的基础是虚拟机和字节码的存储格式,Java虚拟机已经不和包括Java语言原创 2016-05-05 21:08:35 · 3963 阅读 · 0 评论 -
【深入理解JVM】:内存分配与回收策略
Java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决了两个问题:给对象分配内存以及回收分配给对象的内存。对象的内存分配,往大方向讲,就是在堆上分配,对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配。少数情况下也可能会直接分配在老年代中,分配的规则并不是百分之百固定的,其细节取决于当前使用的是哪一种垃圾收集器组合,还有虚拟机中与内存相关的参数的设原创 2016-05-05 20:27:40 · 4612 阅读 · 2 评论 -
【深入理解JVM】:HotSpot垃圾收集器
相关概念并发和并行这两个名词都是并发编程中的概念,在谈论垃圾收集器的上下文语境中,它们可以解释如下。并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。并发(Concurrent):指用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),用户程序在继续运行,而垃圾收集程序运行于另一个CPU上。Minor GC 和 Full GC新生代GC(Mi原创 2016-05-05 16:58:55 · 5582 阅读 · 0 评论 -
【深入理解JVM】:垃圾收集(GC)概述
为什么要垃圾回收我们知道电脑的内存是有限的,如果一段程序申请了一块内存空间并执行完计算之后,没有释放内存,会导致这块内存被占用,那么可用内存就变少了,如果一个系统很庞大,程序中迟早会把电脑内存耗尽的。为了提高内存的使用效率,内存在使用完必须释放,这样其他程序才可能重新申请这块内存。C语言中有malloc、free等于内存分配以及内存释放的函数。而Java中使用垃圾收集机制来整理内存空间。垃圾收集的区原创 2016-05-05 14:43:02 · 823 阅读 · 0 评论 -
【深入理解JVM】:Java对象的创建、内存布局、访问定位
对象的创建一个简单的创建对象语句Clazz instance = new Clazz();包含的主要过程包括了类加载检查、对象分配内存、并发处理、内存空间初始化、对象设置、执行ini方法等。主要流程如下:1. 类加载检查JVM遇到一条new指令时,首先检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类的加原创 2016-05-05 12:06:47 · 13516 阅读 · 1 评论 -
【深入理解JVM】:Java内存模型JMM
多任务和高并发的内存交互多任务和高并发是衡量一台计算机处理器的能力重要指标之一。一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions Per Second,TPS)这个指标比较能说明问题,它代表着一秒内服务器平均能响应的请求数,而TPS值与程序的并发能力有着非常密切的关系。物理机的并发问题与虚拟机中的情况有很多相似之处,物理机对并发的处理方案对于虚拟机的实现也有相当大的参考原创 2016-05-07 14:00:13 · 24746 阅读 · 8 评论 -
【深入理解JVM】:解析与分派
解析Java中方法调用的目标方法在Class文件里面都是常量池中的符号引用,在类加载的解析阶段,会将其中的一部分符号引用转化为直接引用。(关于符号引用与直接引用,详见【深入理解JVM】:Class类文件结构)这种解析的前提是:方法在程序真正运行之前就有一个可以确定的调用版本,并且这个方法的调用版本在运行期是不可改变的,即“编译期可知,运行期不可变”,这类目标的方法的调用称为解析(Resolve)。只原创 2016-05-06 20:56:50 · 6651 阅读 · 0 评论 -
【深入理解JVM】:Java类继承关系中的初始化顺序
Java类初始化的顺序经常让人犯迷糊,现在本文尝试着从JVM的角度,对Java非继承和继承关系中类的初始化顺序进行试验,尝试给出JVM角度的解释。非继承关系中的初始化顺序对于非继承关系,主类InitialOrderWithoutExtend中包含了静态成员变量(类变量)SampleClass 类的一个实例,普通成员变量SampleClass 类的2个实例(在程序中的顺序不一样)以及一个静态代码块,其原创 2016-05-06 11:19:38 · 14110 阅读 · 7 评论 -
【深入理解JVM】:Java内存区域
JVM具有自动内存管理机制,Java不需要像c/c++一样,为每一个new操作写配对的delete/free代码,不容易出现内存泄露和溢出。JVM内存区域主要包括如下部分:程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区。程序计数器程序计数器可以视为当前线程所执行的字节码行号指示器,如果当前执行的是Native方法,计数器的值为空(Undefined)。在JVM的概念模型中,字节码解释器原创 2016-05-05 09:50:03 · 4049 阅读 · 0 评论 -
【深入理解JVM】:垃圾收集算法
垃圾收集算法主要有以下几种:标记-清除算法(mark-sweep)、复制算法(copying)和标记-整理算法(mark-compact)。标记-清除算法算法的执行过程与名字一样,先标记所有需要回收的对象,在标记完成后统一回收所有被标记的对象。该算法有两个问题:标记和清除过程效率不高。主要由于垃圾收集器需要从GC Roots根对象中遍历所有可达的对象,并给这些对象加上一个标记,表明此对象在清除的时原创 2016-05-05 16:31:21 · 4573 阅读 · 1 评论 -
【深入理解JVM】:OutOfMemoryError异常总结
JVM内存区域中,除了程序计数器外,其他几个运行时区域都有可能发生OutOfMemoryError(OOM)异常。本文对OOM异常进行总结,通过代码验证JVM规范中描述的运行时区域存储的内容;了解可能导致这些区域OOM异常的代码,能够在工作中根据异常代码对内存哪一出区域进行定位。基于Sun的HotSpot虚拟机,在Eclipse中Run/Arguments中可以进行虚拟机启动参数的设置,这些参数对实原创 2016-05-05 13:21:56 · 13955 阅读 · 1 评论 -
【深入理解JVM】:类加载器与双亲委派模型
类加载器加载类的开放性类加载器(ClassLoader)是Java语言的一项创新,也是Java流行的一个重要原因。在类加载的第一阶段“加载”过程中,需要通过一个类的全限定名来获取定义此类的二进制字节流,完成这个动作的代码块就是类加载器。这一动作是放在Java虚拟机外部去实现的,以便让应用程序自己决定如何获取所需的类。虚拟机规范并没有指明二进制字节流要从一个Class文件获取,或者说原创 2016-05-06 19:09:25 · 72811 阅读 · 22 评论