Java的这两个特性,关键在于Java编译器的输出并不是可执行的代码,而是字节码 bytecode. 
 
  字节码是一套设计用来在Java运行时系统下执行的高度优化的指令集,该Java运行时系统称为Java虚拟机 JVM. 在其标准形式下,JVM就是一个字节码解释器。 出于对性能的考虑,许多现代语言都被设计为编译型,而不是解释型。
 
  将一个Java程序翻译成字节码,有助于它更容易地在一个大范围的环境运行程序。在一个给定的系统中,只要系统运行包存在,任何Java程序都可以在该系统上运行。因此,对字节码进行解释是编写真正可移植性程序的最容易的方法。
 
  对Java程序进行解释也有助于它的安全性。因为每个Java程序的运行都在Java虚拟机的控制系啊,Java虚拟机可以包含这个程序并且能组织它在系统之外产生副作用。Java语言的某些限制增强了它的安全性。
 
  尽管Java被设计为解释执行的程序,但是技术上Java并不妨碍动态将字节码编译为本机代码。Java虚拟机的一部分JIT(Just In Time),能根据需要、一部分一部分地将字节码实时编译为可执行代码。它不能讲整个Java程序一次性全部编译为可执行的代码,因为Java要执行各种检查,而这些检查只有在运行时才执行。因此JIT只编译它运行时需要的代码。
 
  Java的字节码经过仔细设计,因为很容易便能使用JIT编译技术奖字节码直接转换成高性能的本机代码。Java运行时系统在提供这个特性的同时仍具有平台独立性。
 

Java的安全性和可移植性的更多相关文章

  1. Java线程安全性中的对象发布和逸出

    发布(Publish)和逸出(Escape)这两个概念倒是第一次听说,不过它在实际当中却十分常见,这和Java并发编程的线程安全性就很大的关系. 什么是发布?简单来说就是提供一个对象的引用给作用域之外 ...

  2. Java并发编程(五):Java线程安全性中的对象发布和逸出

    发布(Publish)和逸出(Escape)这两个概念倒是第一次听说,不过它在实际当中却十分常见,这和Java并发编程的线程安全性就很大的关系. 什么是发布?简单来说就是提供一个对象的引用给作用域之外 ...

  3. Java的安全性如何理解

    Java取消了强大但又危险的指针,而代之以引用.由于指针可进行移动运算,指针可随便指向一个内存区域,而不管这个区域是否可用,这样做是危险的,因为原来这个内存地址可能存储着重要数据或者是其他程序运行所占 ...

  4. 有效提高java编程安全性的12条黄金法则

    安全性是软件开发中最复杂,最广泛和最重要的考量之一.Java是具有许多内置安全性功能的开发平台,java在长期的发展过程中,已经经过了很多高强度的安全测试,并经常更新安全漏洞.并且Java生态系统还包 ...

  5. Java线程安全性-原子性工具对比

    synchronized 不可中断锁,适合竞争不激烈的场景,可读性好,竞争激烈时性能下降很快 Lock 可中断锁,多样化同步,竞争激烈时能维持常态 Atomic 竞争激烈时能维持常态,比Lock性能还 ...

  6. [Java入门笔记] Java语言简介

    前言 学习Java有一段时间了,但是一直缺少一个系统的思想,现在重新通过书籍中.网上的文章,视频等资料,整理与回顾Java的知识点. 言归正传,让我们先从了解Java语言开始. Java语言的由来 J ...

  7. Java起源、发展历程、环境变量、第一个Java程序等【1】

    若有不正之处,请多多谅解并欢迎批评指正,不甚感激. 请尊重作者劳动成果,转载请标明原文链接: 本文原创作者:pipi-changing 本文原创出处:http://www.cnblogs.com/pi ...

  8. Java学习----Java概述

    一.常用DOS命令 d:      盘符切换 dir(directory)  列出当前目录下的文件以及文件夹 md (make directory)  创建目录 rd (remove director ...

  9. (一)java的由来

    java的诞生:每一次设计语言的革新都是为了解决先前语言所遇到的不能解决的问题,B语言导致C语言的诞生,C语言演变成C++,java则继承了这两种语言的大部分特性.java最初的推动力是为了找到一种能 ...

随机推荐

  1. hdu3594 强连通(仙人掌图)

    题意:给定一张有向图,问是否是仙人掌图.仙人掌图的定义是,首先,这张图是一个强连通分量,其次所有边在且仅在一个环内. 首先,tarjan可以判强连通分量是否只有一个.然后对于所有边是否仅在一个环内,我 ...

  2. 黑马程序员——JAVA基础之JDK1.5新特性高级for循环和可变参数

    ------- android培训.java培训.期待与您交流! ---------- 高级for循环   格式: for(数据类型 变量名 : 被遍历的集合(Collection)或者数组) {   ...

  3. Linux平台下利用系统接口函数按照行读写文件

    要求:支持大文件(1M)一次性读入 源代码如下: #include<stdio.h> #include<fcntl.h> #include<stdlib.h> #i ...

  4. PHP pdao用法总结

    $sql = 'SELECT name, colour, calories     FROM fruit     WHERE calories < :calories AND colour =  ...

  5. (转) Deep Learning in a Nutshell: Core Concepts

    Deep Learning in a Nutshell: Core Concepts Share:   Posted on November 3, 2015by Tim Dettmers 7 Comm ...

  6. C++ little errors , Big problem

    ---------------------------------------------------------------------------------------------------- ...

  7. 获取Asp.net GridView控件当中总的记录数量

    问题: 解决方案: SqlDataSource 或 AccessDataSource的selected事件的e.AffectedRows为查询操作返回的数据数目.(这个是在gridview分页情况下采 ...

  8. PERCENT_RANK

    1. percent_rank() over (order by .....) 返回某列或某列组合后每行的百分比排序 如下: with cte as(  SELECT ROWNUM as n  FRO ...

  9. Hibernate常用配置文件详解

    本文转载自:http://blog.csdn.net/csh624366188/article/details/7578939 初学hibernate的童鞋,刚开应该都有这种感觉,hibernate的 ...

  10. [svn]svn: E155015: 提交失败(细节如下) 解决办法

    svn 出现冲突是经常发生的事,最近改用命令操作svn,用界面电脑有些反应慢 出现冲突使用svn 命令肯定也是可以解决的: 查看警告信息提示冲突的文件,执行 svn resolved <文件名& ...