- 浏览: 319048 次
- 性别:
- 来自: 西宁
文章分类
- 全部博客 (120)
- Java Thought (29)
- Java Pattern (4)
- Data Base (7)
- Algorithm Design (33)
- Linux (0)
- Mysql (2)
- Oracle (0)
- ConstructionDesign-架构 (5)
- Spring Platform (0)
- Tomcat (1)
- JavaScript (7)
- Web System (3)
- MS SQLServer (1)
- 软件哲学 (6)
- View (3)
- Java GUI (4)
- CSSDIV (7)
- CloudComputing (0)
- WebService (0)
- SystemOrProject (2)
- SOA (0)
- 互转共享 (3)
- 偶尔java习题 (0)
- Thinks with does (1)
最新评论
-
sassds:
佩服啊 高手
分享一款js特效 -
bhjackson:
学习啦,能否详细介绍下回溯的过程?O(∩_∩)O谢谢
分享回溯法- 找n个数中r个数的组合 -
zk7019311:
了解了解。。。。。
业务层代码复用的一点建议 -
lijie1819:
看到LZ的设计思想,感觉和抽象工厂模式有点相像。
业务层代码复用的一点建议 -
wjjcml1982:
酷毙了!楼主太强悍了!
分享一款js特效
看着瓜娃瓜娃,最近突然很有兴趣想了解下Java这杯"咖啡"的核心技术思想。于是翻开Java虚拟机、java跨平台技术, java API讲义一些资料,有兴起笔摘星,和各位有兴趣的朋友们共享,并虚心求教,若有错误,一起纠正学些。
1. Java虚拟机
java面向网络的核心就是java虚拟机。
java虚拟机的主要任务是装在class文件并且执行其中的字节码。Java虚拟机包含一个类装载器,它可以从程序和API中装载class文件。Java API中只有程序执行时需要的那些类才会被装载。字节码由执行引擎来执行。
不同的java虚拟机中,执行引擎可能实现得非常不同。在由软件实现的虚拟机中,最简单的执行引擎就是一次性解释字节码。另一种执行引擎更快,但是也更消耗内存,叫做"即时编译器(just-in-time compiler)"。在这种情况下,第一次被执行的字节码会被编译成本地机器代码。编译出的本地机器代码会被缓存,当方法以后被调用的时候可以重用。第三种执行引擎是自适应优化器。在这种方法里,虚拟机开始的时候解释字节码,但是会监视运行中程序的活动,并且记录下使用最频繁的代码段。程序运行的时候,虚拟机只把那些活动最频繁的代码编译成本地代码,其他的代码由于使用得不是很频繁,继续保留为字节码-由虚拟机继续解释它们。一个自适应的优化器可以使得java虚拟机在80%~90%的时间里执行被优化过的本地代码,而只需要编译10%~20%的对性能有影响的代码。
当Java虚拟机是由主机操作系统上的软件实现的时候,Java程序通过调用本地方法(native method)和主机交互。java中有两种方法: Java方法和本地方法。Java方法是由Java语言编写,编译成字节码文件,存储在class文件中的。本地方法是由其他语言(比如c,c++或汇编语言)编写的,编译成何处理器相关的机器代码。本地方法保存在动态链接库中,格式是各个平台专有的。运行中Java程序调用本地方法时,虚拟机装载包含这个本地方法的动态库,并调用这个方法。本地方法是联系Java程序和底层主机操作系统的连接方法。
通过本地方法,Java程序可以直接访问底层操作系统的资源。一个本地方法接口(Java Native Interface, JNI)-使得本地方法可以在特定主机系统的任何一个Java平台实现上运行。
如果希望使用特定主机上的资源,它们又无法从Java API访问,那么可以写一个平台相关的Java程序来调用本地方法。如果希望保证程序的平台无关性,那么只能通过Java API来访问底层系统资源。
2. 类装载器的体系结构
一个Java应用程序可以使用两种类装载器:"启动(bootstrap)"类装载器和用户定义的类装载器。启动类装载器(这是系统中唯一的)是java虚拟机实现的一部分。启动类装载器通常使用某种默认方式从本地磁盘中装载类,包括Java API类(启动类装载器也被称为原始类装载器、系统类装载器或者默认类装载器)。
Java应用程序能够在运行时安装用户定义的类装载器,这种类装载器能够使用自定义的方式来装载类。例如,从网络下载class文件。尽管启动类装载器是虚拟机实现的本质部分,而用户定义的类装载器不是,但用户定义的类装载器能够用java来编写,能够被编译成class文件,能够被虚拟机装载,还能够像其它对象一样实例化。
由于有用户定义类装载器,所以不必再编译的时候就知道运行中的java应用程序中最终会加入的所有的类。用户定义的类装载器使得在运行扩展Java应用程序成为可能。当它运行时,应用程序能够解决它需要哪些额外的类,能够决定是使用一个或是更多的用户定义的类装载器来装载。由于类装载器是用Java编写的,所以用任何在Java代码中可以表述的风格来进行类装载。这些类可以通过网络下载,可以从某些数据库中获取,甚至可以动态生成。
每一个类被装载的时候,Java虚拟机都监视这个类,看到它到底是被启动类装载器还是被用户定义类装载器装载。当被装载的类引用了另外一个类时,虚拟机就会使用装载第一个类的类装载器装载引用的类。例如,如果虚拟机使用一个特定的类装载器装载Volcano这个类,它就会使用这个类装载器装载Volcano类使用的所有类。
由于Java虚拟机采取这种方式进行类的装载,所以被装载的类默认情况下只能看到被同一个类装载器装载的别的类。通过这种方法,Java的体系结构允许在一个Java应用程序中建立多个命名空间。运行时的Java程序中的每一个类装载器都有自己的命名空间。
Java应用程序可以创建多少个(或多少种)被不同的类装载器装载的类存放在不同的命名空间中,它们不能相互访问,除非应用程序显示地允许这么做。当编写一个Java应用程序的时候,从不同源文件装载的类可以分隔在不同的命名空间中。通过这种方法,就能够使用Java类装载器的体系结构来控制任何不同源文件中装载的代码之间的相互影响,特别是能够阻止恶意代码获取访问或破坏善意代码的权限。
Web浏览器是一个动态扩展的例子,web浏览器使用用户定义的类装载器从网络下载用于Java applet的class文件。Web浏览器使用一个用来安装用户定义类装载器的Java应用程序。这个用户定义的类装载器通常被称为Java Applet类装载器,它知道如何向HTTP服务器请求class文件。Java Applet可以作为动态扩展的例子,因为Java应用程序并不知道它什么时候会开始从网络下载浏览器请求的class文件。只有当浏览器遇到有Java applet的页面时,才决定是否需要下载class文件。
web浏览器启动的Java应用程序通常为每个提供class文件的网络地址分别创建不同的用户定义类装载器,因此,不同的用户定义类装载器装载不同来源的class文件。这就可以把它们分别放置在Java主机应用程序的不同命名空间之下。由于不同来源的Java applet文件放置在不同的命名空间中,恶意的Java applet代码就不会直接访问从别的地方下载的class文件。这就能够限制或阻止不同来源的代码之间的相互访问。
3. Java class文件
Java class文件主要在平台无关性和网络移动性方面使Java更适合网络。它在平台无关性方面的任务是:为Java程序提供独立于底层主机平台的二进制形式的服务。这种途径途径打破了C或者C++等语言所遵循的传统,使用这些传统语言写的程序通常首先被编译,然后被连接成单独的、专门支持特定硬件平台和操作系统的二进制文件。通常情况下,一个平台上的二进制可执行文件不能在其他平台上工作。而Java class文件时可以运行在任何支持Java虚拟机的硬件平台和操作系统上的二进制文件。
当编译和连接一个C++程序时,所获得的可执行二进制文件只能在指定的硬件平台和操作系统上运行,因为这个二进制文件包含了对目标处理器的机器语言。而Java编译器把Java源文件的指令翻译成字节码,这种字节码就是Java虚拟机的"机器语言"。
class文件设计得紧凑,因此它们可以快速地在网络上传送。其次,由于Java程序是动态连接和动态扩展的,class文件可以在需要的时候才下载。这个特点使得Java应用程序能够安排从网络上下载class文件的时间,从而可以最大限度地减少终端用户的等待时间。
4. Java API
Java API通过支持平台无关性和安全性,使得Java适应于网络应用。Java API是运行库的集合,它提供了一套访问主机系统资源的标准方法。运行Java程序时,虚拟机装载程序的class文件所使用的Java API class文件。所有被装载的class文件(包括从应用程序中和从Java API中提取的)和所有已经装载的动态库(包含本地方法)共同组成了再Java虚拟机上运行的整个程序。
在一个平台能偶支持Java程序以前,必须在这个特定平台上明确地实现API的功能。为访问主机上的本地资源,Java API调用了本地方法。由于Java API class文件调用了本地方法,Java程序就不需要再调用它们了。通过这种方法,Java API class文件为底层主机提供了具有平台无关性、标准接口的Java程序。对Java程序而言,无论平台内部如何,Java API都会有同样的表现和可预测的行为。正是由于在每个特定的主机平台上明确地实现了Java虚拟机和Java API,因此,Java程序自身就能够成为具有平台无关性的程序。
Java API在java安全性模型方面也有贡献。当Java API的方法进行任何有潜在危险的操作(比如进行本地磁盘写操作)之前,都会通过查询访问控制器来检验是否得到了授权。访问控制器是一个类,该类用来执行栈检验,已决定是否允许某种操作。
Java程序设计语言
Java程序设计语言组合了许多软件技术。
面向对象。
多线程。
结构化异常处理。
垃圾收集。
动态连接。
动态扩展。
评论
分享下你读技术思想的理解
你误解了我的意思,我意思说你写的东西不叫思想,而是具体技术。
不介意你说具体技术,但是那确实不是思想。
比如说把某种高级语言通过编译成为中间语言,再运行于为各个平台编写的语言解释器之上,从而完成语言的跨平台。这个可以算一种思想,基于这种思想的语言解释器在java里面的体现就是JVM。JIT原理上也可以算思想。
至于Class Loader, 你可以谈论为什么需要Class Loader, java的Class Loader 为什么会这样设计,这就是思想。
另外来说,感觉你的帖子里面有很多像从书里面copy出来的莫名奇妙的话。
比如:”java面向网络的核心就是java虚拟机。“。
因为前段时间我的项目中应用了一个类似spring的框架,并且有自己的classLoader,
当把项目部署到商用的app容器上时就出现类找不到的问题,但这些类确实是存在的,我估计是app容器也有自己的classLoader和开发框架的classLoader之间的问题,就像楼主说的一个类被加载了,他所引用的类会被第一个加载它的loadr加载,会不会出现一个类和它所引用的类被不同的classLoader加载,然后有互相不能访问,就会报ClassNotFound的异常呢,我的项目就出现了这样的问题,不知道各位能不能帮忙分析下.
你所说的问题 肯定是类加载器的问题 出现了在这个类加载器中调用了另外其它的类加载器中类 可以去看下OSGI中的类加载的思想
分享下你读技术思想的理解
1. 虚拟
2. 装载
3. 文件
4. api
因为前段时间我的项目中应用了一个类似spring的框架,并且有自己的classLoader,
当把项目部署到商用的app容器上时就出现类找不到的问题,但这些类确实是存在的,我估计是app容器也有自己的classLoader和开发框架的classLoader之间的问题,就像楼主说的一个类被加载了,他所引用的类会被第一个加载它的loadr加载,会不会出现一个类和它所引用的类被不同的classLoader加载,然后有互相不能访问,就会报ClassNotFound的异常呢,我的项目就出现了这样的问题,不知道各位能不能帮忙分析下.
那样能达到真正的分享和交流吗
Java深度历险
呵呵 要动手 光速般的看不是个好策略 真正的核心来自孰能生巧 这是唯一途径
那样不能达到我的效果
Java深度历险
巾帼不让须眉 如果真是 那实属幸福
恩, 定会
呵呵,你想说什么呢
第5就免了
那你改一改,写成其他,免得人家误会么。
-----------------
恩 遵照你所说~~
发表评论
-
Java常用集合包适用场景
2010-10-25 08:52 42281. ArrayList 基于数组方式实现,无容量的限制 ... -
同一任务和对象锁的问题
2010-08-04 08:31 2483偶尔翻开java编程思想看看多线程的篇章,意焦突然卡在某 ... -
类的装载、连接与初始化 -- 纠正
2010-07-02 09:03 9781.首先纠正<<深入java虚拟机>> ... -
Java虚拟机生命周期和体系结构
2010-06-23 13:48 64201. Java虚拟机的生命周期 ... -
Java中的垃圾回收与对象生命周期
2010-06-21 08:23 2975在<<Java编程思想>>书中 ... -
通过系统缓冲字节流类提高IO操作效率
2010-06-01 08:35 1113/** * 通过系统缓冲字节流类提高IO操作效率 ... -
通过系统缓冲字符流类提高IO操作效率
2010-06-01 08:34 1295/** * 通过系统缓冲字符流类提高IO操作效率 ... -
通过自定义缓冲区提高IO操作效率
2010-06-01 08:33 1060/****************************** ... -
java多态性总结二
2010-05-31 11:49 993多态性:发送消息给某个对象,让该对象自行决定响应何种行为。 ... -
数值包装类 - 性能优化
2010-05-31 08:36 9801. 良好的风格 Double d = new Dou ... -
字符串toCharArray - 性能优化
2010-05-31 08:35 17151. 良好的风格: String s = "a ... -
字符串的length - 性能优化
2010-05-31 08:34 1237尽量提前计算length: (1) 好的风格: Str ... -
字符串累加 - 性能优化
2010-05-31 08:33 12131. 测试代码: package boke.string; ... -
用Java线程协作模拟 - Alice,Bob和Robert博士的协作
2010-05-31 08:26 11901. 问题描述: Robert博士要进行一场实验,她需 ... -
用Java线程池技术模拟 - 容器中的最大值输出及排序输出
2010-05-31 08:23 12701. 输出结果: 排序前的数组: 容器0: 6 15 82 ... -
Java的多态性总结
2010-05-26 10:27 12941. Java的多态性总结: (1) 首先, 要明确Chil ... -
从这个例子你可以想到JAVA多态的什么特性?
2010-05-24 09:03 2877不加一句注解,请看下面内容:你会想到JAVA多态的什么特性? ... -
this是个很巧妙地东西
2010-05-24 09:01 922递归引起堆栈异常。。。 package com.maozj.j ... -
JAVA内存管理的一些经验.
2010-05-24 08:59 9231. 尽早释放无用对象的引用。 A a = new A( ... -
JAVA多态特殊性
2010-05-24 08:49 8971. 只有非private方法才可以被覆盖 2. 普通方法是多 ...
相关推荐
Java虚拟机 类装载器的体系结构 Java class文件 Java API
课程性质与设计思路 1.1课程的性质 计算机网络技术专业,确立了网络工程、网络管理与维护、网络应用开发、信息类网 络基础服务四个方面为地方信息化建设培养技术应用型网络人才的专业培养目标。课程 设置坚持以能力...
并行课程:数据库设计与应用 后续课程: :《JSP动态网站设计开发》、《安卓手机应用开发》 二、课程概述 课程定位 《面向对象程序设计》是计算机类专业的核心课程之一,也是基础课程之一, 在整个课程体系中起专业...
一共四个,其中pdf 三个包,源码一个包 第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE...
一共四个,其中pdf 三个包,源码一个包 第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE...
基于SNMP的网络拓扑发现 一、 SNMP简介 SNMP(Simple Network Management Protocol,...图3.1说明了SNMP网络管理框架的一般体系结构,它由四个主要部件构成,分别是:通信网络、网络协议、网络管理进程和被管网络实体。
2.设计模式是比 J2EE 等框架软件更小的体系结构,J2EE 中许多具体程序都是应用设计模式来完成的,当你深入到 J2EE 的内 部代码研究时,这点尤其明显,因此,如果你不具备设计模式的基础知识(GoF 的设计模式),你很难...
一共四个,其中pdf 三个包,源码一个包 第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE...
真正的客户机/服务器体系结构。 2.图形化用户界面,使系统管理和数据库管理更加直观、简单。 3.丰富的编程接口工具,为用户进行程序设计提供了更大的选择余地。 4.SQL Server与Windows NT完全集成,利用...
在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。 1:数据访问层:主要是对非原始数据...
[ASP.NET 2.0]PageParser.GetCompiledPageInstance中存在一个Bug 如何在DotNet 2的登录组件中检索用户的锁定状态及解锁? ASP.NET 2.0, 想说爱你不容易 SqlDataSource WEB控件:当DeleteCommandType= 遭遇 ASP.NET ...
1、介绍目标前国际上最优秀的GIS软件ARCCIS9体系结构及全面了解ARCCIS9.0桌面系统的体系结构和功能介绍,介绍ESRI的ARC-CATALOG,ARCTOOLBOX通用GIS解决方案的精彩设计以及最新的ARCCISENGINE和ARCCIS SERVER。...
真正的客户机/服务器体系结构。 2.图形化用户界面,使系统管理和数据库管理更加直观、简单。 3.丰富的编程接口工具,为用户进行程序设计提供了更大的选择余地。 4.SQL Server与Windows NT完全集成,利用...
ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。 拉里•埃里森 就业前景 从就业与择业的...