JVM(三),JVM如何加载.class文件】的更多相关文章

  1.情景展示 做了这么长时间的java开发,但是,你知道JVM是以怎样的编码加载.解析class文件的吗? 我们知道,通常情况下,我们会将java文件的字符集修改成utf-8,这样,理所当然地就认为:JVM在加载class的时候,自然是按照utf-8进行解析的. 事实并非如此:JVM加载class文件默认采用的字符集,是由操作系统来决定的. 换句话说,JVM会根据操作系统的字符集来解析你的class文件,而不是智能的去判断你的class文件的字符集而进行解析. 这样,肯定有问题. 2.原因分…
在开发过程当中需要用到配置信息,这些信息不能进行硬编码,这时配置文件是一个比较好的方式,java提供了properties格式的文件,以键值对的方式保存信息,在读取的时候通过键获得键对应的值,spring提供了读取properties文件的支持,下面看具体的配置, 一.<context:property-placeholder location=""/>标签 在项目中经常用到数据库连接,连接数据库需要一些参数:driver.url.username.password,这些信…
三.JVM如何加载.class文件 1.Java虚拟机的四个部分 2.通过类加载器(ClassLoader)加载.class…
在面试java工程师的时候,这道题经常被问到,故需特别注意. 1.JVM 简介 JVM 是我们Javaer 的最基本功底了,刚开始学Java 的时候,一般都是从“Hello World ”开始的,然后会写个复杂点class ,然后再找一些开源框架,比如Spring ,Hibernate 等等,再然后就开发企业级的应用,比如网站.企业内部应用.实时交易系统等等,直到某一天突然发现做的系统咋就这么慢呢,而且时不时还来个内存溢出什么的,今天是交易系统报了StackOverflowError ,明天是网…
jvm 加载class文件分为装载-链接-初始化三个过程. load -------->link verify prepare resolve     ---------->initialize (类加载过程) bootstrap class Loader | | extenstion class loader | | system class Loader | | ----------- user-define      user-define class loader      class…
JVM加载class文件的原理机制 1.Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的,类装载器所做的工作实质是把类文件从硬盘读取到内存中 2.java中的类大致分为三种:     1.系统类     2.扩展类     3.由程序员自定义的类 3.类装载方式,有两种     1.隐式装载, 程序在运行过程中当碰到通过new 等方式生成对象时,隐式调用类装载器加载对应的类到jvm中,     2.显式装载, 通过class.forname()等方法,显…
当Java编译器编译好.class文件之后,我们需要使用JVM来运行这个class文件.那么最开始的工作就是要把字节码从磁盘输入到内存中,这个过程我们叫做[加载 ].加载完成之后,我们就可以进行一系列的运行前准备工作了,比如: 为类静态变量开辟空间,将常量池存放在方法区内存中并实现常量池地址解析,初始化类静态变量等等.这篇文章我们要好好谈谈JVM是如何加载class文件的? 1.JVM加载类的过程       当我们使用命令来执行某一个Java程序(比如Test.class)的时候:java T…
关于JVM加载class文件和类的初始化 1.JVM加载Class文件的原理机制 1.1.装载 查找并加载类的二进制数据 1.2.链接 验证:确保被加载类的正确性.(安全性考虑) 准备:为类的静态变量分配内存,并将其初始化为默认值.(比如static int a  = 10 这里给a的默认初始值为0) 解析:把类中的符号引用转换为直接引用. 1.3.初始化 为类的静态变量赋予正确的初始值.(这个时候a的值才为10) 2.类在什么时候被初始化 1)创建类的实例,也就是new一个对象. 2)访问某一…
Java是一种动态解释型语言,类(class)只有被加载到JVM中后才能运行.每当一个Java程序运行时,都会有一个对应的JVM实例,只有当程序运行结束后,这个JVM才会退出.JVM实例通过调用类的main()方法来启动一个Java程序.当运行指定程序时,JVM将编译生成的.class文件按照需求和一定的规则加载到内存中,组织成一个完整的Java应用程序. 类的加载方式分为隐式加载和显式加载,隐式加载指的是程序在使用new等方式创建对象时,会隐式地调用类的加载器把对应的类加载到JVM中.显示加载…
ClassLoader类加载器 常见的类加载器有BootStrapClassLoader<-ExtClassLoader<-AppClassLoader<-用户ClassLoader BootStrapClassLoader:加载Java自带的核心类: ExtClassLoader加载在/jre/lib/ext目录下的jar包,同样用户可以将jar放在该目录下. AppClassLoader 加载classpath下面的内容, 加载过程: 读取文件并加载,首先申请父类的加载器进行加载,如…