深入理解Java虚拟机
JVM使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够“一次编译,到处运行”的原因。
pengjunlee
不学自知,不问自晓,古今行事,未之有也。
展开
-
深入理解Java类加载器(1):Java类加载原理解析
目录1 基本信息2 Java虚拟机类加载器结构简述2.1 JVM三种预定义类型类加载器2.2 类加载双亲委派机制介绍和分析2.3 类加载双亲委派示例3 java程序动态扩展方式3.1 调用java.lang.Class.forName(…)加载类3.2 用户自定义类加载器4 常见问题分析4.1 由不同的类加载器加载的指定类还是相同的类型吗?4.2 在代码...转载 2017-05-21 18:26:29 · 49923 阅读 · 0 评论 -
深入理解Java类加载器(2):线程上下文类加载器
目录1 线程上下文类加载器2 何时使用Thread.getContextClassLoader()?3 类加载器与Web容器4 类加载器与OSGi总结1 线程上下文类加载器 线程上下文类加载器(context class loader)是从 JDK 1.2 开始引入的。类 java.lang.Thread中的方法 getContextClassLoader()和 se...转载 2017-05-20 17:14:45 · 48284 阅读 · 1 评论 -
深入理解Java虚拟机--虚拟机类加载机制
目录类加载的时机类加载的过程加载验证准备解析初始化类加载器类与类加载器双亲委派模型参考书籍:《深入理解Java虚拟机——JVM高级特性与最佳实践(第2版)》虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、 转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。类加载的时机类从被加载到虚拟机...原创 2017-05-19 01:57:30 · 57517 阅读 · 0 评论 -
深入理解Java虚拟机--虚拟机字节码执行引擎
目录运行时栈帧结构局部变量表操作数栈动态连接方法返回地址方法调用解析分派静态分派动态分派单分派与多分派基于栈的解释器执行过程参考书籍:《深入理解Java虚拟机——JVM高级特性与最佳实践(第2版)》知识点回顾:javac编译器通过对程序代码进行词法分析、语法分析、生成抽象语法树、遍历抽象语法树等复杂的编译过程,最终,将程序代码变成了Class...原创 2017-05-19 23:35:48 · 57924 阅读 · 0 评论 -
深入理解Java虚拟机--Java对象的内存结构
目录对象内存结构没有继承的对象属性排布有继承的对象属性排布如何计算对象大小创建一个含有premain()方法的Java 类。将创建好的Java类打成一个jar包修改JVM启动配置测试样例参考书籍:《Java特种兵(上册)》对象内存结构Class文件以字节码的形式存储在方法区当中,用来描述一个类本身的内存结构。当使用Class文件新建对象时,对象实例的...原创 2017-05-25 23:09:08 · 47315 阅读 · 0 评论 -
深入理解Java虚拟机--Java内存模型与线程
目录硬件的效率与一致性Java内存模型内存间交互操作对于volatile型变量的特殊规则对于long和double型变量的特殊规则先行发生原则参考书籍:《Java特种兵(上册)》硬件的效率与一致性众所周知,现代计算机的运算速度已经远高于它的存储和通信子系统的速度,并且计算机中绝大多数的运算任务都不可能只靠处理器“计算”就能完成,处理器至少要与内存交互,如读取...原创 2017-06-03 19:03:15 · 41927 阅读 · 1 评论 -
深入理解Java虚拟机--JVM内存模型
目录一、运行时数据区域1、程序计数器2、Java 虚拟机栈3、本地方法栈4、Java 堆5、方法区6、运行时常量池7、直接内存二、OutOfMemoryError异常1、Java堆溢出2、虚拟机栈和本地方法栈溢出3、方法区和运行时常量池溢出4、本机直接内存溢出参考书籍:《深入理解Java虚拟机——JVM高级特性与最佳实践(第2版)》Jav...原创 2017-05-13 23:10:24 · 44216 阅读 · 6 评论 -
深入理解Java虚拟机--垃圾收集器(一)
目录“存活”or“死去”1、 引用计数算法2、 根搜索算法再谈引用死里逃生----finalize()方法回收方法区参考书籍:《深入理解Java虚拟机——JVM高级特性与最佳实践(第2版)》Java语言出来之前,程序开发更多的是使用C或者C++语言,然而在C或者C++语言中存在一个很大的矛盾:创建对象时要不断地调用对象的构造方法来为对象开辟空间,对象用完之后又需...原创 2017-05-14 22:15:16 · 41544 阅读 · 0 评论 -
深入理解Java虚拟机--垃圾收集器(二)
目录垃圾收集算法标记-清除(Mark-Sweep)算法复制(Coping)算法标记-整理(Mark-Compact)算法分代收集(Generational Collection)算法垃圾收集器Serial收集器ParNew收集器Parallel Scavenge收集器Serial Old收集器Parallel Old收集器CMS收集器G1收集器...原创 2017-05-15 19:14:02 · 62798 阅读 · 0 评论 -
深入理解Java虚拟机--性能监控与故障处理工具
目录jps:虚拟机进程状况工具jstat:虚拟机统计信息监视工具jinfo:Java配置信息工具jmap:Java内存映像工具jhat:虚拟机堆转储快照分析工具jstack:Java堆栈跟踪工具参考书籍:《深入理解Java虚拟机——JVM高级特性与最佳实践(第2版)》SUN公司在JDK的bin目录中为Java开发人员提供的命令行工具,除了大家熟知的“java.exe...原创 2017-05-16 23:31:33 · 40797 阅读 · 0 评论 -
深入理解Java虚拟机--类文件结构
目录Class类文件的结构魔数与Class文件的版本常量池访问标志类索引、 父类索引与接口索引集合字段表集合方法表集合属性表集合Code属性Exceptions属性LineNumberTable属性LocalVariableTable属性ConstantValue属性参考书籍:《深入理解Java虚拟机——JVM高级特性与最佳实践(第2版)》...原创 2017-05-18 00:20:40 · 43241 阅读 · 0 评论 -
深入理解Java虚拟机--javac命令
目录指定编译源文件命令选项非标准选项 -Xjavac命令用于将 .java 源文件编译成 .class 字节码文件,在windows命令行中使用"javac -help"命令查看其用法:语法格式: javac <options> <source files>options # 命令行选项,可指定多个...原创 2017-05-02 14:39:50 · 42357 阅读 · 0 评论 -
深入理解Java虚拟机--字节码指令表
《深入理解Java虚拟机JVM高级特性与最佳实践》附录B 虚拟机字节码指令表字节码 助记符 指令含义 0x00 nop 什么都不做 0x01 aconst_null 将null推送至栈顶 0x02 iconst_m1 将int型-1推送至栈顶 0x03 iconst_0 将int型0推送至栈顶 0x04 ic...原创 2017-05-07 00:31:14 · 46455 阅读 · 0 评论