- 浏览: 223724 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (244)
- java (23)
- java多线程 (7)
- 综合 (1)
- oracle10g (24)
- div+css (1)
- Flex (27)
- java Nio (1)
- java设计模式 (8)
- struts2 (10)
- spring3.0 (5)
- SSH (9)
- dwr (5)
- hibernate3.6 (17)
- dom4j (1)
- sql优化 (5)
- Quartz任务调度框架 (1)
- AOP (3)
- JavaScript (18)
- jquery (3)
- JSF (9)
- ruby (1)
- 正则表达式 (1)
- 明日准备 (2)
- eclipse (3)
- gvim (1)
- CMS (1)
- linux (6)
- 杂 (4)
- java 设计模式 (1)
- MySql (10)
- JBPM (4)
- JSP技术 (1)
- Mybatis And Ibatis (2)
- 经验之谈 (10)
- WebService (1)
- java分布式(高性能,高可用,可伸缩) (0)
- springMvc (2)
- redis (0)
- ant (1)
- Nutz (6)
- 配置管理 (0)
- css+div (1)
- eChars (1)
- angularJs (1)
- D3 (3)
- Scala (1)
最新评论
-
Cobain_LI:
Cobain_LI 写道学习了,之前一直都没注意到有这样的问题 ...
js面向对象3--更简单的原型模式已经带来的问题以及解决办法 -
Cobain_LI:
Cobain_LI 写道学习了,之前一直都没注意到有这样的问题 ...
js面向对象3--更简单的原型模式已经带来的问题以及解决办法 -
Cobain_LI:
有个小失误,144和147行多了两个花括号
js面向对象2--js中工厂模式的演化(重要,详细) -
Cobain_LI:
学习了,之前一直都没注意到有这样的问题
js面向对象3--更简单的原型模式已经带来的问题以及解决办法 -
YTT1121:
有网络拓扑发现的源代码么,或者您会编写么?可以有偿求购,搞科研 ...
flex 之twaver1--简单网络拓扑实现
注:原创作品,分享以供交流学习,转载请注明出处。
Java虚拟机(Inside JVM)
类加载器(ClassLoad)或者叫做类装载器
作用:把Class字节码程序加载到内存中
打印结果:
counter1 = 1
counter2 = 1
打印结果:
counter1 = 1
counter2 = 0
只因为成员变量的定义的顺序不同,出现的结果就不一样,下面一一揭晓:
1,java虚拟机与程序的生命周期
在如下的几种情况下,java虚拟机将结束生命周期
1,执行System.exit()返回0表示正常结束,否则不正常(abnormal,变态,不正常)结束
2,程序正常正常执行结束
3,程序在执行过程中遇到了异常或错误而异常终止。也就是说如果你不用try catch 那么程序
会一层一层的把异常抛到main方法中,到导致jvm的异常结束
4,由于操作系统出现错误而导致java虚拟机终止
2,类的加载、链接于初始化
加载:查找并加载类的二进制数据(可以实现class文件到内存中)
链接:
验证:确保被加载类的正确性。(恶意用于可以手工的生成class文件而不用javac)
准备:为类的静态变量分配内存,并将其初始化为默认值
解析:把类的符号引用转换为直接引用。
初始化:为类的静态变量赋予正确的初始值。
3,,java程序对类的使用方式可分为两种
主动使用
被动使用
所有的java虚拟机实现必须在每个类或接口被java程序“首次主动使用”时才初始化他们
主动使用的六种方法:
1,创建类的实例:new一个实例
2,访问一个类的静态变量
3,调用类的静态方法
4,反射 Class.forName("com.mysql.jdbc.Driver")
5,初始化一个类的子类
6,java虚拟机启动时被表明为启动类的
除了上面的六种情况其余的都是被动使用。都不会导致类的初始化。
4,类的加载
类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区
的方法区内,然后再堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构
类的加载方式:
1,从本地系统中直接加载
2,通过网络下载.class文件(用URLClassLoad来加载)
3,从zip.jar等归档文件中加载class文件
4,从专有数据库中提取class文件
5,将java云文件动态编译为class文件
5,类加载的最终产品是位于堆区中的Class对象
Class对象封装了类在方法区内的数据结构,并且向java程序员提供了访问方法
区内的数据结构的接口
6,两种类型的类加载器
1,java虚拟机自带的加载器
根类加载器啊(Bootstrap)用c++写的,无法获得该类
扩展类加载器(Extension)用java写的
系统类加载器(System)又称为应用加载器用java写的
2,用户自定义的类加载器
都是java.lang.ClassLoad的子类
用户可以定义类的加载方式,每一个类的对象都会包含着对定义它的ClassLoad
的引用。如果这个类是由根类加载器来加载的那么这个类的getClassLoad方法返回来
的是null
7,类加载器 并不需要等到某个类被“首次主动使用”时再去加载它,jvm规范
允许类加载器在预料某个类将要被使用时就预先加载它,如果再预先加载的guocheng
中遇到了class文件缺失或存在错误,类加载器必须在程序首次主动使用该类
时报告错误(LinkageError错误)
如果这个类一直没有被程序中东使用,那么累加载器 就不会报告错误。
8,用不同的jdk编译的同一个class文件,是不同的文件,可能会出现LinkedageError
9,类的验证的内容
类文件的结构检查:类文件的结构检查:确保类文件遵从java类文件的固定格
语义检查:确保类本身符合java语言的语法规定
字节码验证:
二进制兼容性的验证
例子:
打印结果:
null
sun.misc.Launcher$AppClassLoader@1372a1a
表示String类是由根类加载器加载的c类是由系统类加载器加载的。
Java虚拟机(Inside JVM)
类加载器(ClassLoad)或者叫做类装载器
作用:把Class字节码程序加载到内存中
class Singleton { public static int counter1; public static int counter2 = 0; private static Singleton singleton = new Singleton(); public Singleton() { counter1++; counter2++; } static //静态代码块 { } public static Singleton getInstance() { return singleton; } } public class MyTest { public static void main(String[] args) { Singleton singleton = Singleton.getInstance(); System.out.println("counter1 = " + singleton.counter1); System.out.println("counter2 = " + singleton.counter2); } }
打印结果:
counter1 = 1
counter2 = 1
package com.supan.classload; class Singleton { private static Singleton singleton = new Singleton(); public static int counter1; public static int counter2 = 0;//其实counter1的值先是零而后再被初始化为0(静态变量不属于任何一个对象,而是属于这个类) public Singleton() { counter1++; counter2++; } public static Singleton getInstance() { return singleton; } } public class MyTest { public static void main(String[] args) { Singleton singleton = Singleton.getInstance(); System.out.println("counter1 = " + singleton.counter1); System.out.println("counter2 = " + singleton.counter2); } }
打印结果:
counter1 = 1
counter2 = 0
只因为成员变量的定义的顺序不同,出现的结果就不一样,下面一一揭晓:
1,java虚拟机与程序的生命周期
在如下的几种情况下,java虚拟机将结束生命周期
1,执行System.exit()返回0表示正常结束,否则不正常(abnormal,变态,不正常)结束
2,程序正常正常执行结束
3,程序在执行过程中遇到了异常或错误而异常终止。也就是说如果你不用try catch 那么程序
会一层一层的把异常抛到main方法中,到导致jvm的异常结束
4,由于操作系统出现错误而导致java虚拟机终止
2,类的加载、链接于初始化
加载:查找并加载类的二进制数据(可以实现class文件到内存中)
链接:
验证:确保被加载类的正确性。(恶意用于可以手工的生成class文件而不用javac)
准备:为类的静态变量分配内存,并将其初始化为默认值
解析:把类的符号引用转换为直接引用。
初始化:为类的静态变量赋予正确的初始值。
3,,java程序对类的使用方式可分为两种
主动使用
被动使用
所有的java虚拟机实现必须在每个类或接口被java程序“首次主动使用”时才初始化他们
主动使用的六种方法:
1,创建类的实例:new一个实例
2,访问一个类的静态变量
3,调用类的静态方法
4,反射 Class.forName("com.mysql.jdbc.Driver")
5,初始化一个类的子类
6,java虚拟机启动时被表明为启动类的
除了上面的六种情况其余的都是被动使用。都不会导致类的初始化。
4,类的加载
类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区
的方法区内,然后再堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构
类的加载方式:
1,从本地系统中直接加载
2,通过网络下载.class文件(用URLClassLoad来加载)
3,从zip.jar等归档文件中加载class文件
4,从专有数据库中提取class文件
5,将java云文件动态编译为class文件
5,类加载的最终产品是位于堆区中的Class对象
Class对象封装了类在方法区内的数据结构,并且向java程序员提供了访问方法
区内的数据结构的接口
6,两种类型的类加载器
1,java虚拟机自带的加载器
根类加载器啊(Bootstrap)用c++写的,无法获得该类
扩展类加载器(Extension)用java写的
系统类加载器(System)又称为应用加载器用java写的
2,用户自定义的类加载器
都是java.lang.ClassLoad的子类
用户可以定义类的加载方式,每一个类的对象都会包含着对定义它的ClassLoad
的引用。如果这个类是由根类加载器来加载的那么这个类的getClassLoad方法返回来
的是null
7,类加载器 并不需要等到某个类被“首次主动使用”时再去加载它,jvm规范
允许类加载器在预料某个类将要被使用时就预先加载它,如果再预先加载的guocheng
中遇到了class文件缺失或存在错误,类加载器必须在程序首次主动使用该类
时报告错误(LinkageError错误)
如果这个类一直没有被程序中东使用,那么累加载器 就不会报告错误。
8,用不同的jdk编译的同一个class文件,是不同的文件,可能会出现LinkedageError
9,类的验证的内容
类文件的结构检查:类文件的结构检查:确保类文件遵从java类文件的固定格
语义检查:确保类本身符合java语言的语法规定
字节码验证:
二进制兼容性的验证
例子:
package com.supan.classload; public class MyTest { public static void main(String[] args) throws Exception { Class classzz = Class.forName("java.lang.String"); System.out.println(classzz.getClassLoader()); c c = new c(); System.out.println(c.getClass().getClassLoader()); } } class c { }
打印结果:
null
sun.misc.Launcher$AppClassLoader@1372a1a
表示String类是由根类加载器加载的c类是由系统类加载器加载的。
发表评论
-
浅谈java接口中定义属性
2015-03-11 22:55 7001package com.supan.reflact; p ... -
JMs 简单实例
2015-01-30 14:00 5441.前一讲简单的介绍了 ... -
java 泛型
2015-01-29 14:04 5951. 概述 在引入范型之前 ... -
配置jkstatus
2015-01-24 00:21 636在已配置完成的 apache 项目中 workers.pro ... -
apache+tomcat架设图片服务器
2015-01-23 22:15 1156apache + 2个tomcat分工指定: apac ... -
apache+tomcat实现负载均衡
2015-01-23 13:03 451所需材料: 1,apache_2.0.55-win32-x86 ... -
java web高并发解决方案
2015-01-23 01:28 883java处理高并发高负载类 ... -
java 实现简单及时通讯工具
2014-12-07 16:52 731客户端接受: package com.supan; i ... -
sql 语句优化
2014-12-03 23:50 485一: 尽量挑选自己需要的字段进行查询, 不要随便使用 s ... -
21312
2014-06-30 23:53 533http://supanccy2013.iteye.com/a ... -
java之jxl输入excel文件
2014-05-02 23:37 969注:原创作品,分享以供交流,转载请注明出处。 本博文需要引入 ... -
java算法之 递归
2014-05-01 22:41 827注:原创作品,分享以供交流学习,转载请注明出处。 递 ... -
HttpRequest.getSession(boolean boo)方法注意点
2014-05-01 01:04 2130getSession(boolean create) ... -
java 之 String的那些事儿
2014-04-17 00:05 564equals方法和==的区别 首先大家知道,String既 ... -
java 之递归便利文件夹中的文件
2014-04-16 00:34 828import java.io.File; public ... -
java 之this,super关键字
2014-04-16 00:29 454this关键字的三种用法: 第一、通过this ... -
java 之md5加密
2014-04-16 00:25 620package com.supan.md5; import ... -
java String变量判空 效率
2014-04-09 23:16 1460Java中的String为引用类型,我们经常遇到判空的情况,s ... -
java socket简单写了一个即时通讯工具(代码有待优化。)
2014-02-17 08:42 25101,服务端不断轮训创建socket链接,一旦链接成功,启动两个 ... -
StringBuffer、String、StringBuilder的区别
2014-01-23 21:54 475String,StringBuffer与StringBuild ...
相关推荐
Java虚拟机工作原理详解 Java虚拟机工作原理详解是 Java 程序执行的核心组件之一。了解 Java 虚拟机的工作原理对 Java 开发人员来说非常重要。本文将详细介绍 Java 虚拟机工作原理的详细过程和类加载器的工作机理。...
总之,《Java虚拟机规范(Java SE 7版)》是Java开发者的重要参考资料,它帮助我们理解JVM如何工作,如何与Java语言的其他部分交互,以及如何利用这些知识来提升应用的效率和可靠性。通过学习这份规范,开发者能够更...
Java虚拟机规范还定义了类加载机制,即在JVM启动时或运行过程中动态加载类到内存中。类加载器在运行Java程序时按需加载类,这允许Java程序进行延迟加载,即仅在需要时才加载类,这有助于优化程序的启动时间和运行时...
在性能优化方面,Java虚拟机实现了诸如垃圾收集(Garbage Collection)、动态编译(Just-In-Time, JIT)等机制。垃圾收集自动管理内存,避免程序员手动处理内存泄露问题;JIT编译则是在运行过程中将频繁执行的热点...
Java虚拟机运行机制 Java虚拟机(JVM)是一种用于计算设备的规范,可以用不同的方式(软件或硬件)加以实现。JVM包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 Java虚拟机是一个...
《Java虚拟机规范(JavaSE7版)》是理解Java虚拟机(JVM)运作机制的基石,由Tim Lindholm、Frank Yellin、Gilad Bracha和Alex Buckley等人撰写,后由周志明、吴璞渊和冶秀刚翻译成中文版。该规范不仅对Java开发者至...
Java虚拟机(JVM)是Java编程语言的核心组成部分,它为Java程序提供了...总之,Java虚拟机是Java生态系统中的核心组件,它的多样性满足了不同场景的需求,而深入理解和掌握JVM的工作原理,是每个Java开发者必备的技能。
通过深入学习《Java虚拟机(第二版)》,开发者不仅可以理解Java程序的运行机制,还能掌握性能优化、问题排查等高级技巧,提升自己的编程水平。这本书通常会详细讲解上述知识点,并提供丰富的示例和实践指导,帮助...
作者以易于理解的方式深入揭示了java虚拟机的内部工作原理,深入理解这些内容,将对读者更快速地编写更高效的程序大有裨益! 本书共分20章,第1-4章解释了java虚拟机的体系结构,包括java栈、堆、方法区、执行...
它详尽地探讨了Java虚拟机的工作原理、内存管理、类加载机制、字节码执行以及性能优化等多个核心主题,旨在帮助开发者提升程序的运行效率和稳定性。 1. **Java虚拟机概述**:Java虚拟机是Java平台的核心组件,它...
Java虚拟机(JVM)是Java程序运行的核心,它负责在不同操作系统上提供统一的运行环境。对于准备面试或希望深入理解JVM的开发者而言,了解JVM的各个组件和特性是必须的。本文将通过解析Java虚拟机面试题来深入探讨JVM...
这本书的编写基于《深入理解Java虚拟机》第二版以及相关的Java规范,旨在帮助读者深入理解JVM的工作原理,并通过实践来提升技能。 首先,我们要了解Java虚拟机(JVM)的角色。JVM是Java平台的核心组件,它负责执行...
《Java虚拟机规范(JavaSE7版)》是程序员深入了解Java语言运行机制不可或缺的文档。它不是特定虚拟机实现的说明书,而是一份确保不同公司实现的Java虚拟机具有一致外部接口的契约文档。这份文档是Java程序员的基础...
《JAVA虚拟机解读入门》是一本面向初学者的指南,旨在带领读者深入理解Java虚拟机(JVM)的工作原理和内部机制。JVM是Java语言的核心组成部分,它为Java程序提供了一个跨平台的运行环境,使得“一次编写,到处运行”...
Java虚拟机(JVM)是Java编程语言的核心组成部分,它为Java程序提供了运行环境。微软版本的Java虚拟机是专为Windows操作系统设计的,使得在Windows系统上可以执行编译后的Java字节码(.class文件)。这个压缩包...