JAVA - 深入JAVA 虚拟机 2

类的两种类型的类加载器

-Java虚拟机自带的加载器

  根类加载器(Bootstrap): 使用C++编写,programer can not abtain this class.

  扩展类加载器(Extension): 使用Java代码实现

  系统类加载器(System):使用Java代码实现

-用户自定义的类加载器

  java.lang.ClassLoader的子类:  (public abstract class ClassLoader)

  用户可以定制类的加载方式:



package practise;

public class TestClassLoader {

    public static void main(String[] args) {
        Class clz=null;
        try {
            clz = Class.forName("java.lang.String");
            System.out.println(clz.getClassLoader());
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        Class clz2=null;

        try {
            clz2 = Class.forName("practise.c");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        System.out.println(clz2.getClassLoader());

    }

}

class c{

}

null ---> 这个说明这个是根类加载器
[email protected] --->这个说明是应用加载器

JVM规范允许类加载器在预料某个类将要被使用时就预先加载它,如果在预先加载的过程中遇到了.class

文件缺失或者存在错误,类加载器必须在程序首次主动使用该类时才报告错误。

类被加载后,就进入连接阶段,连接就是将已经读入到内存的类的二进制数据合并到虚拟机的运行时环境中去

类的验证的内容:

  -类文件的结果检查

  -语义检查

  -字节码验证

  -二进制兼容性的验证

类的准备阶段

类的解析

时间: 2024-11-05 18:33:23

JAVA - 深入JAVA 虚拟机 2的相关文章

java中JVM虚拟机内存模型详细说明

java中JVM虚拟机内存模型详细说明 2012-12-12 18:36:03|  分类: JAVA |  标签:java  jvm  堆内存  虚拟机  |举报|字号 订阅 JVM的内部结构如下图: 一个优秀Java程序员,必须了解Java内存模型.GC工作原理,以及如何优化GC的性能.与GC进行有限的交互,有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率,才能提高整个应用程序的性能. 本文将从JVM内存模型.GC工作原理,以及GC的几个关键问题进行探讨,从

atitit.基于虚拟机的启动器设计 --java 启动器 java生成exe

atitit.基于虚拟机的启动器设计 --java 启动器   java生成exe exe4j   vs  nativej 1. step1读取配置文件 1 1.1. regular mode   .. allINone exe mode 1 1.2. gene exe dir cfg 3 2. jre 目录配置and搜索 3 3. -classpath    -Djava.ext.dirs  jar and native dll配置 5 4. main class 配置 6 5. 其他的 6

win8.1 cygwin编译java轻量虚拟机avian

1.背景 昨天在网上看到别人用aauto写本地小程序写的很爽,我觉得如果java的jre能小一点,凭借java庞大的第三方类库写小工具也还算不错的.本人就经常用eclipse+一些commons包写些小工具软件.不过可惜的是只能自己用,对于没装java环境的人来说就麻烦了.所以就去网上找到了一个轻量级java虚拟机avian.但是在编译和安装过程中遇到了很多困难,特此记录. 2.开始 废话少说,先说重点.其实在这个软件的gihub首页以及清晰的讲述了安装教程,无奈这是英文的,而且主要是自己没有过

Android JNI c/c++调用java 无需新建虚拟机

近期通过研究SDL源码 得出android JNI  c/c++调用java 无需新建虚拟机: 具体步骤如下 第一步获得:两个参数 JNIEnv和jclass void Java_com_Test_Audio_Init( JNIEnv* env,jclass cls, jobject thiz ) { InitJNI(env,cls); } bool InitJNI(JNIEnv* env,jclass cls) { m_Env=env; m_cls=cls; } 第二步 获得java那边定义的

Java笔记-Java相关概念和如何实现跨平台

一.Java相关概念 1.Java语言的核心特点跨平台面向对象 2.Java的历史版本JDK1.0,JDK1.1,JDK1.2....JDK5.0,JDK6.0,JDK7.0,JDK8.0 注意:JDK5.0是一个标志性的版本,该版本引入了很多新特性. 3.Java的分类Java从1.2开始,分为三个不同的分支 JavaSE(Java Standard Edition),Java标准版,专门用来开发桌面级应用JavaEE(Java Enterprise Edititon),Java企业版,专门开

【Java】Java垃圾回收机制

Java垃圾回收机制 说到垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和Java联系起来.在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,这一切都交给了JVM来处理.顾名思义,垃圾回收就是释放垃圾占用的空间,那么在Java中,什么样的对象会被认定为“垃圾”?那么当一些对象被确定为垃圾之后,采用什么样的策略来进行回收(释放空间)?在目前的商业虚拟机中,有哪些典型的垃圾收集器?下面我们就来逐一探讨这些问题.以下是本文的目录大纲: 一.如何确定某个对象

[Java基础] Java对象内存结构

转载地址:http://www.importnew.com/1305.html 原文于2008年11月13日 发表, 2008年12月18日更新:这里还有一篇关于Java的Sizeof运算符的实用库的文章. 学C/C++出身的我,对Java有一点非常困惑,那就是缺乏计算对象占用内存大小的机制.而在C++中就可以通过sizeof运算符来获得基本类型以及类实例的大小.C和C++中的这个操作符对于指针运算.内存拷贝和IO操作都非常有用. Java中并没有一个类似的运算符.事实上,Java也不需要这种运

【Java】Java XML 技术专题

XML 基础教程 XML 和 Java 技术 Java XML文档模型 JAXP(Java API for XML Parsing) StAX(Streaming API for XML) XJ(XML Enhancements for Java) XML 验证 XPath XQuery XSL 转换处理器 XStream 数据绑定 本专题汇总了大量面向 Java 开发人员的 XML 技术文章和教程,内容涉及 XML 基础.Java XML 的文档模型.编程 API 与数据绑定框架以及 Java

【Java】Java 序列化的高级认识

如果你只知道实现 Serializable 接口的对象,可以序列化为本地文件.那你最好再阅读该篇文章,文章对序列化进行了更深一步的讨论,用实际的例子代码讲述了序列化的高级认识,包括父类序列化的问题.静态变量问题.transient 关键字的影响.序列化 ID 问题.在笔者实际开发过程中,就多次遇到序列化的问题,在该文章中也会与读者分享. 15 评论: 杨 硕, 研究生, 东北大学软件学院 魏 强, 硕士研究生, 东北大学软件学院 2011 年 3 月 16 日 内容 引言 将 Java 对象序列

程序猿二三事之Java基础--Java SE 5增加的特性--语法篇(一)

程序猿二三事之Java基础–Java SE 5增加的特性–语法篇(一) [ TOC ] 为什么是Java SE 5? 目前已经到了JDK-8u74了,JDK7的主版本已经于2015年4月停止公开更新. 那为什么还要来说Java/JDK5呢? Java SE在1.4(2002)趋于成熟,随着越来越多应用于开发企业应用,许多框架诞生于这个时期或走向成熟. Java SE 5.0的发布(2004)在语法层面增加了很多特性,让开发更高效,代码更整洁. 自动装箱/拆箱.泛型.注解.for循环增强.枚举.可