除了 Java的编译器和虚拟机器之外还有一些相关的编译技术本文章试图做一个简单的说明 JIT编译器传统的 Java虚拟机器很愚蠢将一道 bytecode的指令翻译成机器码之后马上执行这些机器码执行完这批机器码之后就把这些机器码丢了接着再翻译下一道 bytecode的指令继续下去即使下次执行到以前执行过的 bytecode指令依然要重新翻译成机器码才能执行如此一来效率当然不好使用 JIT编译器(Just In Time piler)技术的虚拟机器比较聪明会把常常执行的部分在第一次先翻译好放在内存以后再次执行到这里时就不用再翻译直接从内存取出机器码即可执行这么一来只要你的内存够大 JIT编译器的技术够好你的 Java bytecode执行速度也可以逼近纯编译式的程序其它程序语言的编译器任何档案只要符合 Java bytecode的格式就可以被 Java虚拟机器执行制造出 Java bytecode的方式有许多种不一定要使用 Java语言来写程序才能编译成 Java bytecode Java是语言也是平台你可以不使用 Java语言(也就是 Java编译器)只使用 Java平台(也就是 Java虚拟机器)只要某语言有提供编译器能将该语言的原始码编译成 Java bytecode格式就可以在 Java平台上执行据我所知目前已经有下列语言提供兼容于 Java平台的编译器(以英文字母顺序排列) Aardappel Ada Agora BAMBOO Basic Bistro Bolero C C++ CLIPS COBOL Correlate Dawn E EcmaScript Eiffel Foo Forth Fortran Funnel Haskel Hojo javascript Jickle JIF Jinni Lisp LL LLP Logo Luck MINERVA Mini ML Modula NetRexx Nice Oberon Pascal PLAN Pnuts Prolog PS I Python Sather Scheme SELF Simkin Small Talk Tcl WebL Yassl Yoix Yoyo原生编译器如果你不在乎 Java程序能否跨平台你希望 Java程序能如同 C/C++一般被编译成机器码而非 Java bytecode那么你可以使用 Java原生编译器(native piler)目前已经有不少这样的产品可以使用 Java原生编译器有两大类一类可以把 Java的原始码编译成机器码另一类则可以把 Java bytecode编译成机器码反编译与混淆器 Java bytecode因为档案格式简单信息保留完整且指令是最简单的堆栈式(stack based)架构等因素所以很容易被反编译(de pilation)反编译指的是和编译相反的过程对 Java来说反编译就是把 Java bytecode转换成 Java原始码的过程为了防止你辛苦地开发出来的 Java bytecode被他人反编译成原始码你可以透过混淆器(obfuscator)将你的 Java bytecode转换成更混乱的 Java bytecode执行起来效果一样但是被混淆过的 Java bytecode比较不容易被反编译你通常要为此付出一点代价因为混淆过的程序执行速度通常会变慢且混淆器只能增加反编译的难度不能保证你的程序一定无法被反编译成功毕竟道高一尺魔高一丈如果有人愿意花许多时间和精力反编译你的 Java bytecode你根本就无法拦阻组译与反组译汇编语言(assembly)是一种非常接近机器码的语言将汇编语言转成机器码的工具称为组译器(assembler)反过来将机器码转成汇编语言的工具称为反组译器(dissembler)对于 Java虚拟机器来说 Java bytecode就如同它的机器码有没有一种语言是很接近 Java bytecode的呢?也就是说 Java有没有的汇编语言呢?基本上 Sun并未定义 Java的标准汇编语言但是有一些人定义了自己的 Java汇编语言并提供 Java的组译器(甚至反组译器)例如 Ja*** in以及 javaa都是 Java组译器前处理器前处理器(pre processor)也称为前编译器(pre piler)或前翻译器(pre translator)其目的在将源码中不符合语言规范的部分转换成符合语言规范的形式比方说我们可能在??????????Java源码中除了使用 Java语言之外还穿插使用自订的语法这些自订的语法无法被 Java编译器处理所以我们必须先透过一个前处理器来将自订语法的部分转换成 Java语言然后就可以交由 Java编译器处理目前有不少 Java的前处理器例如 iContract SQLJ都是用来扩充 Java语言之用的最佳化工具软件一般来说最佳化有两种让档案体积变小可以节省储存空间并加快网络传送速度让执行速度变快对于 Java来说还有第三种最佳化让程序结构变乱不容易被反编译也就是前面提到过的混淆(obfuscation)这三个目的之间常常互相排挤结构变乱通常会使得程序变慢且体积变大体积变小通常会使得速度变慢且结构变整齐速度变快通常会使得体积变大且结构变整齐 lishixinzhi/Article/program/Java/hx/201311/27007
大数据技术架构的分析层提供基于统计学的数据。
大数据的四层堆栈式技术架构:
1、基础层
第一层作为整个大数据技术架构基础的最底层,也是基础层。要实现大数据规模的应用,企业需要一个高度自动化的、可横向扩展的存储和计算平台。这个基础设施需要从以前的存储孤岛发展为具有共享能力的高容量存储池。容量、性能和吞吐量必须可以线性扩展。
云模型鼓励访问数据并提供弹性资源池来应对大规模问题,解决了如何存储大量数据,以及如何积聚所需的计算资源来操作数据的问题。在云中,数据跨多个节点调配和分布,使得数据更接近需要它的用户,从而可以缩短响应时间和提高生产率。
2、管理层
要支持在多源数据上做深层次的分析,大数据技术架构中需要一个管理平台,使结构化和非结构化数据管理为一体,具备实时传送和查询、计算功能。本层既包括数据的存储和管理,也涉及数据的计算。并行化和分布式是大数据管理平台所必须考虑的要素。
3、分析层
大数据应用需要大数据分析。分析层提供基于统计学的数据挖掘和机器学习算法,用于分析和解释数据集,帮助企业获得对数据价值深入的领悟。可扩展性强、使用灵活的大数据分析平台更可成为数据科学家的利器,起到事半功倍的效果。
4、应用层
大数据的价值体现在帮助企业进行决策和为终端用户提供服务的应用。不同的新型商业需求驱动了大数据的应用。反之,大数据应用为企业提供的竞争优势使得企业更加重视大数据的价值。新型大数据应用对大数据技术不断提出新的要求,大数据技术也因此在不断的发展变化中日趋成熟。