JVM
limerick1718
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
对象分配、布局和访问
对象的创建Java是一门面向对象的编程语言,在Java程序的运行过程中无时无刻都有对象被创建出来。对象(限于普通Java对象,不包括数组和Class对象等)的创建过程:类加载检查当虚拟机遇到一条new指令时,①首先会去检查这个指令的参数是否能在常量池(用于存放编译期生成的各种字面量和符号引用)中定位到一个类的符号引用,②并且检查这个这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须③原创 2017-02-02 13:36:02 · 306 阅读 · 0 评论 -
垃圾回收
程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭,因此在这几个区域内就不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随者回收了。而Java堆和方法区则不一样,一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也可能不一样,我们只有在程序处于运行期间时才能知道会创建哪些对象,这部分内存的分配和回收都是动态的,垃圾收集器所关注的就是这部分内存。对原创 2017-02-02 16:16:59 · 202 阅读 · 0 评论 -
JDK的命令行工具
我……就是这么懒……JDK的命令行工具转载 2017-02-02 19:18:12 · 230 阅读 · 0 评论 -
虚拟机类加载机制
概述虚拟机的类加载机制:虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。在Java语言中,类型的加载、连接和初始化过程都是在程序运行期间完成的:增大了类加载时的开销,但提供了高度的灵活性(可以动态扩展的语言特性):面向接口的应用程序,可以等到运行时再指定其实际的类;可以通过Java预定义和自定义类加载器,让一个本地程序可原创 2017-02-03 10:45:43 · 249 阅读 · 0 评论 -
虚拟机字节码执行引擎
我们知道,javac编译器完成了程序代码经过词法分析、语法分析到抽象语法树、再遍历语法树生成线性的字节码指令流的过程。而字节码文件再经过加载、验证、准备、解析、初始化等阶段才能被使用。字节码执行引擎正是执行了这样的过程:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果。运行时栈帧结构栈帧(stack frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数原创 2017-02-03 18:18:20 · 244 阅读 · 0 评论 -
虚拟机字节码执行引擎的方法调用
方法调用的主要任务就是确定被调用方法的版本(即调用哪一个方法),该过程不涉及方法具体的运行过程。class文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在class文件中存储的都是符号引用,而不是方法在实际运行时内存布局中的入口地址,这使得java有着更强大的动态扩展能力,但也使得java方法的调用过程变得相对复杂起来,需要在类的加载甚至运行期间才能确定目标方法的直接引用。 按照调用方式原创 2017-02-03 20:31:43 · 318 阅读 · 0 评论 -
动态类型的语言支持--invokedynamic
invokedynamic是为了实现lambda表达式做的技术准备。动态类型语言动态类型语言的关键特征是它的类型检查的主体过程是在运行期而不是编译期进行的,例如:APL、Clojure、Erlang、Groovy、JavaScript、Jython、Lisp、Lua、PHP、Prolog、Python、Ruby、Smalltalk和Tcl等等。那相对地,在编译期就进行类型检查过程的语言,如C++和J原创 2017-02-04 08:47:54 · 434 阅读 · 0 评论
分享