`
lsx111
  • 浏览: 14266 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

java执行原理

 
阅读更多

学了那么就java却一直不清楚java代码的运行过程,现在写篇博客,对java的执行过程做一下简单的分析。

究竟什么是java语言呢,sun给出了定义:一种简单的,面相对象,跨平台,半编译半解释,健壮,安全,性能高,多线程的动态语言。

清楚定义之后来看看java的开发流程。Java是一种高级语言,平时我们所写出来的是面对开发者的,而计算机并无法识别,我们叫它源代码,那怎样才能让计算机识别这些源代码呢。首先要利用java编译器(jdk自带的工具)将源代码转换成字节码(.class文件),这个过程就是编译。但编译后的这些字节码仍不能直接在计算机上运行,这些.class文件是面相虚拟机(JVM)的,只有虚拟机才能读懂它,然后虚拟机对这些字节码进行翻译,根据具体计算机的平台把它们翻译成对应机器指令,再由计算机来执行。这就是为什么要在电脑上运行java代码时首先要安装虚拟机。因为虚拟机和java必要的类库构成了java的运行环境。

我们所学的任何一门计算机语言几乎都是从hello world 开始的,下面我们通过一张图来看看一个java代码的运行过程。



HelloWorld

新建记事本,将后缀名改成.java,编写代码,这里要注意两点:1后缀名必须为.java2文件名必须和类名相同。然后通过编译器编译成面向虚拟机的字节码(javac HelloWorld.java),在这一步之前,无论你是在任何平台上都是一样的,没有差异,因为任何平台上的虚拟机都是一样的,这也是java实现跨平台的原因。最后通过虚拟机把字节码翻译成对应平台的机器指令,虽然方便实现跨平台,但也因此降低了执行效率,毕竟它的执行要通过虚拟机这个中转站。举个简单的例子,在源文件与编译之后的.class 文件之间有一个翻译员,在任何平台上都是这个翻译员进行翻译,而在.class文件和机器指令之间有多个翻译员,不同的平台上有不同的翻译员进行翻译。

下面来看看java虚拟机的工作流程:

1装载

java虚拟机使用类装载器找到相应的class文件,然后读取这个class文件,再把它传入到虚拟机中,然后虚拟机会再提取其他的信息,比如:该类的类名,方法名,变量名,修饰符,方法的返回类型等等这些信息保存在一个叫方法区的一个地方,还有一个地方叫常量池,它里面保存了类中的所有常量以及对其他类型的引用,最终形成class的实例,而这个实例就保存在内存中的堆区。通过一个简单的示例来解释一下这个过程:

 

  public class Test{
      private int size;
      public User user;
      public static void main(String []arg){
          user = new User();
          ... ...
      }
  }
  
  public class User{
      private String name;
      private int age;
      ... ...
  }

 

当虚拟机读取Test类的class文件时,会读取其中的信息,例如private public这些修饰符,而name, age , User , size这些都会保存到常量池中,而这些信息都保存到方法区中,最终形成Test的实例就在java堆里。

 

JVM图解:


链接

1检验:确定所加载的类型符合java语言,不会出现语法错误。

2准备:虚拟机为该类型分配内存空间,设置默认值。

3解析:在该类型的常量池中寻找该类的类名,接口,方法。

3初始化

虚拟机调用方法来初始化该类的静态变量,要注意的是在初始化之前要确定该类的父类已经被初始化。

Java的执行过程大致就是这样,当然还有很多没有涉及到,后面会继续深入研究javajvm,先写下学习过程来帮助自己更好理解,更好回顾。


 

  • 大小: 13.3 KB
  • 大小: 45 KB
分享到:
评论

相关推荐

    java内存原理解析

    了解这些内存区域的工作原理对于识别内存泄漏、性能优化以及理解如何有效地使用Java内存至关重要。在实际开发中,合理地管理和利用内存资源,能够提升程序的运行效率,降低内存消耗,从而提高整体应用性能。

    java内存原理.doc

    Java 内存原理 Java 内存原理是 Java 语言中的一种基本机制,用于管理和分配内存资源。在 Java 中,内存被分为两种:栈内存和堆内存。 栈内存是指在函数中定义的一些基本类型的变量和对象的引用变量。这些变量在...

    java的执行原理和JVM

    ### Java的执行原理 Java作为一种广泛使用的编程语言,其强大之处不仅在于它的语法简洁和面向对象的特点,更重要的是它的跨平台能力。Java程序能够在多种不同的操作系统上运行,这得益于Java虚拟机(JVM)的存在。 ...

    JAVA JVM原理资料

    ### JAVA JVM原理资料知识点 #### 一、语言处理器的基本结构 **语言处理器**是指能够处理某种编程语言的工具,常见的包括编译器、解释器、IDE等。 1. **编译器的基本结构**: - **词法分析器**:将源代码分割成...

    Java运行原理与Java虚拟机.pdf

    ### Java运行原理与Java虚拟机 #### 一、Java运行原理概述 Java作为一种跨平台的编程语言,其独特之处在于它的编译和解释过程。Java程序的执行涉及到两个主要步骤:首先是编译阶段,其次是解释执行阶段。 1. **...

    java批量执行SQL

    本文将详细介绍如何利用Java进行批量SQL执行,包括其背景、实现原理、代码示例及优化策略等。 #### 一、批量执行SQL的背景与意义 在日常的业务场景中,如用户注册、数据迁移或系统初始化等,往往涉及到大量的数据...

    java监听器的实现和原理详解

    Java监听器的实现和原理详解 Java监听器是一种非常重要的设计模式,在Java中广泛应用于事件驱动编程。监听器模式的主要思想是将事件源和事件处理器分离,使得事件源可以独立于事件处理器,提高了系统的灵活性和可...

    Java零基础 - Java的加载与执行原理剖析.md

    ### Java零基础 - Java的加载与执行原理剖析 #### 一、概述 Java作为一种流行的编程语言,其程序的执行依赖于Java虚拟机(JVM)。本文将深入剖析Java程序从编写到执行的整个过程,包括Java程序的加载、验证、准备、...

    java虚拟机的详细原理

    ### Java虚拟机的详细原理 #### 一、什么是Java虚拟机 Java虚拟机(Java Virtual Machine,简称JVM)是一种可以执行Java字节码(Bytecode)的虚拟计算机。它为Java程序提供了一个运行环境,使得Java程序可以在任何...

    Java Web 服务器原理

    Java Web服务器原理主要涉及到Web应用的部署、运行和管理,其中Tomcat是一个广泛使用的开源Java Servlet容器,它是Java EE(现在称为Jakarta EE)的一部分。本文将深入探讨Java Web服务器的工作原理,特别是Tomcat的...

    Java调度原理及使用

    Java任务调度是编程中不可或缺的一部分,它允许程序在指定的时间点或按照预定义的周期执行特定的任务。在Java中,有多种方式可以实现任务调度,包括`Timer`、`ScheduledExecutor`以及开源库如`Quartz`和`JCronTab`。...

    java执行SQL语句实现查询的通用方法详解

    "java执行SQL语句实现查询的通用方法详解" 本文主要介绍了java执行SQL语句实现查询的通用方法详解,具有一定借鉴价值,需要的朋友可以...这些知识点可以帮助开发者更好地理解Java执行SQL语句实现查询的原理和方法。

    JAVA执行shell命令小工具

    标题中的“JAVA执行shell命令小工具”指的是使用Java编程语言编写的小程序,它能够执行操作系统级别的Shell命令。在Java中,通常使用`Runtime.getRuntime().exec()`或者`ProcessBuilder`类来实现这一功能。这两个类...

    Java虚拟机工作原理详解

    Java虚拟机工作原理详解是 Java 程序执行的核心组件之一。了解 Java 虚拟机的工作原理对 Java 开发人员来说非常重要。本文将详细介绍 Java 虚拟机工作原理的详细过程和类加载器的工作机理。 一、类加载器 类加载器...

    编译原理java编译器

    本实验主要围绕“编译原理”展开,重点关注Java编译器的设计与实现,涵盖词法分析、语法分析、语义分析以及中间代码生成等关键步骤。 首先,我们来深入了解一下词法分析。词法分析是编译过程的第一步,它的任务是将...

    JAVA智能卡原理与应用开发_11986803_张大...

    Java Card是一种在微小的智能卡上运行的Java平台,它使得智能卡能够执行复杂的计算任务,同时保证数据的安全性。本教程将引导初学者从零开始,逐步了解和掌握Java Card的开发流程。 首先,Java Card的开发环境配置...

Global site tag (gtag.js) - Google Analytics