`
鳄鱼旭
  • 浏览: 76712 次
文章分类
社区版块
存档分类
最新评论

Java VM规范有感

 
阅读更多
较为仔细地看了JavaVM规范,还是颇有收获的。

关于线程:
   1. 每个线程使用独立的栈空间,栈空间的大小在实现上实际上有两种模式:1)固定大小的; 2)可动态扩容的模式(这一点有点出乎我意料之外,这种栈一般来说都不允许动态扩展的),具体支持哪种模式与实现者有关(不过java.lang.Thread类并不支持指定一个最大最小值之类的参数),因此个人认为对栈空间的扩容,支持的还是比较有限的。

关于指令:
    1. Java的指令占用空间为一个字节,因此Java的指令上限为256个

    2. 指令是带有数据类型信息的(比如iload的语义是将某个整数压入操作数栈),但是指令和数据类型并不是独立的,有些指令只为特定的一个或者几个数据类型准备的(原因是因为No.1,指令必须尽可能的精简,否则不够用)

    3. 由于No.2,导致相同的代码,不同的数据类型,最终生成的指令会有一定的差异,甚至是比较大的差异,比如iinc指令是做某整数的++操作,但是并没有linc(针对Long的++操作),因此
(int index++与 long index++生成指令并不相同,前者很简单,只有一个iinc,而后者则会翻译成类似于index = index + 1的指令: lconst_1 --> lload --> ladd三条指令),这一点很有趣。

    4. 很多数据类型,实际上Java支持的很有限,比如byte,short,boolean对于大多数指令而言,是直接翻译成为int类型的(所以不要以为byte.short占空间就那么少,其实是和int差不多的)
    5. 一般来说使用long,fload,double等类型生成的指令要比int长的比较多,但是byte,short,boolean和int一般来说没有什么差别

    6. 以前看开源代码,不知道为什么大家会吧 int i ; if(i<=1) 写成int i; if(i<2),只是自己也照抄了,现在知道了,条件跳转并没有大于等于、小于等于的指令,所以前面的写法实际上会多生成好几条指令(也许是我太追求完美了,二者执行时间并不会有什么差异,但是在没有付出额外成本的情况下,能提高效率的地方还是要提高,这个是一个程序员的素养,我认为)

    7.this指针:实际上编译的时候会将this作为一个隐含的参数传入目标方法,但是static方法除外,所以实际上static方法和普通方法比较,static方法会少用一个参数(this)

关于反编译:
    实际上反编译不能完全还原源代码的信息,比较典型的信息有:
    1. 循环信息(for,while,dowhile等)
    2. 方法参数名:这就是为什么反编译参数只是将参数名命名为int0,object1等名称
    3. 局部变量名:和参数名一样(指令集引用参数和局部变量的时候使用的是变量在
        线程栈里面的偏移量的方式引用的,这一点与C语言的编译方式很类似),但是属性名、方法名等使用的都是名称(实际上是维持对常量池的一个索引)
    4. 注释信息(这一点比较容易理解,编译的时候如果把注释也编译进去实在没什么用)
分享到:
评论

相关推荐

    Java VM介绍

    Java VM介绍PPT,Java VM介绍

    java Vm 可用

    JAVA VM java vmJAVA VM java vmJAVA VM java vmJAVA VM java vmJAVA VM java vmJAVA VM java vmJAVA VM java vmJAVA VM java vmJAVA VM java vmJAVA VM java vmJAVA VM java vmJAVA VM java vmJAVA VM java vmJAVA ...

    Java VM 规范

    Java虚拟机(JVM)规范是Java编程语言的核心组成部分,它是Java程序运行的平台。它是一种抽象的计算设备,能够执行字节码,为开发者提供了一个跨平台的运行环境。"JVM Specification implementation"指的是对这个...

    java vm.exe

    Java VM(Java虚拟机)是Java平台的核心组成部分,它为运行Java应用程序提供了必要的环境。Java VM.exe 是在Windows操作系统上运行Java程序的关键组件,尤其在安装Mac OS的Java环境时,它是不可或缺的一部分。本文将...

    protege4.2_window64(include_java_VM)

    《Protege 4.2 for Windows 64位:集成Java VM的全面解析》 Protege是一款广泛应用于知识工程领域的开源本体编辑器,它为构建、浏览和共享本体提供了强大的工具支持。Protege 4.2是其在Windows 64位系统上的一个...

    Weka 3.60 Wthout Java VM

    3.60版本不仅保留了这些核心功能,还去除了对Java VM的依赖,这意味着用户可以直接运行该版本的Weka,无需预先安装Java环境,降低了软件的使用门槛。 在Weka中,数据预处理是数据分析的第一步,包括数据清洗、数据...

    Microsoft Java VM虚拟机下载

    Microsoft Java VM虚拟机下载

    palm650用的JAVA VM

    "Midp20"则表示这个版本的Java VM支持MIDP(Mobile Information Device Profile)2.0规范,这是Java ME(Micro Edition)的一个子集,专为移动设备设计,提供了开发移动应用的基本框架和API。 通过这个Java VM,...

    Java_vm.rar_java vm lin_java vm lin_java 虚拟机_os20_vm

    在Linux和OS20这样的操作系统上移植Java VM,是为了确保Java应用能在这些平台上无缝运行。 Java VM在Linux上的移植涉及到多个层次的理解和技术挑战。首先,JVM需要理解和模拟目标操作系统的底层机制,包括内存管理...

    Google Andorid Dalvik JavaVM Kernel Code MIPS Version

    标题 "Google Android Dalvik JavaVM Kernel Code MIPS Version" 指的是 Google 在 Android 系统中针对 MIPS 架构实现的 Dalvik 虚拟机内核代码。Dalvik 是 Android 系统早期采用的一种虚拟机,它专门设计用于运行 ...

    Oracle 12c 12.2.0.1 JavaVM补丁12.2.0.1.180717

    Oracle 12c 12.2.0.1 JavaVM补丁for Linux x64 Patch 27923353 - Oracle JavaVM Component Release Update 12.2.0.1.180717

    Java HotSpot VM Options

    ### Java HotSpot VM Options #### 概述 Java HotSpot虚拟机(Java HotSpot VM)是Oracle提供的Java运行环境的核心组件之一,它负责执行Java字节码并提供一系列的优化功能来提高Java程序的性能。在Java开发和部署...

    JavaVM运作原理

    ### Java虚拟机(JVM)运作原理 #### 一、引言 Java虚拟机(JVM)作为Java程序的运行环境,对于理解Java程序的行为至关重要。本文将深入探讨JVM的基本概念及其内部工作原理,帮助读者更好地理解Java程序如何在JVM上...

    Microsoft Java VM虚拟机 2003

    Microsoft Java VM虚拟机 2003,Microsoft Java VM虚拟机 2003,Microsoft Java VM虚拟机 2003

    java vm hfsexplore必备

    Java VM(Java虚拟机)是Java程序运行的基础,它负责解释和执行字节码,使得Java具有跨平台的能力。HFSExplore则是一款强大的文件管理工具,尤其在处理HFS+(苹果Mac OS X系统使用的文件系统)格式的磁盘镜像时非常...

    Java_VM_SPEC

    Java Virtual Machine Specification

    Java虚拟机(Java VM) msjavax86 微软java虚拟机

    Java VM的设计遵循了“一次编写,到处运行”(Write Once, Run Anywhere)的理念,使得开发者无需为不同的操作系统重新编译代码。这种跨平台能力得益于Java的平台无关性,Java虚拟机成为连接不同系统平台的关键桥梁...

    protege4.2_window(include_java_VM)

    《Protege 4.2 for Windows:集成Java VM的智能知识编辑器》 Protege 4.2 是一个广泛使用的开源框架,专为构建和编辑本体而设计,尤其在生物医学、信息技术和认知科学等领域有广泛应用。标题中的"protege4.2_window...

    Java虚拟机规范中文版

    3. 运行时数据区:JVM在执行Java程序的过程中,需要为其创建一些数据区域,主要包括堆(Heap)、方法区(Method Area)、虚拟机栈(VM Stack)、本地方法栈(Native Method Stack)和程序计数器(Program Counter)...

    Java vm.pptx

    Java VM(Java虚拟机)是Java程序运行的核心组件,它负责解释和执行字节码,为Java应用程序提供了一个跨平台的运行环境。本文件“Java vm.pptx”可能是一份详细讲解Java虚拟机的工作原理和相关技术的电子书。 在...

Global site tag (gtag.js) - Google Analytics