
jvm
文章平均质量分 85
OverrideRe
即将毕业的菜鸟java开发
展开
-
Java Class文件结构
平台无关性和语言无关性Java在刚刚诞生的时候提出过一个宣传口号:“一次编写,到处运行”,这句话充分表达了软件开发人员对冲破平台界限的渴求。“与平台无关”的理想最终实现在操作系统的应用层上:Sun公司及其他虚拟机提供商发布了许多可以运行在各种不同平台上的虚拟机,这些虚拟机都可以载入和执行同一种平台无关的字节码,从而实现了程序的“一次编写,到处运行”。 各种不同平台的虚拟机与所有平台都统一使用的程序原创 2017-04-06 22:31:03 · 1646 阅读 · 0 评论 -
虚拟机类加载机制
概述前两篇我们了解了Class文件存储格式和Java虚拟机的内存区域,在Class文件中描述的各种信息最终都需要加载到虚拟机中之后才能运行和使用的,name虚拟机是如何加载这些Class文件的?Class文件中的信息进入到虚拟机之后会发生什么变化?这些都是接下来要讲的东西。类加载的时机类从被加载到虚拟机内存中开始,到卸载出内存位置,它的整个生命周期包括:加载(Loading)、验证(Verifica原创 2017-04-07 20:58:33 · 506 阅读 · 0 评论 -
虚拟机中的方法调用与执行
概述方法调用不是方法执行,唯一的任务就是确定被调用方法的版本(即确定调用哪一个方法),暂时不涉及方法内部的执行过程。解析所有方法调用在Class文件里面都是一个常量池的符号引用,在类加载解析阶段,会将其中的一部分符号引用转化为直接饮用,这种转化的前提是:方法在程序真正运行之前就有一个可确定的调用版本,并且这个方法方法的调用版本在运行期是不可变的。意思就是,调用的方法在程序代码被编译成Class文件的原创 2017-04-08 16:37:04 · 1676 阅读 · 0 评论 -
Java内存区域与HotSpot虚拟机对象
运行时数据区域程序计数器(Program Counter Register)程序计数器是一块很小的内存空间,可以看做是当前线程所执行的字节码的行号指示器,存储着当前执行的字节码指令,通过改变这里的值来进行指令的调用。 在多线程中每个线程执行的命令都不相同且互不影响,所以程序计数器是线程私有的,这类内存区域“线程私有”的内存。 如果线程正在执行的是一个Java方法,这个计数器存储的是正在执行的虚拟原创 2017-04-07 15:28:18 · 612 阅读 · 0 评论 -
垃圾收集器
垃圾收集器与内存分配策略概述垃圾收集器(Garbage Collection,GC)需要解决的三个问题: 哪些内存需要回收? 什么时候回收? 如何回收? 前面介绍了Java内存运行时区域的各个部分,其中程序计数器、虚拟机栈和本地方法栈三个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。因此这几个区域的内存分配和回收都具备确定性,不需要过多考虑回收的问题。而原创 2017-04-13 21:28:44 · 2200 阅读 · 1 评论 -
Java内存模型与线程
Java内存模型Java虚拟机在规范中视图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。主内存与工作内存Java内存模型的主要目标是定义程序中各个变量的访问规则,此处的变量(Variables)包括实例字段、静态字段和构成数组对象的元素,但不包括局部变量和方法参数,因为后者是线程原创 2017-04-15 21:41:12 · 1413 阅读 · 1 评论 -
线程安全与锁优化
线程安全与锁优化线程安全《Java Concurrency In Practice》的作者Brian Goetz对“线程安全”有一个比较恰当的定义:“当多个线程访问同一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方法进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的”java语言中的线程安全这里讨论的线程安全,原创 2017-04-17 22:54:49 · 2336 阅读 · 1 评论