PhoneMe Advanced 浅度探索三----虚拟机内部

sun的phoneme sun 提供的移動式虛擬機器,有支援 awt gui 立即下载

 Mark Lam has been a virtual machine engineer in the JavaME CDC team at Sun Microsystems for over 6 years. Before joining Sun, he was a real-time embedded systems developer for 6+ years, working on application frameworks, graphics systems, networking protocols, game development, and fault tolerant systems amongst other things, on devices ranging from 64KB 8bit uControllers to 32-bit RISC machines.

 

 原文URL:http://weblogs.java.net/blog/mlam/archive/2006/11/introduction_to_1.html

 

           如果你现在在阅读这篇文章,那么你对Sun通过PhoneMe工程来开放J2ME源代码有所了解,如果不是,点这里了解关于PhoneME。
一些背景信息
       开放我们代码的目的是允许你能够访问它,学习它,并有可能贡献你自己的改进。现在你已经可以访问一个代码链了,但访问和能够理解以及贡献有很大区别,它需要一些特别的知识。就大部分来说,只有Sun的雇员和少数例外(使用我们技术的公司的一些核心虚拟机工程师)能够这样做。我提到的知识包括:代码规范、术语表、设计原理、代码组织和设计权衡等等。但我相信你有足够的智慧来及时的领会这些,但我想这不是你在这个项目里开始的地方。
因此,我会就这些主题写一系列的文章(从这篇开始)来使我们的交流变的更容易,使每个人都能得到很到的资料而不用浪费时间在平常的事情上。我也会写一些像“怎样确定子系统的工作”之类的技术文章当我有灵感的时候。我允许你留下注释来告诉我你想我讨论的主题,或是你想我阐述明白的事情。在我选择文章主题的时候会考虑这些。
       在我开始前,你会问我如果来共享这些知识(为什么你要相信我的确知道我在谈论什么)。因此,关于我:工作在PhoeMe Advanced项目的虚拟机小组,负责建立和维护虚拟机。我从CDC1.0发布前就在这个小组工作。因此我和这些代码已经工作了很长的时间。在我们小组工作的过程中,我们不会正式的把虚拟机按我们工作的分成部分。我们基本会在任何需要的地方做必须的工作。因此,每一个虚拟机工程师的代码知识都是全面的。当然,我们每个人都有比其他人熟悉的领域。我需要指出我是一个虚拟机工程师(相对于类库工程师),我的专业技能集中在虚拟机和一些核心系统代码上。我也有一般的标准类库知识,但和他们比我不是专家。我们每个工程师都有自己的领域。因此我会写关于PhoneMe Advanced虚拟机的文章,因为这是我擅长的领域。
好的,让我们开始我们的第一个主题。
The meat(不知道怎么翻译了)
    前面,我说过深奥的知识我们会很少涉及,甚至在使用我们技术的用户里面。原因是这些用户很少有需要和动机去修改我们称作 共享代码 的部分。但现在这不会维持太久了。有太多的创新和特点需要在我们的代码里实现,这部分历史只限于Sun的雇员。我们的用户,在其他方面,需要关注的是我们称为 HPI (Host Porting Interface)的代码部分。点这里察看CDC移植指南,它会告诉你 HPI 的细节。实际上,在代码里有 HPI 文档如果你知道在哪能看到的话。你也可以从其他网页上找到一些有趣的文档。
