摘要: 类加载的时机类从被加载到虚拟机内存开始,到卸载出内存为止,它的整个生命周期包括了:加载/验证/准备/解析/初始化/使用/卸载七个阶段。其中验证/准备和解析统称为连接(Linking)。 加载、验证、准备、初始化和卸载的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了 阅读全文
posted @ 2018-04-04 14:08 skorzeny 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 概述从外观上看起来,所有的 Java 虚拟机的执行引擎都是一致的:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果。主要从概念模型的角度来讲解虚拟机的方法调用和字节码执行。 运行时栈帧结构 栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机 阅读全文
posted @ 2018-04-04 14:08 skorzeny 阅读(122) 评论(0) 推荐(0) 编辑
摘要: Java内存模型 主内存与工作内存 Java内存模型主要目标:定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量(Variable)与Java编程中的变量略有区别,它包括实例变量/静态字段和构成数组对象的元素,不包括局部变量和方法参数(线程私有)。 阅读全文
posted @ 2018-04-04 14:08 skorzeny 阅读(1969) 评论(0) 推荐(0) 编辑
摘要: 线程安全 当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方法进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那么这个对象是线程安全的。 Java语言中的线程安全 这里讨论的线程安全,就限定于多个线程之间存在共享数据访问 阅读全文
posted @ 2018-04-04 14:08 skorzeny 阅读(749) 评论(0) 推荐(0) 编辑
摘要: 一 运行时数据区域 JVM在执行Java程序的过程中会把它管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间。 程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它的作用是当前线程所执行的字节码的行号指示器。在虚拟机的概念 阅读全文
posted @ 2018-04-04 14:07 skorzeny 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 引用计数算法——判断对象是否存活的算法 很多教科书判断对象是否存活的算法是这样的:给对象添加一个引用计数器,每当一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。 客观的说,引用计数算法(Referene Counting)的实现简单,判断 阅读全文
posted @ 2018-04-04 14:07 skorzeny 阅读(112) 评论(0) 推荐(0) 编辑