JVM
time_hunter
这个作者很懒,什么都没留下…
展开
-
JVM Knowleadge-垃圾回收GC Roots Tracing
本文参考了周志明的《深入理解Java虚拟机:JVM高级特性与最佳实践》,这本书写的非常好!极力推荐!》 JVM中对内存进行回收时,需要判断对象是否仍在使用中,可以通过GC Roots Tracing辨别。 定义: 通过一系列名为”GCRoots”的对象作为起始点,从这个节点向下搜索,搜索走过的路径称为ReferenceChain,当一个对象到GCRoots没有任何Refere原创 2013-10-07 22:04:35 · 9110 阅读 · 3 评论 -
JVM Knowledges-运行时数据区
Runtime Data Area 方法区 JavaHeap JavaStack 程序计数器 本地方法区 存储数据 用于存储已被虚拟机加载的类信息,常量,静态变量,即使编译器编译后的代码等数据 所有的对象实例以及数组都要在堆上分配 虚拟机栈描述的是Java方法执行的内存模型 当前线程所执行原创 2013-10-29 23:08:17 · 525 阅读 · 0 评论 -
JVM Knowledges-垃圾回收算法
本文参考自周志明的《深入理解java虚拟机》,这本书写的非常好!非常推荐! 注意:各个平台的算法实现不尽相同。 1.Mark-Sweep算法(标记清除) 步骤: 首先标示需要清除的对象。 标记完成之后,统一回收掉被标记的对象。 缺点: 效率问题:标记清除过程效率都不高。 标记清除之后会产生大量的不连续的内存碎片。(空间碎片太多导致无法找到连续原创 2013-11-02 00:13:00 · 532 阅读 · 0 评论 -
JVM Knowledges-引用分类
本文参考了周志明的《深入理解Java虚拟机》,书写的非常好! 预先需要知道的 判定对象的存活与reference有关。 (狭隘的)引用到得对象不会被垃圾回收。 问题: 其实有一些对象我们希望当内存空间还足够时,则保留。当内存在进行垃圾收集以后还很紧张的时候,可以抛弃这些对象。很多对象的缓存功能都符合这样的场景。 JDK1.2之后,Java对引用概念进行了扩充,分原创 2013-10-23 21:04:25 · 484 阅读 · 0 评论 -
JVM Knowledges-类加载器
JVM的设计团队将类加载阶段的“通过一个类的全限定名获取此类的二进制字节流”这个动作放到JVM外部去实现了,以便用户自己去决定如何去获取所需要的类。 类的唯一性由类本身以及加载它的类加载器确定。即,比较两个类是否相等,那么这两个类是由同一个类加载器加载的前提下才有意义。原创 2013-10-28 22:20:31 · 448 阅读 · 0 评论 -
JVM Knowledges-类的 <clinit> 与 对象的<init> 对比
原创 2013-10-27 19:46:46 · 927 阅读 · 0 评论 -
JVM Knowledges-类型的初始化阶段
本文参考了周志明的《深入理解java虚拟机》,写的非常好! 类型初始化的时机-主动使用: 使用new实例化一个对象的时候。调用一个类的静态方法。调用一个类的静态字段(非编译期已知的常量)。使用发射调用其相应方法的时候。带有main方法的类。调用一个类的子类,父类还没有初始化。 不会引起类型初始化的时机-被动使用: 调用一个类的static final编译原创 2013-10-24 23:33:52 · 645 阅读 · 0 评论 -
JVM Knowledges-类型的生命周期
JVM中,类型的生命周期如下:原创 2013-10-13 23:34:47 · 467 阅读 · 0 评论 -
JVM Knowleadge-字节码文件的构造
本文参考了周志明的《深入理解Java虚拟机:JVM高级特性与最佳实践》,这本书写的非常好!极力推荐! 字节码平台无关性: Java的一次编译到处运行即要求所载入的和执行同一种平台无关的字节码。各个平台的虚拟机与所有平台都统一采用字节码(ByteCode)存储格式。 有很多语言可以在JVM上执行。而语言无关性的基础是:JVM和字节码存储格式。 JVM不关心Class的来源是什原创 2013-10-06 23:20:53 · 1015 阅读 · 0 评论 -
JVM Knowledges-Class Loader
JVM的设计团队将类加载阶段的“通过一个类的全限定名获取此类的二进制字节流”这个动作放到JVM外部去实现了,以便用户自己去决定如何去获取所需要的类。 类的唯一性由类本身以及加载它的类加载器确定。即,比较两个类是否相等,那么这两个类是由同一个类加载器加载的前提下才有意义。原创 2013-11-02 23:47:59 · 527 阅读 · 0 评论