设计原理(Design Philosophy)
       虚拟机被设计成高移植性,尽可能的减小代码以用于尽可能多的平台。这是虚拟机的基本规则。
    在共享机制下保证尽可能多的普通代码被减小。只有依靠硬件和OS的代码在共享代码以外。这些和硬件和OS捆定的指那些 目标或平台特殊的代码。点这里察看PhoneME Advanced src 列表。这有几个特殊的例子, arm ,linux ,linux-arm 文件夹。Linux 目录包含那些所有在linux移植下用到的代码。这个通常有一些 HPI 执行被调用,从 share 目录下。
     Linux-arm目录包含附加的用户定制的全部或重载的执行在linux目录。这些用户定制只能对于linux arm 移植。
     arm 目录包含针对arm的特殊代码,通常,他们看起来是一些有效函数(有些情况它们是汇编代码)。它们能被不同的arm平台移植调用。
     你在OS文件夹(如linux)下可以找到代码同等的共享文件夹(包括它们的子目录),紧随其后的是OS-CUP(例如: linux-arm)和CPU(如 arm)。这些事实表明了VM是多么的可以移植。移植成果通常只需要执行活修改目标特定的文件(这只是总代码里面的很小一部分)。
    我们工作的多数和共享代码里的创新对于目标特定代码只支持我们的决心来对所有移植平台最优化性能是相反的。这样,大部分性能工作都在共享代码里,这对每个移植都有好处。这样我们希望应用的特殊移植都被最优化。为了做到这点,我们常常把它们放在适当的OS-CPU或CPU文件夹下。
        我们代码组织的另一方面是代码维护以便于阅读。你会发现共享代码没有用 #ifdefs来定制不同的OS和CPU体系。你可以看到#ifdefs被enabling/disabling VM特性代替。你也可以看到OS,CPU和OS-CPU文件仍然易读,因为他们没有被#ifdefs用来和其他体系分开。
       在src文件夹,你可以看到portlibs文件夹。Portlibs被用来保存那些对多个移植来说通用的,但又不完全能以OS或CPU来区分的代码。一个例子就是工具链(gcc)或库/标准(posix,ansi)。多种的移植(OS和OS-CPU文件)可以选择使用portlibs里适当的代码。
       下面一个需要立即的概念是代码组织:根据OO术语,VM有一个父类。这个父类在共享代码里是明确的。每一个特定OS和CPU目标移植的VM是它的子类,通过继承来实现重用。OS代码是共享代码的直接子类。OS-CPU代码是OS代码的子类。CPU文件夹下的代码是可以被OS-CPU类选择使用的有用库。Portlibs 代码是OS-CPU类可以选用的另外的库
     总的来说,单个VM对一个给的的平台(OS和CPU)是incamated(这个词不知道什么意思)。无论如何,这是一个来自OS-CPU VM类的示例,它扩展了OS VM类,OS类又扩展了共享VM类。OS-CPU VM类也可以重用那些在CPU和portlibs里被授权的类。
      留意,这只是代码组织上的一个概念模型。你会发现在代码里的父和子VM没有参考。这个概念模型表明看来也不完美。你可以发现一些代码关联方面的范围不适合这个提取。是的,这是一个例外,但这个模型是一个普通规则。
这对你意味着什么
    当你计划寻找那些完成某些功能的代码,想想这些功能的属于(shared,OS,OS-CPU,or in the CPU or portlibs libraries)。这可以帮助你快速的定位你感兴趣的代码。
    你也可以对你想贡献的代码做同样的思考。这个代码组织是VM完成的一个关键因素,它便于移植(这是对移动和嵌入式领域的VM是非常重要的特点)。代码回顾过程对代码贡献也是必须考虑到的。
    正如我前面提及的,不遵守这些协定你可以得到一些例外。请不要使用那些偏离协定的借口。作为代替,这些已存在的异常会被相应的修正(如果可能)。或者有一个很好的技术理由,这些情况不适合希望的模型。如果理由充分这些异常是被允许的。
嗨,等一下
 所有那些关于可移植的部分听起来都是很好的,但是不是所有的这些层都在性能上有效果?回答是否定的!“不”是对那些我们担心的例子。是不是VM作为高执行蚂蚁它可以内联到任何地方,摆脱压条?可能不会,但我们在可移植和易维护中有一个折中。注意,在实践中,一些执行是可以被忽略的。这就是说,代码不被执行在本地路径。层使用了多样的技术来被执行(那些我在这不会深入)并防止不必要的执行降低与它有关的损失。当然,小组有一些度量来确保这些代码是有竞争力的。
 让我来说下其他问题:如果我们不试着挤出每一点可能的性能(因为我们必须权衡我们的设计原理),那么有多少性能是足够的呢?我会在下篇文章回答这个问题。


