JVM
wzEminem
这个作者很懒,什么都没留下…
展开
-
对象的创建:类的初始化与实例化
一、Java对象创建时机:一个对象在可以被使用之前必须要被正确地实例化。 1). 使用new关键字创建对象 2). 使用Class类的newInstance方法(反射机制) 3). 使用Constructor类的newInstance方法(反射机制):使用newInstance方法的这两种方式创建对象使用的就是Java的反射机制,事实上Class的newInstance方法内部调用的也是...原创 2019-07-03 12:07:58 · 575 阅读 · 0 评论 -
JVM类加载器
类加载器的任务是根据一个类的全限定名来读取此类的二进制字节流到JVM中,然后转换为一个与目标类对应的java.lang.Class对象实例,在虚拟机提供了3种类加载器,引导(Bootstrap)类加载器、扩展(Extension)类加载器、系统(System)类加载器(也称应用类加载器) 启动(Bootstrap)类加载器启动类加载器主要加载的是JVM自身需要的类,这个类加载使用C++语言实现的...原创 2019-07-03 12:08:10 · 192 阅读 · 0 评论 -
垃圾收集器(GC)与内存分配策略
判定对象存活(可达性分析算法):这个算法的基本思路就是通过一系列名为GC Roots的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的,下图对象object5, object6, object7虽然有互相判断,但它们到GC Roots是不可达的,所以它们将会判定为是可回收对...原创 2019-07-03 12:08:33 · 201 阅读 · 0 评论 -
Java内存区域
1、运行时数据区:java虚拟机在执行JAVA程序过程中会将他管理的内存区域进行划分程不同的数据区域: 程序计数器:当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的命令。在多线程时,每个线程都有独立的程序计数器,各条线程的计数器互不影响,独立存储。 Java虚拟机栈:线程私有,生命周期和线程相同。是java方法执行的内存模型:...原创 2019-07-03 12:08:48 · 125 阅读 · 0 评论 -
类加载
虚拟机将描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终可以形成被虚拟机直接使用的Java类,这就是虚拟机的类加载机制。类型( class文件:类或者接口,一串二进制字符流)的加载、连接和初始化过程都是在程序运行期间完成的。 类加载的时机 类的整个生命周期:加载、检验、准备、解析、初始化、使用、卸载。验证、准备、解析统称为连接。加载、验证、准备、初始化和卸载这5...原创 2019-07-05 10:25:47 · 174 阅读 · 0 评论 -
JVM虚拟字节码执行
栈帧: jvm为每个新创建的线程都分配一个堆栈(在虚拟机栈中)。堆栈以帧为单位保存线程的状态。jvm对堆栈只进行两种操作:以帧为单位的压栈和出栈操作。栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区的虚拟机栈(Virtual Machine Stack)的栈元素。栈帧存储了方法的局部变量表,操作数栈,动态连接和方法返回地址等信息。第一个方法从...原创 2019-07-05 10:26:59 · 204 阅读 · 0 评论