JVM类加载机制与对象的生命周期】的更多相关文章

转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6536048.html  虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终成为被虚拟机直接使用的Java对象,这就是JVM的类加载机制. Java天生的可动态扩展的语言特性就是依赖运行期的动态加载和动态连接实现的. 一:类的生命周期 类的生命周期包括7个部分:加载——验证——准备——解析——初始化——使用——卸载 其中,验证——准备——解析  称为连接阶段.除了解析外,…
我们在编写Java程序之后,会通过编译器得到一个class文件,这个class文件是如何与JVM进行配合的呢?类中的信息是如何变成JVM可以使用的Java类型呢?这些都是类加载机制做到的. 虚拟机把描述类的数据从class文件中加载到内存里,并对数据进行校验,转换解析和初始化,最终形成被虚拟机直接使用的Java类型,这就是类加载机制. 类的生命周期 一个类从加载进入内存到卸载出内存,一共经过以下几个生命周期. 加载 验证 准备 解析 初始化 使用 卸载 这篇文章主要说明前5个生命周期,也就是说主…
如题,本文的宗旨既是透过对象的生命周期,来梳理JVM内存结构及GC相关知识,并辅以AOP及双亲委派机制原理,学习不仅仅是海绵式的吸收学习,还需要自己去分析why,加深对技术的理解和认知,祝大家早日走上自己的"成金之路". Java对象的创建 本部分,从攻城狮编写.java文件入手,详解了编译.载入.AOP原理. 读过<程序员的自我修养>的朋友,对程序的编译及执行会有一个很清晰的认识:编译其实就是将人类能理解的代码文件转译为机器/CPU能执行的文件(包括数据段.代码段),而执…
1 JVM内存 分为“堆”.“栈”和“方法区”三个区域,分别用于存储不同的数据 1.1 堆 JVM在其内存空间开辟一个称为”堆”的存储空间,这部分空间用于存储使用new关键字所创建的对象. 1.2 栈 JVM在其内存空间开辟一个称为”栈”的存储空间,这部分空间用于存储程序运行时在方法中声明的所有局部变量. 1.3 方法区 方法区用于存放类的信息,Java程序运行时,首先会通过类装载器载入类文件的字节码信息,经过解析后将其装入方法区,类的各种信息(包括方法)都在方法区存储. 2 对象的生命周期 2…
前言 这一节我们来简单的介绍垃圾收集器,并学习垃圾标记的算法:引用计数算法和根搜索算法,为了更好的理解根搜索算法,会在文章的最后介绍Java对象在虚拟机中的生命周期. 1.垃圾收集器概述 垃圾收集器(Garbage Collection),通常被称作GC.提到GC,很多人认为它是伴随Java而出现的,其实GC出现的时间要比Java早太多了,它是1960诞生于MIT的Lisp. GC主要做了两个工作,一个是内存的划分和分配,一个是对垃圾进行回收.关于内存的划分和分配,目前Java虚拟机内存的划分是…
1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构.类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口. 类加载器并不需要等到某个类被“首次主动使用”时再加载它,JVM规范允许类加载器在预料某个类将要被使用时就预先加载它,如果在预先加载的过程中遇到了.c…
原文出自:http://www.cnblogs.com/ityouknow/p/5603287.html 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构.类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口. 类加载器并不需要等到某个类被“首次主动使用…
动态加载,本质上是通过JVM类加载机制将插件模块加载到宿主apk中,并通过android的相关运行机制,实现插件apk的运行.因此熟悉JVM类加载的机制非常重要. 类加载机制:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析.初始化,最终形成可以被虚拟机直接使用的Java类型 从类被加载到虚拟机内存中开始,到卸载出内存为止,类的生命周期包括加载(Loading).验证(Verification).准备(Preparation).解析(Resolution).初始化(In…
深入理解JVM类加载机制 简述:虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 下面我们具体来看类加载的过程: 类的生命周期 类从被加载到内存中开始,到卸载出内存,经历了加载.连接.初始化.使用四个阶段,其中连接又包含了验证.准备.解析三个步骤.这些步骤总体上是按照图中顺序进行的,但是Java语言本身支持运行时绑定,所以解析阶段也可以是在初始化之后进行的.以上顺序都只是说开始的顺序,实际过…
我们已经讲过 JVM 相关的很多常见知识点,感兴趣的朋友可以在我的往期文章中查看.接下来将继续为各位带来 JVM 类加载机制.关注我的公众号「Java面典」了解更多 Java 相关知识点. 类生命周期 一个 Java 类在 JVM 中的整个生命周期包括:加载(Loading).验证(Verification).准备(Preparation).解析(Resolution).初始化(Initializationg).使用(Using)和卸载(Unloading). 加载 目的 在该阶段虚拟机会在内存…
前言 本文已经收录到我的Github个人博客,欢迎大佬们光临寒舍: 我的GIthub博客 学习导图 一.为什么要学习类加载机制? 今天想跟大家唠嗑唠嗑Java的类加载机制,这是Java的一个很重要的创新点,曾经也是Java流行的重要原因之一. Oracle当初引入这个机制是为了满足Java Applet开发的需求,JVM咬咬牙引入了Java类加载机制,后来的基于Jvm的动态部署,插件化开发包括大家热议的热修复,总之很多后来的技术都源于在JVM中引入了类加载器. 如今,类加载机制也在各个领域大放异…
Java虚拟机运行时数据区 方法区:存储 类信息.常量.静态变量.即使编译器编译后的代码等数据,也有别名叫做非堆.  方法区其中有包含有 运行时常量池,用于存放编译期生成的各种字面量和符号引用.其中,可通过String.intern()方法将字符串放入运行时常量池中. 堆:存储的是类实例对象,数组.  JVM 所管理的内存中最大的一块.Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建.  从内存回收的角度来看,由于现在收集器基本都采用 分代收集算法,所以堆可以细分为 新生代 和老年代…
一个对象的出生源于我们的一个new操作,当我们使用new语句创建一个对象,这个对象的生命周期就开始了,当我们不在有任何引用变量引用它,这个对象就的生命就此结束,它占用的内存就可以被JVM的垃圾回收器回收. 而在Hibernate的持久层,一个Java对象在它的生命周期中有四个状态:临时状态.持久化状态.删除状态.游离状态. 1.临时状态------transient 用new语句创建一个对象,还没有被持久化,并且未加入到Session缓存中,这时处于临时状态的Java对象 被称为临时对象. 2.…
Java对象的生命周期 在Java中,对象的生命周期包含下面几个阶段: 1.      创建阶段(Created) 2.      应用阶段(In Use) 3.      不可见阶段(Invisible) 4.      不可达阶段(Unreachable) 5.      收集阶段(Collected) 6.      终结阶段(Finalized) 7.      对象空间重分配阶段(De-allocated) 图1. JavaObject Life Cycle 1.创建阶段(Create…
1.Hibernate对象的生命周期(瞬时状态.持久化状态.游离状态) 1.瞬时状态(Transient): 使用new操作符初始化的对象就是瞬时状态,没有跟任何数据库数据相关联:2.持久化状态(Parsistent): 如果对象与Session对象关联起来,且该对象对应到数据库记录,则称该对象处于持久化状态.3.游离状态(Detached) Session被关闭或调用了Session的evict或clear方法把它从Session中移除了,则该对象脱离了Session的管理,持久化状态变成游离…
当 Java 虚拟机将 Java 源码编译为字节码之后,虚拟机便可以将字节码读取进内存,从而进行解析.运行等整个过程,这个过程我们叫:Java 虚拟机的类加载机制.JVM 虚拟机执行 class 字节码的过程可以分为七个阶段:加载.验证.准备.解析.初始化.使用.卸载. 在开始聊之前,先给大家看一道面试题. class Grandpa { static { System.out.println("爷爷在静态代码块"); } } class Father extends Grandpa…
这一节我们来总结一下JVM类加载机制.具体目录如下: 类加载的过程 类加载过程概括 说说引用 详解类加载全过程: 加载 验证 准备 解析 初始化 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是Java虚拟机的类加载机制. 在Java中,类型的加载.连接和初始化过程都在程序运行期间完成的,这种策略虽然会使类加载时增加一些性能开销,但是提供了高度的灵活性,Java里天生可以动态扩展的语言特就是依赖于运行期动态加载…
如下图所示,JVM类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程. 加载 加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的入口.注意这里不一定非得要从一个Class文件获取,这里既可以从ZIP包中读取(比如从jar包和war包中读取),也可以在运行时计算生成(动态代理),也可以由其它文件生成(比如将JSP文件转换成对应的Class类). 验证 这一阶段的主要目的是为了确保…
在上一篇JVM类加载机制详解(一)JVM类加载过程中说到,类加载机制的第一个阶段加载做的工作有: 1.通过一个类的全限定名(包名与类名)来获取定义此类的二进制字节流(Class文件).而获取的方式,可以通过jar包.war包.网络中获取.JSP文件生成等方式. 2.将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构.这里只是转化了数据结构,并未合并数据.(方法区就是用来存放已被加载的类信息,常量,静态变量,编译后的代码的运行时内存区域) 3.在内存中生成一个代表这个类的Java.lan…
各位,实在不好意思,因为有事,博客几天没更新了.前面有童鞋提到,配置 Objects.xml 路径的相关问题,这些东西是 IResource 接口的一些内容.在下一章会详细介绍. 传统的Net应用中,对象的生命周期非常简单..Net中的关键词 new 用来实例化对象(或许它是非序列化的).这样就够用了.相反,对象 的生命周期在 Spring.Net 容器中更加细致.理解 Spring.Net 对象的生命周期非常重要,因为你或许要利用 Spring.Net 提供的机制来订制对象的创建过程.我们在前…
引言 如下图所示,JVM类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程. 加载 在加载阶段,虚拟机需要完成以下三件事情: 1)通过一个类的全限定名来获取定义此类的二进制字节流.注意这里的二进制字节流不一定非得要从一个Class文件获取,这里既可以从ZIP包中读取(比如从jar包和war包中读取),也可以从网络中获取,也可以在运行时计算生成(动态代理),也可以由其它文件生成(比如将JSP文件转换成对应的Class类). 2)将这个字节流所代表的静态存储结构…
类加载机制与对象初始化   一 . 类加载机制 类加载机制是指.class文件加载到jvm并形成Class对象的机制.之后应用可对Class对象进行实例化并调用.类加载机制可在运行时动态加载外部的类,还可以达到类隔离的效果. 类从而加载到虚拟机中开始,整个过程分为下图七个阶段,其中验证,准备,解析统称为解析.图中加载,验证,准备,初始化,卸载这5个阶段的顺序是确定的,类的加载过程必须按照这种过程按部就班的开始,而解析则不一定,它在某些情况下可能在初始化之后才开始,这是为了支持java语言的运行时…
Java对象的生命周期 在Java中,对象的生命周期包括以下几个阶段: 1.      创建阶段(Created) 2.      应用阶段(In Use) 3.      不可见阶段(Invisible) 4.      不可达阶段(Unreachable) 5.      收集阶段(Collected) 6.      终结阶段(Finalized) 7.      对象空间重分配阶段(De-allocated) 图1. JavaObject Life Cycle 1.创建阶段(Create…
一.JVM 类加载机制 JVM 类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程. 1. 加载: 加载是类加载过程中的第一个阶段,这个阶段会在内存中生成一个代表这个类的 java.lang.Class 对象,作为方法区这个类的各种数据的入口.注意这里不一定非得要从一个 Class 文件获取,这里既可以从 ZIP 包中读取(比如从 jar 包和 war 包中读取),也可以在运行时计算生成(动态代理),也可以由其它文件生成(比如将 JSP 文件转换成对应的 C…
一.JVM类加载机制 首先需要了解一下类加载器(ClassLoader): ClassLoader是Java的一个核心组件,它主要作用是从系统外部获得Class二进制数据流,然后将数据流装载到系统,交给JVM进行连接,初始化等操作,所有的Class都是有ClassLoader进行加载的. 点开ClassLoader类,如下图所示: 类加载器种类: 启动类加载器(BootStrapClassLoader):它用来加载 Java 的核心类,如java.xxx. 扩展类加载器(ExtensionsCl…
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------…
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------…
持久化对象的生命周期 瞬态(自由态) 表示对象在内存中存在,在数据库中没有数据相关,比如刚刚new出来的一个对象 持久态 持久态指的是持久化对象处于由Hibernate管理的状态,这种状态下持久化对象的变化将会被同步到数据库中 session.save() .....到..session.getTransaction().commit();这个过程 托管态(游离态 提交之后的状态 处于持久态的对象,在其对应的Session实例关闭后,此时对象进入游离态.也就是说Session实例是持久态对象的…
减少分配率 这个几乎不用解释,减少了内存的使用量,自然就减少GC回收时的压力,同时降低了内存碎片与CPU的使用量.你可以用一些方法来达到这一目的,但它可能会与其它设计相冲突. 你需要在设计对象时仔细检查每个它并问自己: 我真的需要这个对象吗? 这个字段是我需要的吗? 我能减少数组的尺寸吗? 我能缩小primitives的尺寸吗(用Int32替换Int64,其它)? 这些对象,是否只有在极少数情况下,或者只有初始化的时候才用到? 是否能将一些类转为结构体使他们在栈上分配或者成为某个对象的一部分?…
主要用到协程(Coroutines)和游戏对象的生命周期(GameObject Lifecycle)基础知识,巧妙解决了游戏重启的问题. 关于协程,这里有篇文章我觉得写的非常好,理解起来也很容易.推荐先看这篇文章:对Unity中Coroutines的理解>> 协程简单来看分三部分: 1)启动,常用方法:StartCoroutine(IEnumerator routine) | StartCoroutine(string methodName) 2)执行,执行的函数其返回值必须为IEnumera…