文章出处:DIY部落(http://www.diybl.com/course/3_program/java/javajs/20090303/157496.html)

S32K系列之PDB框图详解及PDB触发ADC 可编程延迟模块PDB,PDB可提供从内部或外部触发或可编程间隔信号到ADC硬件触发输入的可控制延迟。 PDB可以选择提供脉冲输出,用作CMP块中的采样窗口。 S32K系列的PDB资源如下表: PDB功能框图 在下图中,以下字母表示的意义: N:PDB通道的总数 n:PDB通道号,范围从0到N-1 M:每个PDB通道的总可用预触发 m:预触发编号,范围从0到M-1 Y:脉冲输出的总数 y:脉冲数... 阅读详情

相关推荐

Python+Vue计算机毕业设计风电场监控系统的设计与实现7bd6i(程序+LW+源码+部署)

Python3.7.7+Django+Mysql5.7+pip list+HBuilderX(Vscode也行)+Vue+Pychram社区版。2. 前端:vue+css+javascript+jQuery+easyUI+highcharts。2.IDE环境:Python和Python 社区版都可以。Django + Vue +Python+Mysql 等等组成,B/S模式等等。该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。1. 后端:Python、Vue、Django、Mysql。

华信计算机毕设源码程序 343

移植java虚拟机到EM2440开发板

因为是客户的要求,需要移植Java虚拟机到

weixianya的专栏 1350

SpringCloud最新最全面试题

在服务注册与发现中,有一个注册中心。当服务器启动的时候,会把当前自己服务器的信息比如服务地址通讯地址等以别名方式注册到注册中心上。另一方(消费者服务提供者),以该别名的方式去注册中心上获取到实际的服务通讯地址,然后再实现本地RPC调用RPC远程调用框架核心设计思想:在于注册中心,因为使用注册中心管理每个服务与服务之间的一个依赖关系(服务治理概念)。在任何RPC远程框架中,都会有一个注册中心存放服务地址相关信息(接口地址)。

qq_38196449的博客 4329

PhoneMe Advanced 浅度探索四----性能

 Mark Lam has been a virtual machine engineer in the JavaME CDC team at Sun Microsystems for over 6 years. Before joining Sun, he was a real-time embedded systems developer for 6+ years, working on ap

91program 的流水空间 1842

GRCNN抓取网络学习3【自制Jacquard数据集模型调优】

请先完成,这样有利于下面操作的理解!然后第二步是,有了自己的数据集输入到GRCNN中是三种文件,那么可以GRCNN抓取网络学习2【自制Jacquard数据集训练】!既然学会训练,那么开展下一步计划模型调优。GRCNN源码:https://github.com/skumra/robotic-grasping。

vor234的博客 2502

三种方式实现电脑端同时登陆多个微信

现在越来越人都有两个甚至多个微信号,有时候我们需要登录在电脑回复消息,那么怎样才能在一个电脑上同时登录两个微信甚至是多个微信号(微信多开)呢?希望下列三种方法能对各位博友有帮助。 方法一:微信网页版实现 我们知道,目前网页版微信还是可以使用的。所以,我们可以利用多个浏览器来实现在同一台电脑上登录两个或多个微信的目的。 1.首先,我们在浏览器的搜索栏输入“微信网页版”,点击搜索并点开搜索到的带“官网”标志的链接进入网页版微信。 2.打开另外一个浏览器,比如刚才打开的是自己安装的第三方浏览器,那么我们再打开W

清平乐的技术专栏 1万+

phoneMe的编译过程,基于win32平台

                                                phoneME Feature Software MR2 简介和编译                             phoneME分为phoneME Feature Software和phoneME Advanced Software两个子项目,分别对应了CLDC和CDC的实现。 phonem

chenzhp的专栏 2192

属性控制图与P控制图诊断介绍

属性控制图是统计过程控制(SPC)中用于监控离散数据的工具,适用于不符合(次品)或缺陷计数的情况。常见的属性控制图包括P图、NP图、C图和U图,其中P控制图(比例控制图)用于监控不合格品率(即样本中不合格品占总样本的比例)。以下是一个简单的C#代码示例,用于计算P控制图的中心线和控制限,并输出结果。1. 控制限外点:点落在上控制限(UCL)或下控制限(LCL)之外,表明过程失控。- 遍历每个样本,计算比例、标准差、上控制限(UCL)和下控制限(LCL)。P控制图基于二项分布,计算不合格品比例的控制限。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 1082

PhoneMe 浅度探索 一 (PhoneME Advanced 目录结构)

The article translate from Darryl Moceks blog. Darryl Mocek is a staff engineer for sun microsystems,Inc. currently working on J2ME CDC and related techonlogies. the URL is : http://weblogs.java.net/

vrix的专栏 1153

倍福EL5101模块连接编码器

1、 EL5101模块简介:EL5101为单通道增量型编码器计数模块,一共有EL5101-0000、EL5101-0010、EL5101-0011、EL5101-0090(尚未供货)四种型号,其中EL5101-0000比较常用,本例使用EL5101-0000连接增量型编码器 2、 硬件外观和接线 在这里插入图片描述 3、 指示灯说明 4、和编码器连接的案例 ......

weixin_41883890的博客 6502

195、大模型蒸馏与压缩:知识蒸馏与VLA模型轻量化

折腾完这一整套流程,最大的感悟是:知识蒸馏不是简单的模型压缩,而是知识迁移的工程艺术。每一步都有坑,每个参数都可能影响最终性能。给后来者的建议是:先别急着上蒸馏,把teacher模型的推理延迟和显存占用测清楚,确定瓶颈在哪里——是计算量太大还是内存带宽不够,这决定了你该用蒸馏还是量化还是剪枝。蒸馏训练时一定要监控每一层的特征对齐loss,别只看总loss。如果某一层的对齐loss特别高,说明student在这一层学歪了,需要调整该层的损失权重或者增加该层的投影头容量。

sundong_81的博客 113

PhoneME简介(翻译)

 PhoneME简介(翻译)作者:陈跃峰出自:http://blog.youkuaiyun.com/mailbomb        phoneME Feature software是一个优化了的Java ME架构。它的核心是支持多任务的MIDP2.1规范实现。       当phoneME Feature software运行多个MIDlet时,它只使用一个系统进程,因为一个Java虚

爪哇米工作室陈跃峰的移动开发博客 4977

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

PhoneMe Advanced 浅度探索九----CVM堆和代码执行

导读:   Mark Lam has been a virtual machine engineer in the JavaME CDC team at Sun Microsystems for over 6 years. Before joining Sun, he was a real-time embedded systems developer for 6+ years, work

xu的blog 1141

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

PhoneMe Advanced 浅度探索七 ----JAVA平台的多任务:什么是大交易?

 Mark Lam has been a virtual machine engineer in the JavaME CDC team at Sun Microsystems for over 6 years. Before joining Sun, he was a real-time embedded systems developer for 6+ years, working on

91program 的流水空间 2369

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

PhoneMe Advanced 代码浅读一----CVM启动和初始化过程

导读:   Jiangli Zhou joined Sun Microsystems in 1999. She has been in the J2ME CDC VM (CVM) team since 2000. Over the years, she has worked on various areas in the VM, including ROMizer, classloader

xu的blog 1534

嵌入式Java VMs比较

Robert Lougher发布了嵌入式JVM比较结果,参与比较的都是开源Java VMs,有JamVM、PhoneME advanced和Cacao。从各项比较结果来看,JamVM优于其他两者,Cacao最差。           查看详细测试结果,参考http://bugblogger.com/java-vms-compared-160/...

smmi的专栏 404

phoneME

phoneME是SUN Open Source Java中的一个重要项目,包含了CLDC和CDC的HotSpot实现以及多个JSR。相比起以前能下载到的RI,phoneME是一个真正经历过众多实际产品验证的,商业级的JavaME实现。如果你是虚拟机技术的爱好者,或是热衷于嵌入式编程的hacker,那么加入phoneME社区,把玩一下 HotSpot VM的源码是件饶有趣味的事情。首先,到phone...

freeandperson的专栏 416

USB 技术系列 11 · USB Linux 驱动框架

本文系统解析Linux USB驱动框架,涵盖USB Core、HCD(xhci-hcd/dwc3)、类驱动(CDC/HID/Mass Storage)分层架构,详解usb_device_id匹配、probe/disconnect生命周期及Device Tree配置。结合RISC-V N300实战,揭示Host/Device双模式驱动开发核心逻辑,助力嵌入式BSP开发者掌握USB子系统全栈能力。

peter_pan_study的博客 283

Linux 服务器性能排查手册(2026):CPU、内存、磁盘IO、网络四大瓶颈定位

iptables 四表五链模型、firewalld zone 信任级别、云安全组与主机防火墙的关系与优先级,避坑改了防火墙把自己挡在服务器外面的翻车事故。

2502_91473995的博客 344

Linux rm 误删文件恢复实操教程

Linux使用rm删除文件时,并不会直接抹除磁盘上的数据,只是移除文件索引,让系统不再识别这块空间。只要没有写入新数据,原有扇区内容就会保留。新文件写入才有可能覆盖这些区域,一旦覆盖就很难找回。恢复的本质就是扫描磁盘,找到这些还存在、但索引丢失的数据条目,再把它们导出保存到其他分区。越早停止写入,恢复成功的概率越高。

海天数据恢复-winhex数据恢复教程 243

Linux 常用命令 + GCC 编译全流程详解

本文为Linux与C语言初学者打造的实战指南,涵盖命令行核心技能:从文件操作、权限管理到查找、进程控制、打包压缩,最终深入剖析GCC编译四阶段(预处理、编译、汇编、链接),揭示gcc hello.c -o hello背后的完整流程。通过建立“一切皆文件”“命令即程序”等心智模型,帮助读者在纯命令行下完成代码开发全闭环,真正理解底层机制,适用于面试准备、跨平台开发及服务器部署场景。

2401_88413914的博客 284

嵌入式 Linux OOM Killer 触发逻辑与防误杀实战指南

本文深入解析嵌入式 Linux 下 OOM Killer 的触发机制,结合工业网关真实工程场景,提供从日志排查、内核参数调优到关键进程保护的完整落地方案,解决核心进程被误杀导致的业务中断问题。

嵌入式扫地僧 406

Linux FFmpeg深度解析之swr_convert调用流程与实战(四十六)

本篇目的:理解如何使用已初始化的SwrContext读取输入音频样本、生成输出样本并保留重采样延迟。音频转换不一定能在一次调用中输出与输入采样数按采样率比例换算出的全部样本。重采样器可能需要等待滤波数据,也可能因输出Buffer容量不足而暂存输入。会在内部维护转换状态,调用者需要按返回值处理实际输出,并在输入结束后刷新延迟数据。fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;

Android系统攻城狮 238

Linux epoll 一篇讲透:从 select/poll 到红黑树、LT/ET,再到完整 TCP 服务器

一万个客户端已经连上服务器,眼下只有十个客户端发来了数据。服务器怎样把时间花在这十个连接上?理解这个问题,就抓住了 epoll 的主线。接下来,我们沿着“为什么需要它 → 接口怎么用 → 内核如何实现 → LT/ET 怎么写 → 完整服务器怎么运行”的顺序,把知识连起来。**阅读基础:**了解socketbindlistenaccept的基本用途即可。本文示例面向 Linux,服务器使用 C++17,实验脚本使用 Python 3。

2601_94861874的博客 452

深入浅出聊聊 Linux 的 PageCache 与系统极致性能

本文深入浅出解析了 Linux PageCache 的核心机制,揭示其如何通过“延迟写、预读读”提升系统性能。以监控告警为切入点,阐明 free -h 中 buff/cache 并非真正占用,真正可用内存由 available 决定。结合 Kafka、Elasticsearch、MySQL 等实战场景,说明中间件如何依赖 PageCache 实现极致性能。强调不可手动清理缓存,并建议合理调优脏页参数,避免卡顿。最终指出:内存满≠危机,而是系统高效运行的体现。

小小默:进无止境 516

【Linux 命令实战(06):Linux 文件权限管理,掌握 chmod、chown、chgrp】

chmod:修改文件和目录权限。chown:修改文件所有者,也可以修改所属用户组。chgrp:修改文件所属用户组。r:读取。w:写入。x:执行,对于目录则表示进入和访问能力。ugo:分别代表所有者、所属组和其他用户。我认为,权限管理最重要的不是记住755644这些数字,而是先弄清楚谁需要访问文件、需要执行什么操作,再给出恰当的权限。尤其是在测试服务器和生产服务器上,不要为了图方便直接使用chmod 777。权限开放得越大,并不代表问题解决得越好。

一些微不足道的见解、希望能帮助各位 348
上一篇: PhoneMe Advanced 浅度探索四----性能
下一篇: PPhoneMe Advanced 浅度探索一----PhoneME Advanced 目录结构
普通网友
普通网友 领域专家: 编程技术技术领域 领域专家: 编程技术技术领域
博客等级 码龄25年 2837粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值