java platform performance_Java Performance 总结(1. Class Loader)

关于Java性能方面的东西,涉及挺多。一直想写个总结。

第一部分,还是介绍class loader(类加载器,译文不如原文流畅了,估计用英文原词吧),它主要用于在Java虚拟机运行时加载所需要的类。

一、这些类,有两部分:一部分是你的应用程序中的java类,另一部分是Java API中的类文件。加载器有两个重要的工作:

1. loading: 找到一个类, 并导入它的二进制数据表示

2. linking: 执行验证,准备,以及可能的解析工作

验证:确保导入的类型是正确的

准备:为类变量准备足够内存,并为相应的变量执行初始化操作

解析:从符号引用变为直接引用,同时加载该类所引用的所有类

二、JVM中缺省的class loader:

1. $JAVA_HOME/jre/lib/rt.jar被Bootstrap Class loader加载:

注意看到:sun/misc/Launcher$ExtClass, sun/misc/Launcher$AppClass这两个class

它是所有Class Loader的root class loader

2. Extention class loader:

来源于$JAVA_HOME/jre/lib/ext/*.jar

3. System Class Loader,这一级,就到了用户定义的$CLASSPATH中的class的加载了

用户定义的classloader都是System class loader的子class loader.

三、类加载顺序:

1. 首先从已经加载的cache中查找,如果加载过,则返回

2. 从父classloader中加载(递归查找), 这确保API中的class都是被BootStrap class loader加载

3. 如果2中找不到,则使用当前的classloader进行加载

这也可以看出,一个class loader只能看到它的祖先class loader和它自身加载的类。看不到子class loader加载的类。

System Class Loader可以通过 cl.getSystemClassLoader()得到。

四、指定系统classloader的参数:

Boot Class Path (Bootstrap CL)

-Xbootclasspath:

-Xbootclasspath:/a  (append to the end)

-Xbootclasspath:/p  (prepend to the front)

Extention Class Path (Extention CL)

-Djava.ext.dirs=

System Class Path (System CL)

-cp or -classpath

-Djava.class.path=

五、显式加载和隐式加载

1. 显式方式:

cl.loadClass()  (cl是java.lang.ClassLoader的一个实例)

Class.forName() (当前classloader是起始classloader)

2. 隐式方式:

当被当成引用,类进行实例化,以及产生继承关系时,JVM将进行必要的解析并加载该类

因此,classloader显式的加载一个类,并隐式的加载所有其引用类

六、ClassLoader的跟踪信息:

java -verbose:class  (class loading)

java -verbose:gc (gc output)

java -verbose:jni (jni output)

七、ClassLoader中的path

URLClassLoader l = new URLClassLoader(new URL[] { new URL(     "file://D:/eclipse3.1/workspace/testclass/")});

URLClassLoader l = new URLClassLoader(new URL[] { new URL(     "file://D:/eclipse3.1/workspace/testclass")});

以'/'结束,表示目录路径,可加载下边所有的class; 如果不是以'/'结束,则意味着它是一个jar或zip文件。

子类的父类的classloader必须是子类的classloader或祖先classloader。不同的classloader加载的同名class不能相互cast。

获取JVM当前线程栈信息:

Windows:

Ctrl + Break

Unix/Linux:

Ctrl + /

kill –QUIT

kill –SIGQUIT

参考资料:

Inside the Java Virtual Machine

Demystifying class loading problems

http://www-128.ibm.com/developerworks/java/library/j-dclp1/index.html

Java Platform Performance: Strategies and Tactics

http://java.sun.com/docs/books/performance/1st_edition/html/JPTitle.fm.html

http://www.javaperformancetuning.com/tips/nio.shtml

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值