Java语言实现机制

1.Java虚拟机(Java Virtual Machine)

Java虚拟机(JVM)是在一台计算机上由软件模拟也可以用硬件来实现的假想的计算机。它定义了指令集(相当于中央处理器CPU)、寄存器集、类文件结构栈、垃圾收集堆、内存区域。

首先,Java编译器在获取Java应用程序的源代码后,把它编译成符合Java虚拟机规范的字节码(byte code)的class文件,class文件是JVM中可执行文件的格式。Java编译器针对Java虚拟机产生的class文件,Java虚拟机规范为不同的硬件平台提供了不同的编译代码

规范,该规范使Java软件独立于平台。然后,Java解释器负责将Java字节码文件解释执行,边解释边执行,这样,运行速度受到一定影响。为了提高运行速度,java提供了另一种解释运行的方法JIT(Just In Time),可以一次解释完,再运行特定平台上的机器码,

这样就实现了跨平台、可移植的功能。

在Java的运行环境中,每个Java解释器,不管他是Java开发工具,还是可运行的applets的web浏览器,都可以执行Java虚拟机。字节码的运行要经过下面三个步骤:

(1)加载代码:由Class Loader完成。

(2)校验代码:由Bytecode Verifier完成。

(3)执行代码:由Runtime Interpreter完成。

部分校验过的字节码被编译成原始机器码并直接运行于硬件平台。这就使Java软件代码能够以与C或C++接近的速度运行,只是在加载时,因为要编译成原始机器码而略有延迟。

构成Java软件程序的字节码在运行时被加载、校验并在解释器中运行。当运行applets时,字节码可被下载,然后由建于浏览器中的JVM进行解释。解释器具备两种功能,一是执行字节码,二是对底层硬件平台做适当调用。

Java虚拟机提供了编译代码的规范,它要求代码的格式由字节码构成,由JVM字节码编写的程序必须保持适当的类型约束。对这种类型约束的检查,大部分是在编译时完成的。

Java虚拟机也提供了硬件平台规范,它能够解读独立于平台的已编译好的字节码文件,每个由Sun批准的Java虚拟机规范中有所指定的类文件格式,如:每个文件都包含最多一个public类。

Java虚拟机执行过程有三个典型特点:

(1)多线程:Java虚拟机支持多个线程的同时运行,这些线程独立的执行Java代码,处理公共数据区和私有栈中的数据。

(2)动态连接:Java程序之所以适合在网络上运行,其主要原因是由于Java虚拟机具有动态连接特性。

(3)异常处理:Java虚拟机提供了可靠的异常处理。

2.Java垃圾回收机制(Garbage Collection)

Java语言中任何事物都封装在类中,每个类都会创建一个或多个实例对象,每个对象都有生命周期,我们需要时就去创建、调用它,不用时就应清楚它(稍后再用)。这种动态的实例对象是被存放在内存堆(Memory Heap)中的,随着科技的发展,我们可以不断更新

扩展硬件设施,但任何存储介质都是有极限的,那么内存也不异常,对于不再使用的对象,我们应该将其清除,从而释放资源。许多编程语言都允许在程序运行时动态分配存储器,分配存储器的过程由于语言句法的不同而不同,当不再需要分配存储器或存储器指针溢

出范围时,程序或运行环境应停止继续分配存储器,进行内存回收,但如何进行内存回收却是一件很困难很复杂的事情,在C、C++或其他语言中,程序员负责回收已分配的内存。由于存储器是动态分配的,通常我们无法准确判断存储器应在何时被释放。这就为程序运

行留下隐患,当系统运行中没有能够被分配的存储器时,就会导致程序瘫痪。Java语言解除了程序员释放已分配存储器的责任,是通过提供一个系统级线程对内存使用进行跟踪实现的,由于Java是单根结构,任何一个类都直接或间接地继承于java.lang.Object类,所

以系统级线程可以跟踪每一次存储器的分配情况,并且可以逐级回溯,定期检测出不再使用的内存,在系统空闲时自动进行回收。垃圾收集是在Java程序的生命周期中自动进行的,我们无法判断垃圾回收线程何时启动,要执行多长时间,这使得程序在运行期间出现一

种不连贯的状态,并且在一定程度上降低了程序的运行效率,但这个代价还是值得的。

3.代码安全性检测(Code Security)

Java的安全性的考虑最初来源于Java Applet,由于它可以被轻易的下载到web浏览器上运行,改变了以往传统模式下桌面计算机系统的应用软件的更新方式,这种移动代码可以经Internet的web浏览器自动下载和更新,在享受便捷快速的技术更新的同时也带来了安全

隐患。Java v1.0采用了沙箱(sandbox)安全模型,它的主要思想是像applet这样通过远程下载的代码只能受限的访问系统资源,如不能访问本地文件、不能建立新的网络连接等,它们的行为受限于沙箱之中。由于这个模型约束太多,大大削弱了移动代码的优势。在

Java v1.1中采用了信任安全模型,其主要思想是使用户可以有选择的授权给远程代码,如果远程某地资源可以被信任,那么带有此地签名的代码将被授权可以访问本地的资源系统,其他不被信任的代码仍受限于沙箱内。Java2平台则采用了域管理方式的安全模型,无

论是本地代码还是远程代码都可以通过配置的策略,设定可访问的资源域,这种策略更好的支持了企业级的应用,同时也消除了区分本地代码和远程代码带来的困难。上面已经讲过字节码需要进行校验,实际上Java代码再运行之前要经过几次检验,大都是从安全角度

考虑,JVM将代码输入一个字节码校验器以测试代码段格式并进行规则检查,检查伪造指针、违反对象访问权限或试图改变对象类型的非法代码、对象域访问是否合法等。在运行时还要进行字节码校验,主要判断字节码是否符合JVM规范,是否破坏系统完整性,是否

