
JVM虚拟机
chinaemerson
java大学学习中
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java内存区域之运行时数据区域
根据《Java虚拟机规范(第二版)》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域 程序计数器 作用可以看做是当先线程所执行的字节码的信号指示器。 每一条JVM线程都有自己的程序计数器(“线程私有”内存); 在任意时刻,一条JVM线程只会执行一个方法的代码。该方法称为该线程的当前方法(Current Method); ...原创 2013-05-07 10:01:24 · 145 阅读 · 0 评论 -
JVM配置参数简单记录
在出现内存溢出异常时Dump内存堆转储快照以便事后进行分析: -XX:+HeapDumpOnOutOfMemoryError 设置堆大小:将堆的最小值 -Xms参数与最大值 -Xmx参数设置为一样即可避免堆自动扩展。 设置虚拟机栈大小: -Xss最小值 设置方法区容量:-XX:PermSize -XX:MaxPermSize 最大方法区大小 ...原创 2013-05-07 20:19:02 · 110 阅读 · 0 评论 -
Java垃圾收集之对象引用
引用计算方法 Java中没有采用引用计数方法管理内存,最主要的原因是此方法很难解决对象间的循环引用问题。 Java中采用的引用管理方法为:根搜索算法。基本思路是通过一系列的名为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,所走过的路径称为“引用链(Reference Chain)”。当一个对象与其GC Roots之间没有任何通路的时候,...原创 2013-05-07 20:35:47 · 132 阅读 · 0 评论 -
Java垃圾收集之垃圾收集算法
几种基本的垃圾收集算法 标记-清除算法 顾名思义,此方法涉及到两个步骤:标记和清除。首先标记出所有需要回收的对象,在标记完成后统一完成回收。标记的过程在《Java垃圾收集之对象引用》中已经介绍过。此方法是最基础的垃圾收集算法,后续的收集算法均基于此方法改进而得来。 它的缺点主要有两个,一个是效率问题,标记和清理的过程执行效率都不高;第二是清理过后容...原创 2013-05-08 20:02:47 · 150 阅读 · 0 评论 -
内存分配与回收策略
几种常见的内存分配策略 对象优先在Eden分配 大多数情况下,对象优先在Eden区分配,当Eden区没有足够的内存空间时,虚拟机发起一次Minor GC(指发生在新生代的垃圾收集动作,回收速度较快),如果在这次Minor GC执行的时候,发现Eden空间存活的对象大小超过了Survivor空间能够承受的大小,就只好通过分配担保机制将对象提前转移到老年代。 -XX:Surv...原创 2013-05-09 20:04:51 · 126 阅读 · 0 评论 -
虚拟机类加载机制(一)类加载时机
类从被加载到虚拟机内存中开始,直到卸载出内存为止,它的整个生命周期包括了:加载、验证、准备、解析、初始化、使用和卸载这7个阶段。其中,验证、准备和解析这三个部分统称为连接(linking) 其中,加载、验证、准备、初始化和卸载这五个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班的“开始”(仅仅指的是开始,而非执行或者结束,因为这些阶段通常都是互相交叉的混合进行,通常会在一...原创 2013-05-22 13:24:08 · 145 阅读 · 0 评论 -
虚拟机类加载机制(二)类加载过程
加载 在加载阶段,虚拟机需要完成以下三件事: 1、通过类的全限定名来获取定义此类的二进制字节流。但规范并没有指明二进制字节流要从一个Class文件中获取,所以,在Java的发展历史中出现了很多字节流的提供方式:zip包,网络(例如applet),动态代理技术,其他文件(如jsp); 2、将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构; 3、在Java堆中生成一...原创 2013-05-22 20:12:32 · 162 阅读 · 0 评论 -
虚拟机类加载机制(三)类加载器
定义 实现了“通过一个类的全限定名来获取描述此类的二进制字节流”动作的代码模块被称为“类加载器”。 对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性。换句话说,如果要比较两个类是否相同,只有在这两个类都是由同一个类加载器加载的前提下才有意义。否则,即使这两个类是出自同一份Class文件,但由不同的加载器加载,那么这两个类必定不相等(包含Clas...原创 2013-05-24 09:24:49 · 188 阅读 · 0 评论 -
虚拟机字节码执行(一)方法调用
在Java源文件编译为Class文件时,并不包含传统编译中的“连接”步骤。即一切方法调用在Class文件中都只是符号引用,而不是真正的指向方法在实际运行内存布局中的入口地址(相当于类加载过程中“解析”步骤中的直接引用)。因此才给Java带来强大的动态拓展能力,但也使Java的方法调用过程变得复杂,需要类在加载期间甚至在运行期间才能确定调用目标方法的直接引用。 ...原创 2013-05-27 21:20:03 · 231 阅读 · 0 评论