众所周知,.java文件需要经过编译生成.class文件才能被JVM执行. 其中,JVM是如何加载.class文件,又做了些什么呢? .class文件通过 加载->验证->准备->解析 等过程,加载到方法区中,等待代码的调用,下面讲讲每个步骤都干了些什么吧 一.加载 将.class文件加载到jvm中. 那么何时加载呢?当类被调用的时候!例如:new A();的时候A被加载到内存中.这里需要注意,并不是每次使用的时候都会加载,只是第一次使用的时候加载进来. 二.验证 验证.class文件的…
如果你想在动态编译并加载了class后,能够用hibernate的数据访问接口以面向对象的方式来操作该class类,请参考这篇博文-http://www.cnblogs.com/anai/p/4270214.html 所谓动态编译,就是在程序运行时产生java类,并编译成class文件. 一.这里介绍两种动态编译java文件的方式. 第一种:使用Runtime执行javac命令 /** * 编译java类 * 使用Runtime执行javac命令 * @param name 类的全限定包名 不带…
一.java类的编译流程 这里主要讲的是从java文件到class文件 下图是java类编译的详细步骤: 1.词法分析:将java源代码的字符流转变为标记(Token)的集合,Token是编译过程中的最小元素,关键字.变量名.字面量.运算符都可以成为标记.如int a = b + 2 这句代码包含了6个标记,分别是int . a.=.b.+.2. 2.语法分析:将利用词法分析后的Token序列构造抽象语法树的过程.抽象语法树是一种用来描述程序语法结构的树的表现方式,语法树的每一个节点都代表程序代…
前言 最近给一个非 Java 方向的朋友讲了下双亲委派模型,朋友让我写篇文章深度研究下JVM 的 ClassLoader,我确实也好久没写 JVM 相关的文章了,有点手痒痒,涂了皮炎平也抑制不住的那种. 我在向朋友解释的时候是这么说的:双亲委派模型中,ClassLoader 在加载类的时候,会先交由它的父 ClassLoader 加载,只有当父 ClassLoader 加载失败的情况下,才会尝试自己去加载.这样可以实现部分类的复用,又可以实现部分类的隔离,因为不同 ClassLoader 加载的…
最近公司要做功能迁移,原来的后台使用的Netty,现在要迁移到在uap上,也就是说所有后台的代码不能通过netty写的加载顺序加载了. 问题就来了,怎样让迁移到tomcat的代码按照原来的加载顺序进行加载(例如顺序:1.初始化spring容器,2.初始化线程池,3.加载业务代码,将数据库中数据加载到内存中).我个人首先想到的是在tomcat中加监听,tomcat启动时先加载监听中的方法.方法中的加载顺序也就是按照我拟定的顺序进行. 然后我查了一些资料,发现了两种解决方案: 1.通过tomcat的…
我的测试结果: 图片占用内存   图片尺寸           .png文件大小 1MB              512*512          316KB 4MB              1024*1024      940KB 16MB            2048*2048      2.5MB 1.11MB         512*568 693KB          320*568          186KB 2.773MB       640*1136        664…
想要配置文件生效 需要通过添加到web.xml加载到内存中…
Java虚拟机如何把编译好的.class文件加载到虚拟机里面?加载之后如何初始化类?静态类变量和实例类变量的初始化过程是否相同,分别是如何初始化的呢?这篇文章就 是解决上面3个问题的. 若有不正之处,请多多谅解并欢迎各位能够给予批评指正,提前谢谢各位了. 1. Java虚拟机加载.class过程 虚拟机把Class文件加载到内存,然后进行校验,解析和初始化,最终形成java类型,这就是虚拟机的类加载机制.加载,验证,准备,初始化这5个阶段的顺序是确定的, 类的加载过程,必须按照这种顺序开始.这些…
Java虚拟机如何把编译好的.class文件加载到虚拟机里面?加载之后如何初始化类?静态类变量和实例类变量的初始化过程是否相同,分别是如何初始化的呢?这篇文章就 是解决上面3个问题的. 若有不正之处,请多多谅解并欢迎各位能够给予批评指正,提前谢谢各位了. 1. Java虚拟机加载.class过程 虚拟机把Class文件加载到内存,然后进行校验,解析和初始化,最终形成java类型,这就是虚拟机的类加载机制.加载,验证,准备,初始化这5个阶段的顺序是确定的, 类的加载过程,必须按照这种顺序开始.这些…
我们接着上一章的代码继续来了解一下java类是在什么时候加载的.在开始验证之前,我们现在IDEA做如下配置. -XX:+TraceClassLoading 监控类的加载 我们新建了一个TestController 来测试类的加载时机,代码如下: @RestController public class TestController { @RequestMapping("/newInstance") public String newInstance(){ Father father =…