- 浏览: 414587 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (239)
- java (59)
- JQuery (5)
- oracle (12)
- javascript (14)
- struts1 (1)
- spring (10)
- Quartz (2)
- ibatis (1)
- linux (32)
- weblogic (3)
- ibaits (2)
- servlet (1)
- log4j (5)
- 编程人生 (2)
- apache (3)
- window (3)
- web前端 (25)
- 错误集合 (2)
- 框架配置 (1)
- 开发工具 (15)
- 小插件应用 (1)
- lucene (1)
- sonar (1)
- velocity (1)
- 代码检查 (0)
- error (1)
- jndi (1)
- oracle函数 (1)
- tools (1)
- 代码管理 (3)
- mysql (4)
- maven (9)
- bat (1)
- git (3)
- aix (2)
- freemarker (1)
- svn (2)
- nginx (6)
最新评论
-
masuweng:
f
修改eclipse的内存 -
洞渊龙王:
...
maven-surefire-plugin学习 -
phf717601206:
WEB-INF/lib下就没有servlet-api.jar ...
Unable to read TLD "META-INF/c.tld"错误 -
sziitjiang:
很好,非常不错
Java读写excel之poi -
dengminghua1016:
doris1bruce 写道一、二、 ...
java创建对象的几种方式
-
一:Java虚拟机与程序的生命周期,如下几种情况Java虚拟机将结束生命周期
1,执行System.exit()方法
2,程序正常执行结束
3,程序执行过程中遇见到了异常或错误而异常终止
4,由于系统错误而导致Java虚拟机进程终止
二:Java程序对类的使用方式
1,主动使用(6种)
1):创建类的实例
2):访问某个类或静态变量,或者对静态变量赋值
3):调用类的静态方法
4):反射(如:Class.forName(“com.fov.IOTest”))
5):初始化一个类的子类
6):Java虚拟机启动的时候被标明的启动类(例如包含main方法的类)
只有当程序访问类的静态变量或静态方法确实在当前类或当前接口中定义时,才可以认为是对类或接口的主动使用
2,被动使用
除去主动使用外的都为被动使用
Java虚拟机必须在每个类或者接口被首次主动使用的时候才初始化他们
三:类的加载,连接与初始化
1,加载:是将类的.class文件的二进制文件读到内存中,将其放在运行时数据区的方法区里面,然后在堆内存创建一个java.lang.Class对象,用来封装在方法区内的数据结构。
1)加载类的方式:
1)),从本地系统中直接加载
2)),通过网络下载.class文件
3)),从zip,jar等归档文件中加载.class文件
4)),从专有的数据库中提取.class文件
5)),将Java源文件动态的编译为.class文件
2)类加载器种类:
1)),Java虚拟机自带的加载器
1))):根类加载器(Bootstrap)(c++编写无法在java代码中获得该类)
2))):扩展类加载器(Extension)(java实现)
3))):系统加载器(System)(java实现)
2)),用户自定义的类加载器
1))):java.lang.ClassLoader的子类
2))):用户可以通过定制类的加载方式
3),类加载器时间
1)):JVM允许类加载器在预料到某个类将要被使用的时候就预先加载它,如果预先加载的过程中遇到了某.class文件缺失或者错误,那么类加载器在程序首次使用该类的时候才报告错(LinkageError错误)
2)):如果该类一直没有被程序主动使用,那么类加载器就不会报告错误。
4),类加载器的父亲委托机制(Parent Delegation)
1)):根加载器(Bootstrap):该加载器没有父加载器。它负责加载虚拟机的核心类库,如 :java.lang.*,根加载器从系统属性sun.boot.class.path所指定的目录中加载类库,根加载器的实现依赖地层操作系统,它并没有继承java.lang.ClassLoader类
2)):扩展类加载器(Extension):它的父加载器为根类加载器〈父子加载器并不一定是继承关系〉,它从java.ext.dirs系统属性所指的目录中加载类库,或者从JDK的安装目录的jre//lib//ext子目录下加载类库,如果把用户创建的JAR文件放在这个目录下会自动被加载,该类是java.lang.ClassLoader类的子类。
3)):系统类加载器(System),也称为应用类加载器,它的父加载器为扩展加载器,它从环境变量classpath或者系统属性java.class.path所指定的目录加载类,它是用户自定的类加载器的默认父加载器,系统加载器是纯java类,是java.lang.ClassLoader类的子类。
5),定义类加载器
1)),如果某个类加载器能够加载一个类,那么该类加载器就称为定义类加载器,定义类加载器及起所有的子加载器都称为:初始类加载器
2)),当生成一个自定义的类加载器实例时,如果没有指定它的父加载器,那么系统加载器将是该类的父加载器。
3)),要创建类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的findClass(String name)方法即可,该方法根据参数指定的类的名字返回对应的Class对象的引用。
2,连接:
1)验证:确保被加载的类的正确性
类被加载后,就进去到连接阶段,连接就是将已经读入到内存的类的二进制数据合并到虚拟机的运行是环境中去。
验证内容:类文件结构检查,语义检查,字节码验证,二进制兼容性的验证
2)准备:为类的静态常量分配内存,并将其初始化为默认值
3)解析:把类中的符号引用转换为直接引用
3,初始化:为类的静态的变量赋予正确的初始值<用户所赋值>
类的初始化步骤
1),假如该类没有被加载和连接,那就先进行加载和连接
2),假如该类存在直接父类,并且该父类没有被初始化,那就初始化该类的父类(跟构造方法一样)<接口不会,只有当程序首次使用特定接口的静态变量的时候才会导致该接口被初始化>
3),假如该类中存在初始化语句,那就依次初始化这些语句。
类的初始化就是上面的6种主动方式,其他的被动使用都不会导致类的初始化
发表评论
-
org.apache.catalina.util.DefaultAnnotationProcessor cannot be cast to org.ap解决方案
2014-05-09 09:24 817是tomcat的lib文件夹jar包和项目的lib文件下的j ... -
基于mock对象和JUnit框架简化Spring Web组件单元测试(1)
2014-03-13 14:25 1728对于Java组件开发者来说,他们都盼望拥有一组能够对组件开 ... -
org.apache.taglibs.standard 转换成javax.servlet.jsp.tagext异常
2014-02-23 14:29 929java.lang.ClassCastExceptio ... -
acegi源码分析
2014-02-17 11:42 714AbstractProcessi ... -
深入研究java.lang.ThreadLocal类
2014-02-13 14:19 452一、概述 ThreadLocal是什么呢?其实Thr ... -
java synchronized详解
2014-02-13 09:38 684Java语言的关键字,当它用来修饰一个方法或者一个代码块的时 ... -
如何使用ide打jar包以及如何在cmd运行jar包
2013-12-02 00:05 1061一、怎么打jar包 第一步:选中要打jar包的工程 第二 ... -
window下Java环境配置
2013-08-29 13:54 3781.打开我的电脑--属性--高级--环境变量 ... -
Unable to read TLD "META-INF/c.tld"错误
2013-08-12 17:50 14183严重: Servlet.service() for ser ... -
According to TLD or attribute directive in tag file, attribute value does not ac
2013-07-28 23:39 15667jsp编译的时候失败,原因是servlet版本与jstl标 ... -
使用velocity启动项目报错
2013-05-21 12:12 11147启动tomcat时,出现 2007-3-15 16:42 ... -
文件解压和压缩
2013-04-14 20:42 918文件解压和压缩 /** * compress ... -
java操作properties属性文件
2013-04-14 20:40 1100java更新或增加 ... -
JAVA基本数据类型
2013-04-11 11:30 0数据类型 大小 范围 ... -
JAVA应用 之 排序
2013-02-25 10:36 836概述: 1.本文阐述对List(Array乱入)的 ... -
JAVA基础 之 Map
2013-02-25 10:27 918概述: 1.键值对,key-value,具有映射关 ... -
JAVA基础 之 Collections
2013-02-25 10:24 1230概述: 1.Collec ... -
java基础之异常
2013-02-25 09:55 871讲述: 1.五个关键字 1.tr ... -
java实现缓存技术
2013-01-27 12:48 0java实现缓存技术,有时候我们需要将一些数据缓存起来,什么时 ... -
java创建对象的几种方式
2013-01-27 10:13 6316(1) 用new语句创建对象,这是最常见的创建对象的方法。 ...
相关推荐
深入解析jvm深入解析jvm深入解析jvm深入解析jvm深入解析jvm深入解析jvm
1、JVM参数推荐 2、Java运行时数据区 3、JVM内存模型 4、堆的内存划分 5、垃圾回收(GC) 6、JVM参数汇总
Java中JDKJRE和JVM解析.doc
JVM 完整深入解析.pdf
JVM指令操作解析及指南手册.pdf
NULL 博文链接:https://jie-bosshr.iteye.com/blog/1364939
JVM常见面试题解析.pdf
详细的介绍了JVM内存结构和JVM的6大区域
JVM常见面试题解析
Jvm之用C#解析class文件
[jvm]深入JVM(一):从"abc"=="abc"看java的连接过程收藏 一般说来,我不关注java底层的东西,这次是一个朋友问到了,注意不光是 System.out.println("abc"=="abc");返回true, System.out.println(("a"+"b"+"c")....
程序运行要用到的内存大于虚拟机能提供的最大内存就发生内存溢出了, 内存溢出的问题要看业务和系统大小而定,对于某些系统可能内存溢出不常见,但某些系统还是很常见的解决的方法
本文详细讲解了JVM(Java Virtual Machine)的方方面面,首先由java的特性来描绘JVM的大致应用,再细细阐述了JVM的原理及内存管理机制和调优.最后讲述了与JVM密切相关的Java GC机制.
JVM先想想一些问题1 我们开发人员编写的Java代码是怎么让电脑认识的2 为什么说java是跨平台语言3 Jdk和Jre和JVM的区别4 为什么要学习JVM深入学习JVM1 JVM运行时数据区2 解析JVM运行时数据区2.1 方法区(Method Area...
jvm调优
JVM-整体结构原理深度解析
本篇文章主要介绍了jvm crash的崩溃日志详细分析及注意点。具有很好的参考价值,下面跟着小编一起来看下吧
JVM常见面试题解析+JVM常见面试题指南+JVM常见面试题汇总