java classLoader 体系结构
jvm classLoader architecture:
1. Bootstrap ClassLoader/启动类加载器
主要负责jdk_home/lib目录下的核心 api 或 -Xbootclasspath 选项指定的jar包装入工作。
2. Extension ClassLoader/扩展类加载器
主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作。
3. System ClassLoader/系统类加载器
主要负责java -classpath/-Djava.class.path所指的目录下的类与jar包装入工作。
4. User Custom ClassLoader/用户自定义类加载器(java.lang.ClassLoader的子类)
在程序运行期间, 通过java.lang.ClassLoader的子类动态加载class文件, 体现java动态实时类装入特性。
类加载器的特性:
1. 每个ClassLoader都维护了一份自己的名称空间, 同一个名称空间里不能出现两个同名的类。
2. 为了实现java安全沙箱模型顶层的类加载器安全机制, java默认采用了 " 双亲委派的加载链 " 结构。
classloader-architecture
classloader-architecture
classloader-class-diagram
classloader-class-diagram
类图中, BootstrapClassLoader是一个单独的java类, 其实在这里, 不应该叫他是一个java类。因为,它已经完全不用java实现了。它是在jvm启动时, 就被构造起来的, 负责java平台核心库。
自定义类加载器加载一个类的步骤
classloader-load-class
classloader-load-class
ClassLoader 类加载逻辑分析, 以下逻辑是除 BootstrapClassLoader 外的类加载器加载流程:
1. // 检查类是否已被装载过
2. Class c = findLoadedClass(name);
3. if (c == null ) {
4. // 指定类未被装载过
5. try {
6. if (parent != null ) {
7. // 如果父类加载器不为空, 则委派给父类加载
8. c = parent.loadClass(name, false );
9. } else {
10. // 如果父类加载器为空, 则委派给启动类加载加载
11. c = findBootstrapClass0(name);
12. }
13. } catch (ClassNotFoundException e) {
14. // 启动类加载器或父类加载器抛出异常后, 当前类加载器将其
15. // 捕获, 并通过findClass方法, 由自身加载
16. c = findClass(name);
17. }
18.
相关文档:
POIFSFileSystem fs=new POIFSFileSystem(new FileInputStream(cfname));
HSSFWorkbook wb = new HSSFWorkbook(fs);
......
java验证码的实现(一)
收藏
1.ImageServlet类的实现:
package com.mobile.control;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOExcep ......
JAVA实现
在JDK中,在java.util.zip包中已经内置了ZLIB的实现,示例代码如下:
1//解压
2 public String decompressData(String encdata) {
3 try {
4 ByteArrayOutputStream bos = new ByteArrayOutputStream();
5 InflaterOutputStream zos = new InflaterOutputStream(bos);
6 zo ......
一、给Ubuntu配置JAVA环境
操作系统版本:Ubuntu 7.10 Gutsy
JAVA版本:JAVA 6
在Ubuntu下安装JAVA虚拟机和SDK(开发包)是非常轻松容易的:
联网的情况下在终端下输入命令
$sudo apt-get& ......