引起操作数堆栈上溢或下溢,代码的参数类型是否准确,有无非法数据转换,有无访问限制违例等。

Java语言实现机制的更多相关文章

  1. 第1章 Java语言概述--HelloWorld--环境搭建

    SE学什么 第1章 Java语言概述 第2章 基本语法 第3章 数组 第4章 面向对象编程(上) 第5章 面向对象编程(中) 第6章 面向对象编程(下) 第7章 异常处理 第8章 枚举类&注解 ...

  2. 1、java语言概述

    Java基础知识图解 软件开发 软件开发 软件,即一系列按照特定顺序组织的计算机数据和指令的集合.有系统软件和应用软件之分. 人机交互方式 图形化界面(Graphical User Interface ...

  3. 《Java疯狂讲义》(第3版)学习笔记 2 - Java语言的运行机制

    内容 1.高级语言的运行机制 2.Java 语言的运行机制 1.高级语言的运行机制 高级语言主要分为编译型语言和解释型语言两类. 编译型语言是指使用专门的编译器.针对特定平台(操作系统)将高级语言源代 ...

  4. Java语言的垃圾回收机制

    java语言从诞生开始,一个吸引人眼球的功能就是垃圾回收,想一想C++中时不时的内存泄漏,当时感觉写java代码直是一种享受呀.     和.NET的引用计数不同,java的垃圾回收机制采取的是有向图 ...

  5. 1、Java语言概述与开发环境——Java程序运行机制

    Java语言是一种特殊的高级语言,它既有解释型语言的特性,也具有编译型语言的特征,因为Java要经过先编译后解释两个步骤. 一.高级语言的运行机制 计算机高级语言按程序的执行方式可以分为编译型和解释型 ...

  6. java语言的运行机制

    计算机高级编程语言按其程序的执行方式可分为编译型语言和解释型语言. 编译型语言是指使用专门的编译器,针对特定的操作系统将源程序代码一次性翻译成计算机能识别的机器指令.例如C.C++等都属于编译型语言. ...

  7. Atitit onvif协议获取rtsp地址播放java语言 attilx总结

    Atitit onvif协议获取rtsp地址播放java语言 attilx总结 1.1. 获取rtsp地址的算法与流程1 1.2. Onvif摄像头的发现,ws的发现机制,使用xcf类库1 2. 调用 ...

  8. Java的多线程机制系列:不得不提的volatile及指令重排序(happen-before)

    一.不得不提的volatile volatile是个很老的关键字,几乎伴随着JDK的诞生而诞生,我们都知道这个关键字,但又不太清楚什么时候会使用它:我们在JDK及开源框架中随处可见这个关键字,但并发专 ...

  9. 为什么可以说Java语言是准动态语言?

    什么是动态语言? 动态语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化.比如JavaScript便是一个典型的动态语言. 除此之外如Ruby.Python ...

随机推荐

  1. JVM菜鸟进阶高手之路八(一些细节)

    转载请注明原创出处,谢谢! gc日志问题 查看docker环境的gc日志,发现是下面这种情况,很奇怪,一直怀疑是docker环境那里是否有点问题,并没有怀疑配置,之前物理机上面的gc日志都是正常那种. ...

  2. Local Binary Convolutional Neural Networks ---卷积深度网络移植到嵌入式设备上?

    前言:今天他给大家带来一篇发表在CVPR 2017上的文章. 原文:LBCNN 原文代码:https://github.com/juefeix/lbcnn.torch 本文主要内容:把局部二值与卷积神 ...

  3. BZOJ2431_逆序对数列_KEY

    转自YXDs 题目传送门 不知道今天是怎么了,可能是空调吹多了吧,一直不在状态,连递推题我都做不来了--(扎Zn了老Fe--) 然而,不管环境如何恶劣,我们仍要努力学习,为了自己的明天而奋斗.(说的好 ...

  4. 开始使用ASP.NET Core - 创建第一个Web应用

    .NET Core 是.NET Framework的新一代跨平台应用程序开发框架,是微软在一开始发展时就开源的软件平台,由于 .NET Core 的开发目标是跨平台的 .NET 平台,因此 .NET ...

  5. IDEA- idea代码调试debug

    IDEA有很多的快捷键,下面整理Debug的快捷键,方便自己使用!(阅读本篇可能花费您2分钟,需要多的实践练习) F9 resume programe 恢复程序 Alt+F10 show execut ...

  6. 实例讲解js正则表达式的使用

    前言:正则表达式(regular expression)反反复复学了多次,学了又忘,忘了又学,这次打算把基本的东西都整理出来,加强记忆,也方便下次查询. 学习正则表达式之前首先需要掌握记忆这些基本概念 ...

  7. 一个综合实例讲解vue的基础知识点。

    本文通过一个简单的实例来讲解一下vue的基本知识点.通过这个综合实例的讲解,vue的基础知识就会掌握的差不多了. 首先看一下项目的效果:

  8. P1034

    问题 E: P1034 时间限制: 1 Sec  内存限制: 128 MB提交: 29  解决: 22[提交][状态][讨论版] 题目描述 尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些 ...

  9. MUI顶部选项卡的用法(tab-top-webview-main)

      前  言           MUI是一款最接近原生APP体验的高性能前端框架,它的比较重要的功能是:下拉刷新.侧滑导航.滑动触发操作菜单和顶部(底部)选项卡等 最近用MUI做手机app应用的时候 ...

  10. The model backing has changed

    其他信息: The model backing the 'WebTopFormContext' context has changed since the database was created. ...