`
yushu1987
  • 浏览: 16605 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Java编译过程与c/c++编译过程有何不同

jvm 
阅读更多
你对Java编译过程和编译原理,Java编译程序将java源程序编译成jvm可执行代码--java字节码,并且Java编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将些符号引用信息保留在字节码中,由解释器在运行过程中创立内存布局,然后再通过查表来确定一个方法所在的地址,这样就有效地保证了java的可移植性和安全性。

  Java编译原理

  1、Java编译过程与c/c++编译过程不同

  Java编译程序将java源程序编译成jvm可执行代码--java字节码.

  c/c++编译过程:

  当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而生成的。因此在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。

  Java编译过程:

  Java编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将些符号引用信息保留在字节码中,由解释器在运行过程中创立内存布局,然后再通过查表来确定一个方法所在的地址,这样就有效地保证了java的可移植性和安全性。

  2、jvm工作原理

  运行jvm字符码的工作是由解释器来完成的。解释执行过程分三步进行:代码的装入、代码的校验、和代码的执行。

  装入代码的工作由“类装载器classloader”完成。类装载器负责装入运行一个程序需要的所有代码,这也包括程序代码中的类所继承的类和被调

  用的类。当类装载器装入一个类时,该类被放在自己的名字空间中。除了通过符号引用自己名字空间以外的类,类之间没有其他办法可以影响其他类。在本台计算机的所有类都在同一地址空间中,而所有从外部引进的类,都有一个自己独立的名字空间。这使得本地类通过共享相同的名字空间获得较高的运行效率,同时又保证它们与从外部引进的类不会相互影响。

  当装入了运行程序需要的所有类后,解释器便可确定整个可执行程序的内存布局。解释器为符号引用与特定的地址空间建立对应关系及查询表。通过在这一阶段确定代码的内布局,java很好地解决了由超类改变而使子类崩溃的问题,同时也防止了代码的非法访问。

  随后,被装入的代码由字节码校验器进行检查。校验器可以发现操作数栈益处、非法数据类型转化等多种错误。通过校验后,代码便开始执行了。

  Java字节码的执行有两种方式:

  1)即时编译方式:解释器先将字节编译成机器码,然后再执行该机器码。

  2)解释执行方式:解释器通过每次解释并执行一小段代码来完成java字节码程序的所有操作。本节关于Java编译的内容介绍到这里,请关注本节其他相关报道。
分享到:
评论

相关推荐

    java与c/c++的区别

    总的来说,Java 与 C/C++ 各有优势,Java 更适合跨平台、快速开发和大型企业级应用,而C/C++则更适合对性能有极高要求、需要底层控制的场合。选择使用哪种语言取决于具体项目需求和团队技能集。在实际开发中,两者也...

    JNI DEMO:java jni技术 调用 c/c++ 的dll

    在这个"JNI DEMO"中,我们将探讨如何使用JNI来调用C/C++编译生成的DLL(动态链接库)文件。 首先,我们需要了解JNI的基本工作原理。JNI为Java程序提供了一种机制,使得Java代码可以声明native方法,这些方法在Java...

    java调用C/C++过程

    5. **编译C/C++代码**:使用C/C++编译器(如GCC)将源代码编译为动态链接库(Windows上是.dll,Linux上是.so,Mac上是.dylib)。确保链接时包含JVM的库。 6. **运行Java程序**:最后,你可以在Java程序中调用`...

    java调用C/C++全过程

    4. **编译C/C++代码**: 将C/C++源代码编译为动态链接库(Windows下为`.dll`,Unix/Linux下为`.so`)。 5. **加载库文件**: 在Java程序中加载动态链接库,可以通过`System.loadLibrary()`方法指定库文件名。 `...

    Java与C/C++的区别(转).

    ### Java与C/C++的主要区别 #### 一、指针机制 在C/C++中,指针是一个重要的特性,提供了底层内存操作的能力。这使得程序员能够直接管理内存资源,但同时也带来了潜在的安全风险,比如野指针问题或内存泄漏等。而...

    使用JNI进行混合编程:在Java中调用C/C++本地库

    通常,它会先编译Java代码,然后编译C/C++代码,最后运行Java程序,确保本地库被正确加载并调用。 5. **源码分析**: - Sample1.java包含了Java类和本地方法的声明。 - Sample1.cpp包含了本地方法的实现,它会...

    如何使用Eclipse编译C,C++,JAVA程序

    - **MinGW的介绍**:MinGW是一个轻量级的开发环境,它包含了一系列开源工具,使得开发者可以在Windows上使用GCC来编译C和C++代码。 - **MinGW的下载**:你可以从MinGW官网或者第三方源下载MinGW安装包。 - **...

    AndroidStudio 编译C/C++文件生成SO文件

    在Android开发中,有时我们需要利用C或C++的性能优势,这时就需要用到Android Studio的NDK(Native Development Kit)来编译C/C++代码,生成SO(Shared Object)动态链接库文件。这篇博客详细介绍了如何在Android ...

    jni java调用c/c++

    通过 JNI,Java 程序可以调用 C/C++ 代码,实现 Java 与 native 代码的交互。 在本例中,我们将详细介绍如何使用 JNI 将 Java 代码与 C/C++ 代码集成,生成动态库,并加载到 Java 程序中。 JNI 概述 JNI 提供了一...

    java调用C/C++的例子

    3. **编写C/C++代码**:展示如何编写与Java本地方法对应的C/C++代码,这些代码会实现实际的库函数调用。 4. **编译JNI代码**:说明如何使用javah工具生成C/C++的头文件,以及如何使用C/C++编译器编译生成动态链接库...

    android NDK入门篇----混合使用java和c/c++代码 源码工程

    4. 使用NDK编译C/C++代码为.so库,可以使用`ndk-build`命令或者Android Studio的Gradle插件。 5. 在Java代码中调用native方法,如: ```java MyJNITest test = new MyJNITest(); test.doSomething(10); ``` ...

    Java 调用C/C++程序

    4. 编译C/C++源代码为动态链接库。 5. 在Java程序中使用`System.loadLibrary()`加载动态链接库。 6. 在Java方法中调用对应的native方法。 JNI提供了丰富的API,用于创建和操作Java对象,如获取和设置字段值、调用...

    最新版 eclipse for C/C++ 内含 CDT MINGW JRE

    Eclipse 是一个开源的、跨平台的集成开发环境(IDE),最初主要被设计用于Java语言开发,但后来通过插件扩展,支持了包括C/C++在内的多种编程语言。本压缩包提供的是“最新版的 Eclipse for C/C++”,这意味着它专为...

    JNI 教程 java与c/c++互相调用

    - **NDK工具链**:Android NDK提供了一套工具链,用于编译C/C++代码并生成适用于Android平台的本地库。 - **JNI在Android应用中的应用**:Android应用中常见的JNI用途包括图形渲染、游戏引擎、加密算法以及与硬件...

    JAVA调用C/C++ DLL文件方法

    JAVA调用C/C++ DLL文件方法 JAVA 调用 C/C++ 库文件(DLL)是 Java 语言与 C/C++ 语言之间的交互方式之一。...每种方式都有其特点和优缺,开发者可以根据实际情况选择合适的方式来实现 JAVA 与 C/C++ 之间的交互。

    android studio项目java C/C++ 相互调用

    NDK是一组工具,允许开发者使用C和C++编写部分应用程序,这些代码可以与Java代码无缝集成。 1. **JNI(Java Native Interface)基础** JNI是Java平台的标准接口,用于在Java应用中调用本地(非Java)代码。它定义...

    java写的一个使用jni调用c/c++的dll

    编译C/C++代码成DLL文件,这通常涉及到设置正确的编译器选项和链接到JVM库。在Windows上,使用`cl`(Microsoft Visual C++编译器)或`gcc`(MinGW),在Linux或macOS上可能需要`gcc`或`clang`。 最后,将生成的DLL...

    JNI技术手册 c/c++调用java

    ### JNI技术手册:C/C++与Java互调详解 #### 一、JNI技术概览 **JNI(Java Native Interface)** 是Java平台的一部分,它允许Java代码与其他语言写的代码进行交互,尤其是C和C++。JNI是Java与本地代码之间沟通的...

    c/c++调用java方法

    2. JDK的安装与配置,特别是对C++编译环境的设置。 3. 创建和理解Java测试类,了解Java对象、变量、方法和异常的使用。 4. 本地方法的定义,包括`JNIEXPORT`和` JNICALL`宏,以及函数签名。 5. 使用JNI API查找和...

    java/c++区别

    【Java和C++的区别】 Java和C++是两种广泛使用...总之,Java和C++各有优缺点,适用于不同的开发需求。选择哪种语言取决于项目的需求、团队的技能集和开发目标。理解它们之间的联系和区别,有助于做出最佳的编程决策。

Global site tag (gtag.js) - Google Analytics