J2ME讲稿.docx
- 文档编号:26131946
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:14
- 大小:149.11KB
J2ME讲稿.docx
《J2ME讲稿.docx》由会员分享,可在线阅读,更多相关《J2ME讲稿.docx(14页珍藏版)》请在冰豆网上搜索。
J2ME讲稿
J2ME
一引言
无线Java是开放技术,其相关标准都是由业界共同制定的,可以在不同的芯片和手机操作系统上实现(有统一的兼容性测试工具确保这些实现的标准符合性和兼容性),
Java2平台包括三个版本,每个版本都针对不同的应用群,这三个版本具体为:
✧Java2企业版(Java2EnterpriseEditionJ2EE)――用于大型的可升级的商务服务应用
✧Java2标准版(Java2StandardEditionJ2SE)――用于传统且成熟的桌面应用
✧Java2小型版(Java2MicroEditionJ2ME)――用于新一代的应用程序,主要面向消费类电子产品和嵌入式设备
J2ME是SunMicrosystemsInc.针对市场日渐壮大的信息家电设备,在2000年推出的微型Java技术。
KVirtualMachine(KVM)是J2ME为了在有限的系统资源下,运行Java应用程序而设计出来的虚拟机。
对内存的需求量在KiloBytes等级,故此命名。
在实际操作中,KVM对于应用平台内存的需求量最少128Kbytes,在这个存储空间中包括了Java虚拟机、配置层所定义的最低需求、Java类库和程序运行所需的Heap空间。
J2ME是SunMicrosystemsInc.针对市场日渐壮大的信息家电设备,在2000年推出的微型Java技术。
KVirtualMachine(KVM)是J2ME为了在有限的系统资源下运行Java应用程序而设计出来的虚拟机。
对内存的需求量在KiloBytes等级,故此命名。
在实际操作中,KVM对于应用平台内存的需求量最少128Kbytes,在这个存储空间中包括了Java虚拟机、配置层所定义的最低需求、Java类库和程序运行所需的Heap空间。
二J2ME体系结构
J2ME开创了无线应用的新时代,比如:
多用户网络游戏、移动商务、企业的client/server应用。
MIDP、CLDC和KVM组成了开发无线Java应用的基础。
如图2-2所示:
MIDP应用
特定于设备的应用
本
地
应
用
特定于设备的类
MIDP类
CLDC类
KVM
本地系统软件
MID硬件
图2-2J2ME体系结构
1.MID硬件层(MIDHardwareLayer)
主要包括手机或者双向传呼机
2.本地软件层(NativeSofewareLayer)
包括由设备生产商提供的本地操作系统和系统库
2.KVM层
为Java应用提供了运行时环境
4.CLDC层
为无线应用提供了核心JavaAPI
5.MIDP层
提供了GUI库、持久存储库、网络库和时钟类
除了MIDP类库,厂商还提供了适用于他们自己设备的特定类库,使得应用开发商能充分利用其已有功能(比如电话功能),已有应用共享数据(如内置日历、地址簿),以及查询设备信息(比如电池寿命、信号强度等)。
通过使用这些由厂商提供的特定类可以大大增强无线应用功能,但由于这些超出了MIDP范围,所以使用这些类开发的应用程序,不便于在不同MIDP设备之间移动。
这就导致了应用移植过程的必要性和复杂性。
三J2ME系统组成
J2ME是一个专门面向小型设备应用的简易平台,这些设备包括移动电话、PDA、网络电话、数字电视机上的机顶盒、自动娱乐系统、导航系统、网络交互以及家用自动电器等。
为了支持品种繁多的设备类型,J2ME采用了模块化的、可升级的体系结构,J2ME在设备本机操作系统上定义了三层软件:
1.Java虚拟机层(JavaVirtualMachineLayer)
本层是Java虚拟机执行层,它是为设备的主机操作系统而定制的,支持特定的J2ME配置,用于J2ME的虚拟机有CVM、KVM。
2.配置层(ConfigurationLayer)
J2ME配置是为“横向”类设备而定义的类库,这类设备在总的内存资源和CPU处理能力方面的要求是相似的,连接设备配置(CDC)和有限连接设备配置(CLDC)是J2ME指定的两种配置。
架构层(ProfileLayer)
架构要建立在特定的配置层上面,J2ME架构与其特定的配置相关联,即某一J2ME架构为某一特定纵向市场的特殊要求定义了特定类库。
各部分详细介绍如下:
1.J2ME配置
配置与架构是J2ME结构中两个主要的组成部分,其主要目的是为每一组目标设备提供最优的虚拟机和类库。
配置,定义了Java虚拟机性能,以及使用于某一类特定设备的Java类库的最小集合。
这类设备代表了这一特定的横向市场,也就是说,配置确定了Java平台性能与类库的最低标准。
开发人员可以将它用于所有设备,配置中定义的类库对同一类设备都是适合的。
当前,J2ME有两种配置:
连接设备配置(CDC)和有限连接设备配置(CLDC),这两种配置分别拥有相同的总内存资源和CPU处理能力的设备类组。
CDC:
可以描述为共享的、固定的连接信息设备。
这些设备通常都具有丰富的用户界面功能,内存大小在2-16MB之间,以及32位及以上的CPU,能建立持续且高带宽的网络连接,通常使用TCP/IP协议。
典型的CDC设备包括:
电视机机顶盒、网络电视、网络电话、高端通信器材,以及汽车娱乐系统及导航系统。
CLDC:
可以描述为个人化的、移动的、连接信息设备。
这些设备通常只有简单的用户界面,内存在128K-1Mbit之间,16位/32位CPU,低带宽会间断的网络连接,且通常不使用TCP/IP协议。
典型的CLDC设备有:
低端手机、双向传呼机和掌上PalmOS。
手机上的无线应用开发使用的就是CLDC这种配置。
它提供的任何功能都可以在支持CLDC的设备上使用,其主要目标是确保各种资源有限的设备上,运行的应用程序具有可移植性和互操作性。
为了实现这一个目标,CLDC核心类库的设计就是把J2SEAPI压缩成最小库子集,而该子集仍可用于位于其上层的Profile的开发。
CLDC核心类库包括:
J2SEAPI子集类、特定于CLDC的新类。
配置层的这两种类型的类如图2-3:
一种是从J2SE继承来的类,另一种是专为满足小容量设备的需要而特别设计的类。
从J2SE继承的类一般未作变换,或者是相对应类的一个子集,如:
java.lang,java.io以及java.util包,如图所示,CLDC中继承类向上和CDC中的类兼容,CDC中继承的类和J2SE中的类兼容,非继承的、专门配置的类不与J2SE向上兼容,在CLDC中这些类属于通用连接框架(GenericConnectionFramework),他们在javax.microedition.io包中定义。
CLDC仅仅使用了37个J2SE平台下的类,都来自于java.lang,java.io,java.util包,其中CLDC没有继承与文件I/O相关的类,没有提供用于读写文本数据的FileReader、FileWriter,这是因为不是所有的CLDC设备都支持文件系统的概念。
图2-3CLDC类组成
2.J2ME虚拟机
配置同样对其基础的Java虚拟机特性做了规范,CDC和CLDC各有各自的优化虚拟机。
用于CDC的基础虚拟机是CVM,它是一个性能全面的小容量的Java蓝图(BluePrint)虚拟机,为高端消费类设备特别制造。
CVM有256KB的静态容量,CDC的ROM化容量大约为1MB;用于CLDC的基础虚拟机是KVM,为那些资源有限的设备特别设计。
KVM中K代表kilo,因为其系统内存资源以KB为单位计算。
KVM非常适用于16位/32位CPU,其总内存还不到几百KB(大约128KB),当前KVM的静态容量一般为50-80KB。
3.J2ME架构
在配置的基础上,架构又为一些特定的纵向市场、设备类组或工业界额外定义了一些API和特定架构中的类库,使得开发人员可以访问一些设备特有的功能,如:
图形用户界面、网络通信、持久存储等。
一般情况下,在某一架构中定义的类库与在其他架构中定义的类库是不兼容的。
已向公众公布的两种构建于CDC上的架构:
基础架构RMI架构,而构建在CLDC上的架构只公布了一种,即:
MID架构(MIDP)。
由Palm牵头的一些专业公司正积极致力于基于CLDC的PDA架构(PDAP)的定义。
而基于CDC的个人架构也正在定义中。
概括起来有以下几种架构:
✧CDC中基础架构要求适用的设备需要完整的Java虚拟机实现,并且要带有完整的Java2平台和标准版API
✧RMI架构是一个CDC架构,它定义了J2SE1.3RMIAPI的最小子集
✧个人架构(PersonalProfile)是一个CDC架构,它是从SUN的个人Java环境(PersonalJavaEnvironment)中扩展来的,对于为个人Java应用环境规范(PersonalJavaApplicationEnvironmentSpecification)1.1.x和2.2.x而开发的应用,它提供了相应的兼容性。
✧PDAP是一个CLDC架构,它为小型的、资源有限的手持设备提供了用户界面和数据存储,PDAP适用于由PalmOS驱动的手持设备
✧MIDP是一个CLDC架构,它为无线设备,如低端手机和双向传呼机提供了用户界面和持久存储、网络功能以及应用模型API。
目前可以供无线开发使用的只有两种Profile:
MIDP和iAppli,前者是Sun提出的很多厂商支持的一个标准,而后者是由日本NTTDoCoMo提出的一个标准Profile。
我们进行的手机无线应用开发就是针对MIDP进行的,MIDP在手机显示、网络、输入设备、内存等硬件方面都做了要求,除此以外,它还提供了供无线应用运行的软件环境:
✧应用程序生命周期管理器:
MIDP包含javax.microedition.midlet包,其中的类和方法用来在目标环境中启动、暂停、关闭应用程序。
✧用户界面和事件:
MIDP还提供了javax.microedition.lcdui包,其中的类和方法用来创建应用程序使用的用户界面组件
✧网络连接:
通过提供HttpConnection接口和Http协议实现子集,MIDP扩展了通用连接框架的ContentConnection接口。
✧在设备上存储数据:
MIDP提供javax.microedition.rms包,实现了基于记录的数据库管理系统,使用该包,应用程序可以把数据存在设备上。
四J2ME特性
J2ME这个Java版本涵盖了各式各样的消费性电子产品,与其它的J2SE、J2EE版本相同的是,J2ME平台维持了Java技术的几个重要特性:
✧相同的Java程序代码能在不同的平台、不同的时间、不同地点运行出相同的效果的跨平台特性
✧使用与其它版本相同的JavaProgramingLanguage来编写java程序代码
✧能在网络上安全流通
✧使用J2ME技术写出来的代码可以在J2SE甚至J2EE上运行
J2ME环境CLDC规格如下:
1.Java程序语言及Java虚拟机特性:
✧基本上支持CLDC的Java虚拟机必须尽量和JavaVirtualMachine规格兼容,但有以下特殊的限制:
✧不支持浮点运算(float和double)
✧不支持JavaNativeInterface(JNI)
✧不支持多线程
✧不支持用户定义的Java-Level类加载器
所有应用程序能用的JavaAPI被局限,且只能用JVM所提供的内存空间,这样才不会影响到底层操作系统自身的稳定性。
2.核心类库java.lang(和java.util)和输入输出(java.io)
CLDC所定义的类库是标准Java平台版本的一个子集,且是直接继承于J2SE核心类库,它包含系统类、文件类、集合类、输入输出、时间类、异常类、数字类等
3.连网功能
✧CLDC定义了如图2-4所示的通用连接框架(GenericConnectionFrameworkGCF)不同协议可由此框架来连网,这样提供了较大的灵活性。
CLDC定义的这种通用连接框架是一种独立于平台的框架,它提供的功能不依赖于任何特定设备,这种框架十分通用,它不实现任何I/O或网络连接的接口,而是由其上层的Profile来提供具体的接口实现。
所有连接都使用factoryConnector类的静态方法open()创建,若创建成功,该方法返回一个为主机设备实现通用连接接口的对象,例如:
✧Http连接:
Connector.open(“Http:
//:
port”);
✧套接字连接:
Connector.open(“socket:
//url:
port”);
✧串口通信:
Connector.open(“comm.:
0;baudrate=9600”);
用简单的字符串屏蔽连接所使用的各种协议的不同。
不论那种协议,都可以使得程序编码尽可能保持不变。
安全性
为了保护Java平台自身文件的安全性,除了调用类程序必须先通过类检查器(ClassfileVerification)的确认外,每个应用程序之间所用到的资源如内存等都受限于Java虚拟机提供的区域,且相互隔离,也就是所谓的Sandbox沙盒环境,此外,系统类程序不允许应用程序来覆盖(Override)
5.国际化功能
支持多国语言的功能,提供Unicode用于其它语系文字的转化工具
五硬件需求
无线设备必须满足一定标准才能支持J2ME,使得KVM、CLDC库更有效的运行,须满足以下条件:
✧可供Java平台使用的总内存资源160KB-512KB
✧一个25MHz倍速的16/32位CPU
✧低电池消耗
✧某些网络建立无线连接,连接可以间断,并且带宽有限(9600kbps或者更低)
✧Java虚拟机和CLDC库,需要128KB的固定内存
✧Java运行目标程序要32KB的临时内存
MIDP对硬件有如下基本要求:
1.显示器
屏幕尺寸:
96*54pixels、显示深度:
1Bit、象素形状:
(屏幕宽高比例)大约1:
1。
2.输入设备
拥有以下一种或者多种用于输入机制:
单手键盘、双手键盘或者触摸屏
3.内存
MIDP组件需要128KB固定内存、应用程序创建的程序要求8KB固定内存、Java运行时需要32KB临时内存(如Javaheap)
4.网络
双向、无线、可间断且带宽有限
六KVM介绍
6.1KVM简介
最早的KVM是在PalmOS上实现的,现在已许多公司将KVM置于自己的产品中,例如IBMVirtualAgeMicroEdition,Esmertec的Jbed,KadaSystem的KadaVM。
KVM被当作J2ME的CLDC规格中的Java虚拟机,是一个为了满足上层配置(Configuration)与框架(Profile)中定义的规格而实际操作出来的Java虚拟机。
KVM主要是Sun提出的在不同能力平台下的一个Java解决方案,这种技术的应用平台主要是在移动设备上,KVM最小只要160KB内存就可以运行,其中包含了128KB用来运行KVM本身机器所必备的基本类库。
J2ME白皮书中对KVM的描述如下:
✧为时钟频率只有25MHz的16位、32位CISC或者RISC处理器设计,静态内存在50KB-80KB之间的小设备
✧具有高可移植性
✧高度模块化(Modular),易定制(Customizable)
✧在满足上面几点的情况下能尽量完整、快速运行Java程序
6.2KVM安全机制
Java程序在KVM上运行的过程如图2-5所示:
图2-5KVM程序运行过程
KVM安全的实现是通过下面两个方面实现的:
✧虚拟机级安全:
一定要防止KVM执行的应用程序损害运行它的设备。
这点由类验证程序保证。
该程序将确保类的字节码不包含对无效内存地址的引用,并确保被加载的类以符合Java虚拟机规范的方式执行,在运行时不能调用本地方法。
✧应用程序级安全:
CLDC/KVM组合不允许定制安全管理器,支持CLDC的JVM提供了一种简单的沙盒(sandbox)安全模型,该模型通过确保应用程序在封闭的环境中运行,且只调用设备支持的类来实施安全。
6.3KVM内存管理机制
Java对内存管理的特点使得用Java开发者不需要对内存分配、回收等管理细节投入过多精力,就能合理的使用内存。
在创建对象、销毁对象时有专门的内存管理机制进行内存分配,在可分配内存不足以分配新的对象的情况下,Java虚拟机自动启用垃圾回收机制(GarbageCollector)进行垃圾回收,并对回收后的可用内存进行优化处理,使内存布局更加合理、紧凑,为分配大的对象提供空间。
Java的这种内存管理机制,不仅将程序人员从繁琐的内存管理中解放出来,将更多精力投入到业务逻辑的实现上,而且减少了内存碎片的产生,为程序正常运行提供保障。
同时Java的内存管理机制也是Java程序运行效率进一步提高的关键点之一。
Java虚拟机对内存的管理涉及到以下几个概念:
1.Java对象(JavaObject)
JavaHeap上的每一个对象都是由一个32bits的对象头(objectheader)和对象体(objectbody)组成的。
对象头存储对象信息,其中包括前24位的对象体objectbody大小信息,和6bits的对象类型信息,以及后面的两位留作他用的bits。
每一个Java创建的对象在内存中都是以这种格式存在的。
2.可用内存块(availablememorychunk)
内存中的可以被用来分配新对象的一块连续空间叫做可用内存块,他们可能由于垃圾回收的进行,而分布在不同的内存范围内,但是基本结构都是类似的。
可用内存块由一个块头来描述该块的信息,其中包括一个指向下一个可用内存块的指针来确定下一块可用内存的地址,和一个描述本块大小的32bitsSize字段组成,该Size字段内的值不包括其本身所占用的32bits大小。
3.可用内存链表
由可用内存块块头中指向下一个可用内存块的指针链接起来的链表。
对JavaHeap的管理其实就是对Java对象、可用内存链表的管理和操作。
内存管理基本上包括内存分配、垃圾回收、内存压缩几个方面:
1.内存分配
在KVM内部内存分配采用的是一种first-fit机制,也就是当应用程序创建一个对象时,由内存管理器检测可用内存链表,并且将第一个遇到的大于所需内存的可用内存块分配给该对象,并给对象加上描述对象信息的对象头部分,同时对可用内存块的大小字段进行修改。
当可用内存链表中没有合适所需内存大小的可用内存块时,会调用内存压缩机制进行内存压缩(compacting),将分散在不同范围内的对象进行压缩处理,重定位到一个紧凑的空间范围内,合并可用内存块。
2.垃圾回收
垃圾回收是KVM中内存管理的核心步骤。
Java中对象销毁不象C语言中调用对象的析构函数,或者free(object)方法进行内存释放,而是由KVM调用垃圾回收器进行垃圾回收,清理出不再使用的内存空间,这样既提供了满足需要的可用内存空间,又减少了内存泄漏的可能性,同时通过一定的优化,可以减少内存碎片的产生,提高程序运行速度。
目前垃圾回收基本上采用的是mark-sweep的机制。
TracingGarbageCollection,是一种源于可达性的垃圾回收机制,下面介绍几个该机制中用到的词语:
✧staticobject:
内存管理单元中不会移动的静态对象占用的空间,即静态内存的起始地址不会改变。
✧root:
通常由静态对象(包括全局变量),以及执行堆栈(executionstack)组成,而这些roots中包含了指向其他对象的指针。
✧可达性reachable:
若从root可以根据指针找到某个对象,则这个对象称为可达的,并且若从一个已确定可达的对象开始可以根据指针找到另一个对象,则这个被找到的对象也可达。
综上所述,只要从root开始,寻找所有可达的对象,并标记为可达,而那些没有被标记为可达的对象就是要回收的对象。
✧rootset:
由存在系统中的所有的root组成,TracingGarbageCollection会从rootset始寻找所有可达的对象。
在TracingGarbageCollection机制中,被标记为Reachable的对象会被当作是将来有可能被系统所用到的,而那些没有被标记为reachable的将被释放掉。
在实际操作中,TracingGarbageCollection将所有的对象都标记为不可达(unreachable)的,而后依据指针追踪可达对象,回收不可达对象。
在KVM中使用的垃圾回收机制建立在这种mark-sweep基础上,在内存不足时,虚拟机调用垃圾回收函数,进行垃圾回收。
在此基础上面的改进模型是mark-sweep-compact,也就是在回收完后,对分散的内存进行紧凑处理。
3.内存压缩(compacting)
内存压缩是在KVM内部移动或重新配置对象的内存空间,使得在对象和对象之间的碎片减少,并把内存地址两两相连的可用内存块合并为一个大的内存块的操作。
这样对内存进行优化处理,减少了内存碎片,提高了程序运行速度。
了解了内存管理机制,以及对象的存在形式,有助于我们在是否需要创建对象时进行资源衡量。
由于垃圾回收的特殊性,所以为了防止内存碎片的产生,在开发过程中我们应该考虑内存的合理安排,以降低系统调用垃圾回收器的可能,因为垃圾回收操作是一件很消耗资源的事情,并且由系统根据当前内存使用情况来决定调用时机,所以为了推迟这种调用,在开发中,我们要合理安排内存,减少内存碎片,利用更多资源运行我们的程序。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- J2ME 讲稿