java运行环境 类装载器ClassLoader
今天观看了蓝山老师java背后的秘密相关视频,发现要想写出高性能的程序,一定要对其运行原理以及其运行环境有相当程度的了解。那ClassLoader是相当关键的一个部分。
先说下java程序运行的基本流程,先将java文件编译为class文件,然后通过ClassLoader(类加载器),加载到Runtime Data Area(类似于内存)中,再交与Execution Engine(相当于CPU)进行执行操作,若java语言有调用其他的语言进行相关计算,则需要用到Native interface这个部分,最终形成Native Libraries,至此,执行完成。
那看了上面的流程,ClassLoader是一个Class文件的载入器,其载入的方式有预先载入和按需载入两种方式。预先载入主要是载入一些具体的java系统文件,各个java运行必需的类文件;按需载入主要是我们自己所编写的具体的java的类文件。预先载入和按需载入可顾名思义,预先载入是在执行没个程序前都需要进行载入,按需载入是只有在调用具体的类文件时才进行载入。我们可以通过该命令来追踪java程序执行时,所载入的具体的class文件---java -verbose:class Main(编译好的文件名)。
按需载入又分为两种方式,为显式和隐式.隐式是我们比较常用的,具体的形式不使用new()关键字,而显式的方法主要是下面两种方式,一个是Class.forName()和ClassLoader.LoadClass()方法.Class.forName在做与数据库的连接时用过,不过以前不了解其含意.这两种方法我目前感觉隐式的用起来更方便,但忽略了具体的载入过程;显式的载入用起来复杂,但对程序具体的执行流程,我们可以进行详细的控制。
具体怎么用这个还没太搞明白,还需再研究下.明天会把classLoader内部的具体构造再研究下。
下面是做这个练习时的具体内容:
//MyClassLoader
import java.io.*;
import java.net.*;
import java.lang.reflect.*;
public class MyClassLoader extends URLClassLoader{
private static File file = new File("F:\\java\20100108 ");
public MyClassLoader(){
super(getUrl());
}
public static URL[] getUrl(){
try{
return new URL[]{file.toURL()};
}catch(MalformedURLException e){
return new URL[0];
}
}
}
//A.java
import java.lang.reflect.*;
public class A {
public static void main(String[] args){
try{
相关文档:
类的初始化和对象初始化是 JVM 管理的类型生命周期中非常重要的两个环节,Google 了一遍网络,有关类装载机制的文章倒是不少,然而类初始化和对象初始化的文章并不多,特别是从字节码和 JVM 层次来分析的文章更是鲜有所见。
本文主要对类和对象初始化全过程进行分析,通过一个实际问题引入,将源代码转换成 JVM 字节码后, ......
/**
* 创建缩略图片
*
* @param orgpath
* @param filename
* @return
* @description: 描述
*/
//此方法对于ssh项目并且针对 上传功能时,非常有用
public static Boolean createAbbreviateImg(String orgpath, String filename) {
Boolea ......
public boolean writeXML(String content, String filename)
{
String savepath;
FileOutputStream fout;
// log.info("content:"+content+ ......
今天和大家一起学习Java的设计模式。本人的水平不是很高,这系列文章只是自己学习的过程,并希望能同大家分享经验。
先说下我对工厂模式的理解:当我们需要某个对象时,最直接的办法是看到这个对象就拿过来。但是当对象非常多的时候,找起来就很不方便。这时就需要一个中介来帮助我们取得想要的东西,这个中介就是工厂(fa ......
方法的重载
:同一个类里面方法的名字相同,方法的参数项(主要是参数类型,参数个数)
不同
,
返回类型可能不同。
重载方法可以具有不同的返回类型,但返回类型本身不足以区分方法的两个版
本。 ......