Java虚拟机 虚拟机字节码执行引擎 所有的Java虚拟机的执行引擎都是一致的:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果。 运行时栈帧结构 用于支持虚拟机 进行方法调用和方法执行 的数据结构,是虚拟机栈的栈元素。 每一个方法从调用开始到执行完成的过程,都对应一个栈帧在虚拟 ...
分类:
编程语言 时间:
2018-06-20 16:41:43
阅读次数:
177
Java虚拟机 线程安全和锁优化 线程安全 线程安全:当多线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那么这个对象就是线程安全的。 Java中,线程安全体现在多个线程访问同一个 ...
分类:
编程语言 时间:
2018-06-20 16:40:20
阅读次数:
181
虚拟机类加载机制 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 类的生命周期如下: 其中验证、准备、解析三个阶段属于 连接 过程。解析可以发生在初始化之后,这是因为Java支持 动态绑定 , ...
分类:
编程语言 时间:
2018-06-20 16:33:40
阅读次数:
168
Java虚拟机 内存模型与线程 高速缓存:处理器要与内存交互,如读取、存储运算结果,而计算机的存储设备和处理器的运算速度差异巨大,所以加入一层读写速度和处理器接近的高速缓存来作为内存和处理器之间的缓冲——将运算所需数据复制到缓存中,使得运算能快速进行;当运算结束后再将缓存同步回内存中,这样处理器无需 ...
分类:
编程语言 时间:
2018-06-20 16:33:27
阅读次数:
184
浅析java基本程序 1.包 package package语法:包名.类名 ;包名的写法规范:所有字母需小写。 当然也可以采用静态导入 例如 import static java.lang.Math.* 有包的对象不能使用默认包的对象。 import java.lang 包是java虚拟机自动导入 ...
分类:
编程语言 时间:
2018-06-19 21:25:57
阅读次数:
176
当一个类被加载以后,Java虚拟机会自动产生一个class对象。通过这个Class对象我们就能获得加载到虚拟机当中Class对象对应的方法、成员以及构造方法的的声明和定义等信息。 获取Class对象共有以下三种方法。 第一种 类名.class 运行结果: 第二种 类名 对象名 = new 类名(); ...
分类:
编程语言 时间:
2018-06-19 18:27:14
阅读次数:
164
一、为什么在有java虚拟机的情况下还需要编译器? 为了弥补java程序运行速度慢的缺陷,通过编译,可以提高java程序的运行速度,但java编译器只是确定一些铁定不会变的类型,同时允许存在一些动态类型。我觉得可以说java是在编译型语言和解释性语言之间做了权衡的语言。 二、 ...
分类:
其他好文 时间:
2018-06-19 10:33:59
阅读次数:
176
在Java虚拟机中,每个对象(object和class)通过某种逻辑关联监视器,每个监视器和一个对象引用相关联,为了实现监视器的互斥功能,每个对象都关联着一把锁。 一旦方法或者代码块被synchronized修饰,那么这个部分就放入了监视器的监视区域,确保一次只有一个线程执行该部分代码,线程必须在获 ...
分类:
编程语言 时间:
2018-06-18 23:20:50
阅读次数:
248
1 Java虚拟机的生命周期 一个运行时的Java虚拟机实例的天职是:负责运行一个java程序。当启动一个Java程序时,一个虚拟机实例也就诞生了。当该程序关闭退出,这个虚拟机实例也就随之消亡。如果同一台计算机上同时运行三个Java程序,将得到三个Java虚拟机实例。每个Java程序都运行于它自己的 ...
分类:
编程语言 时间:
2018-06-18 18:19:07
阅读次数:
144
1. Sun HotSpot VM,是JDK和Open JDK中自带的虚拟机,也是目前使用范围最广的Java虚拟机。 2.内存分布图 java虚拟机主要分为以下几个区: 方法区: 有时候也成为永久代,在该区内很少发生垃圾回收,但是并不代表不发生GC,在这里进行的GC主要是对方法区里的常量池和对类型的... ...
分类:
其他好文 时间:
2018-06-18 13:27:31
阅读次数:
179