java classloader理解(似乎不正确)
2016-07-08 11:53
411 查看
引用:
http://frankkieviet.blogspot.in/2009/03/javalanglinkageerror-loader-constraint.html
结论:
1.类中的所有其他类型都由该类的classloader加载
2.jvm执行字节码,如下:
这是一个method descriptor。这个descriptor中使用的每一个类型被相应的classloader加载(但是不一定在调用时一定加载,如果传递参数null,那个该类型可能不被加载。),如下例:
com/stc/Demo$LoginEJB - 调用这个方法的类的classloader(called CL1)
Lcom/stc/Demo$User; - 实际加载User的classloader(由CL1委托加载,called CL2)
那么,CL1不能在加载User,CL2不能再加载LoginEJB。(CL2能否加载LoginEJB没有实际测试过。)
但是这个method descriptor可以被整个classloader替换,如下:
com/stc/Demo$LoginEJB - 调用这个方法的类的classloader(called CL3)
Lcom/stc/Demo$User; - 实际加载User的classloader(由CL1委托加载,called CL4)
仍然,CL3不能在加载User,CL4不能再加载LoginEJB。
http://frankkieviet.blogspot.in/2009/03/javalanglinkageerror-loader-constraint.html
结论:
1.类中的所有其他类型都由该类的classloader加载
2.jvm执行字节码,如下:
40: invokestatic #14 // Method com/stc/Demo$LoginEJB.login:(Lcom/stc/Demo$User;)V
这是一个method descriptor。这个descriptor中使用的每一个类型被相应的classloader加载(但是不一定在调用时一定加载,如果传递参数null,那个该类型可能不被加载。),如下例:
com/stc/Demo$LoginEJB - 调用这个方法的类的classloader(called CL1)
Lcom/stc/Demo$User; - 实际加载User的classloader(由CL1委托加载,called CL2)
那么,CL1不能在加载User,CL2不能再加载LoginEJB。(CL2能否加载LoginEJB没有实际测试过。)
但是这个method descriptor可以被整个classloader替换,如下:
com/stc/Demo$LoginEJB - 调用这个方法的类的classloader(called CL3)
Lcom/stc/Demo$User; - 实际加载User的classloader(由CL1委托加载,called CL4)
仍然,CL3不能在加载User,CL4不能再加载LoginEJB。
相关文章推荐
- andrioid Eclipse 导入其他libray项目作为依赖, 注意的地方
- Java 单例模式
- Java中你必须记住的String方法
- Eclipse打不开,提示: An error has occurred. see the log file解决办法
- java -- java.lang.NoSuchMethodError的问题
- 在Java中使用poi包解析xls文件
- Weblogic10.3.6发布javaWeb项目
- eclipse中最常用的十个快捷键
- java synchronized关键字,类锁,对象锁详解
- Java关键字-volatile
- Java ConcurrentModificationException异常原因和解决方法
- 关于java中创建文件,并且写入内容
- Spring自动装配
- Java 命令规范
- 新浪微博OAuth授权的Java实现
- Spring 定时任务之 @Scheduled cron表达式
- 【Leetcode】1. Two Sum
- spring中的@Configration详解
- java.util.concurrent.ExecutionException:
- JMS实现-ActiveMQ,介绍,安装,使用,注意点,spring整合