随笔分类 -  JVM

摘要:在部分商用虚拟机中,Java程序最初是通过解释器进行解释执行的,当虚拟机发现某个方法或代码块运行地特别频繁,就会把这些代码块认定为“热点代码”,为了提高热点代码的执行效率,在运行时,虚拟机会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(JIT编译器 阅读全文
posted @ 2017-07-18 08:36 丨核桃牛奶 阅读(215) 评论(0) 推荐(0)
摘要:虚拟机和物理机,二者都有代码执行能力,区别是物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上,而虚拟机的执行引擎可以自己实现,因此可以自定义指令集和执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。 执行引擎是java虚拟机最为核心的组成部分,不同虚拟机实现里,执行引 阅读全文
posted @ 2017-07-14 17:16 丨核桃牛奶 阅读(302) 评论(0) 推荐(0)
摘要:前言 虚拟机类加载机制:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 Java中,类型的加载和连接过程都是在程序运行期间完成的,这会在类加载时候增加一些性能开销,但是为Java依赖运行期动态 阅读全文
posted @ 2017-07-12 09:47 丨核桃牛奶 阅读(180) 评论(0) 推荐(0)
摘要:五、类文件结构 代码编译的结果从本地机器码变为字节码 JAVA编译器可以把java代码编译成存储字节码的Class文件 Class文件是一组以8位字节为基础单位的二进制流,是一种类似C语言结构体的伪结构,只有两种数据类型:无符号数和表 Class文件的组成 1.魔数 身份识别 +版本号 2.常量池 阅读全文
posted @ 2017-07-10 14:37 丨核桃牛奶 阅读(150) 评论(0) 推荐(0)
摘要:垃圾收集 程序计数器、虚拟机栈、本地方法栈三个区域随线程生灭,栈中的栈帧随方法开始于结束执行进栈与出栈,这几个区域不用过多考虑回收的问题,方法结束或线程结束,内存自然就跟随着回收了 而JAVA堆和方法区的分配和回收都是动态的,而垃圾收集器关注的就是这部分的内存。 判断对象是否存活的算法 1.引用计数 阅读全文
posted @ 2017-07-10 14:36 丨核桃牛奶 阅读(138) 评论(0) 推荐(0)
摘要:一、早期(编译器)优化 语法糖 c#和java的泛型截然不同看似相同,c#是真实的泛型 编译运行一直存在 List<string> 和List<int> 就完全是两个类 而Java中 是伪泛型采用类型擦除的方法实现泛型 List<Integer> List<String> 运行期就是同一个类 编译期 阅读全文
posted @ 2016-08-17 21:02 丨核桃牛奶 阅读(126) 评论(0) 推荐(0)
摘要:一、JAVA运行时的数据区 程序计数器:可以看做是当前线程所执行的字节码的行号指示器,为了线程切换后能恢复到正确的执行位置 线程私有 除了此区域其他区域都会发生OutOfMemoryError JAVA虚拟机栈 线程私有 生命周期与线程相同 每个方法执行的时候都会创建一个栈帧用于存储局部变量表(基本 阅读全文
posted @ 2016-08-12 09:41 丨核桃牛奶 阅读(238) 评论(0) 推荐(0)