Java虚拟机规范(JavaSE7) 笔记】的更多相关文章

1.1 class文件格式 编译后被Java虚拟机所执行的代码使用了一种平台中立的二进制格式来表示,并且经常以文件的形式来存储,这种格式称为class文件格式.class文件格式中精确的定义了类与接口的表示形式. class文件是被java虚拟机所执行的代码. 1.2 数据类型 原始数据类型:数值类型.boolean类型.returnAddress类型. 数值类型:整数类型.浮点类型. 整数类型:byte(8位有符号二进制补码整数,-128(-2^7)- 127(2^7-1)).short(16…
之前在学习ASM时做了一篇笔记<Java字节码操纵框架ASM小试>,笔记里对类文件结构做了简介,这里我们来回顾一下. Class类文件结构 在Java发展之初设计者们发布规范文档时就刻意把Java的规范拆分成了Java语言规范和Java虚拟机规范.而Java可以跨平台主要是靠不同平台的虚拟机来实现的,而在不同平台的虚拟机使用了统一的程序储存格式——字节码(ByteCode)即Class文件. 由于字节码格式(Class文件)是统一的,所以在Java语言之外发展出了一大批在Java虚拟机上运行的…
<深入理解Java虚拟机>学习笔记 一.走近Java JDK(Java Development Kit):包含Java程序设计语言,Java虚拟机,JavaAPI,是用于支持 Java 程序开发的最小环境. JRE(Java Runtime Environment):包含Java SE API 子集,Java 虚拟机,是支持Java程序运行的标准环境. Java的优点: (1)提供了相对安全的内存管理和访问机制,避免了绝大部分的内存泄露和指针越界问题. (2)实现了热点代码检测和运行时编译及优…
xl_echo编辑整理.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!! --- > 以下内容摘抄自<_深入理解Java虚拟机_JVM高级特性与最佳实践 第2版_220_>,博主完全尊重书籍原创,只是学习笔记摘抄部分,由于不是原创,不支持转载.如有侵权请联系博主(微信号:t2421499075). #### Java能够被广泛认可的优点: - 结构严谨 - 面向对象编程的思想 - 跨平台的便利…
<深入理解 Java 虚拟机>学习笔记 -- 内存区域 运行时数据区域 主要分为 6 部分: 程序计数器 虚拟机栈 本地方法栈 Java 堆 方法区 如图所示: 1. 程序计数器(线程私有) 程序计数器是当前线程所执行字节码的行号指示器 字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令 为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器 执行 Java 方法,计数器记录的是正在执行的虚拟机字节码指令的地址:执行的是 Native 方法,计数器…
一.运行时数据区域 1.程序计数器是线程的私有空间,每个线程都有.针对线程执行的是Java代码还是Native代码有两种取值,Java代码时:虚拟机字节码指令的地址:Native代码时:计数值为Undefined.不可能出现OutOfMemeoryError情况. 2.Java虚拟机栈是线程的私有空间,每个线程都有.栈中局部变量表的部分是在编译期间完成分配的,每个局部变量空间的大小为32为长度.栈的深度太长,抛出StackOverflowError异常.栈可扩展时,如果内存不够,会抛出OutOf…
C/C++等纯编译语言从源码到最终执行一般要经历:编译.连接和运行三个阶段,连接是在编译期间完成,而java在编译期间仅仅是将源码编译为Java虚拟机可以识别的字节码Class类文件,Java虚拟机对中Class类文件的加载.连接都在运行时执行,虽然类加载和连接会占用程序的执行时间增加性能开销,但是却可以为java语言带来高度灵活性和扩展性,java的针对接口编程和类加载器机制实现的OSGi以及热部署等就是利用了运行时类加载和连接的特性,java的Class类在虚拟机中的生命周期如下: 上图中加…
Java虚拟机类加载过程是把Class类文件加载到内存,并对Class文件中的数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的java类型的过程. 在加载阶段,java虚拟机需要完成以下3件事: a.通过一个类的全限定名来获取定义此类的二进制字节流. b.将定义类的二进制字节流所代表的静态存储结构转换为方法区的运行时数据结构. c.在java堆中生成一个代表该类的java.lang.Class对象,作为方法区数据的访问入口. Java虚拟机的类加载是通过类加载器实现的, Java中…
Java虚拟机的内存区域中,程序计数器.虚拟机栈和本地方法栈三个区域是线程私有的,随线程生而生,随线程灭而灭:栈中的栈帧随着方法的进入和退出而进行入栈和出栈操作,每个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这三个区域的内存分配和回收都具有确定性.垃圾回收重点关注的是堆和方法区部分的内存. 常用的垃圾回收算法有: (1).引用计数算法: 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1:当引用失效时,计数器值就减1:任何时刻计数器都为0的对象就是不再被使用的,垃…
java虚拟机规范规定的java虚拟机内存其实就是java虚拟机运行时数据区,其架构如下: 其中方法区和堆是由所有线程共享的数据区. Java虚拟机栈,本地方法栈和程序计数器是线程隔离的数据区. (1).程序计数器: 是一块较小的内存空间,其作用可以看作是当前线程所执行的字节码的行号指示器,字节码解析器工作时通过改变程序计数器的值来选取下一条需要执行的字节码指令.程序的分支.循环.跳转.异常处理以及线程恢复等基础功能都是依赖程序计数器来完成. Java虚拟机的多线程是通过线程轮流切换并分配处理器…