热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深层次的挖掘---Java的一些看法JTEK

文章标题:深层次的挖掘---Java的一些看法JTEK。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

  Java Chip 是 Optimized for Java 的 OOP、exption-handling、memory/garbage collection 的特制 chip,而 x86 (即传统 CPU) 并没有针对 C++ 所编译的 machine code 中的 new/exception-handling/memory allocation/late-binding 作硬件支持的最佳化动作。
  
  拜 VLSI 之赐,memory allocation 以及 garabage collection 的动作可交由硬件来实作。在 modem 或电视中,用以数字模拟转换的 DSP (数字讯号处理) chip 而言,有所谓的 bit-reverse (作 FFT [快速傅立叶转换] 用的),倘若以一般 x86 来做这个动作,起码慢 10 倍以上。又如以往的浮点咚悖?日?颠算慢了 20 ~ 30 倍,但因有了浮点加速器的出现,浮点咚愕乃俣瓤?檎?颠算的 1.3 倍!
  
  前述提到将 JVM 以 co-processor 形式实作的方式,可以参考 Nazomi Communica-tions [2] 公司的产品,他们推出一套 Java 加速芯片,这个代号为 JA108 的产品专门针对 2G/2.5G 或 3G 的手机使用。不需要加装额外的内存,只需将这 JA 208IC 植入原有系统设计中,便可大幅提升 Java 应用程序效率达 15 至 60 倍。
  
  接着,笔者在 Pentium II 上咦? linux 进行以下实验:(原始码与machine code 的对照)
  
  c++ 的 virtaul method calling:
  ┌──────────────────────────┐
  │21: testx -> setx(20); // testx 是一个指针对象 │
  │──────────────────────────│
  │00401091 push 00000014 │
  │00401093 mov eax,dword ptr [testx] │
  │00401096 mov eax,dword ptr [eax] │
  │00401098 mov ecx,dword ptr [testx] │
  │0040109b call dword ptr [eax] │
  └──────────────────────────┘
  不算 argument 4 个指令
  
  c 的一般 call:
  ┌───────────────────────────┐
  │ good() │
  │───────────────────────────│
  │0040109f call @ILT+0(?good@@YAXH@Z) (00401000) │
  │004010a4 add esp,00000004 │
  └───────────────────────────┘
  不算 argument 2 个指令
  
  java 的 virtual call:
  ┌───────────────────────────┐
  │my.getData(33); │
  │───────────────────────────│
  │ aload_2 │
  │ bipush 33 │
  │ invokevirtual #9 │
  └───────────────────────────┘
  不算 argument 2 个指令.
  
  c++ 的 constructor:
  ┌────────────────────────────┐
  │test *testx = new test(); │
  │────────────────────────────│
  │00401056 push 00000008 │
  │00401058 call ??2@YAPAXI@Z (00401184) │
  │0040105d add esp,00000004 │
  │00401060 mov dword ptr [ebp-0c],eax │
  │00401063 cmp dword ptr [ebp-0c],00000000 │
  │00401067 je main+00000030 (0040107d) │
  │0040106d mov ecx,dword ptr [ebp-0c] │
  │00401070 call @ILT+15(??0test@@QAE@XZ) (0040100f)│
  │00401075 mov dword ptr [testx],eax │
  │00401078 jmp main+00000037 (00401084) │
  │0040107d mov dword ptr [testx],00000000 │
  └────────────────────────────┘
  11 个指令
  
  C++ destructor:
  ┌───────────────────────────┐
  │delete testx; │
  │───────────────────────────│
  │004010a7 mov eax,dword ptr [testx] │
  │004010aa mov dword ptr [ebp-10],eax │
  │004010ad mov eax,dword ptr [ebp-10] │
  │004010b0 mov dword ptr [ebp-14],eax │
  │004010b3 mov eax,dword ptr [ebp-14] │
  │004010b6 push eax │
  │004010b7 call ??3@YAXPAX@Z (00401194) │
  │004010bc add esp,00000004 │
  └───────────────────────────┘
  8 个指令
  
  java 的 constructor:
  ┌───────────────────────────┐
  │my my1 = new my(); │
  │───────────────────────────│
  │new #2 │
  │invokenonvirtual #11 ()V> │
  └───────────────────────────┘
  2 个指令
  
  由此可发现,对动态配置对象的操作而言,Java 一个 method call 只要一个machine code,但用 x86 相对需要 4 个,这是 Java 在指令集层面直接支持所致。我们显而易见 Java 的一个优势 —─ 目的码很小,可轻易置于资源困窘的家电设备中,再加上许多现成的 APIs 可进行呼叫、继承的使用,简洁的程序代码就可发挥强大的力量。'
推荐阅读
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文详细介绍 Go+ 编程语言中的上下文处理机制,涵盖其基本概念、关键方法及应用场景。Go+ 是一门结合了 Go 的高效工程开发特性和 Python 数据科学功能的编程语言。 ... [详细]
  • Valve 发布 Steam Deck 的新版 Windows 驱动程序
    Valve 最新发布了针对 Steam Deck 掌机的 Windows 驱动程序,旨在提升其在 Windows 环境下的兼容性、安全性和性能表现。 ... [详细]
  • 本文详细介绍了 GWT 中 PopupPanel 类的 onKeyDownPreview 方法,提供了多个代码示例及应用场景,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本题探讨了一种字符串变换方法,旨在判断两个给定的字符串是否可以通过特定的字母替换和位置交换操作相互转换。核心在于找到这些变换中的不变量,从而确定转换的可能性。 ... [详细]
  • 在 Windows 10 中,F1 至 F12 键默认设置为快捷功能键。本文将介绍几种有效方法来禁用这些快捷键,并恢复其标准功能键的作用。请注意,部分笔记本电脑的快捷键可能无法完全关闭。 ... [详细]
  • 资源推荐 | TensorFlow官方中文教程助力英语非母语者学习
    来源:机器之心。本文详细介绍了TensorFlow官方提供的中文版教程和指南,帮助开发者更好地理解和应用这一强大的开源机器学习平台。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 计算机网络复习:第五章 网络层控制平面
    本文探讨了网络层的控制平面,包括转发和路由选择的基本原理。转发在数据平面上实现,通过配置路由器中的转发表完成;而路由选择则在控制平面上进行,涉及路由器中路由表的配置与更新。此外,文章还介绍了ICMP协议、两种控制平面的实现方法、路由选择算法及其分类等内容。 ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • This guide provides a comprehensive step-by-step approach to successfully installing the MongoDB PHP driver on XAMPP for macOS, ensuring a smooth and efficient setup process. ... [详细]
  • 探讨如何高效使用FastJSON进行JSON数据解析,特别是从复杂嵌套结构中提取特定字段值的方法。 ... [详细]
author-avatar
err2356267
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有