六、Java技术三大特性

1.虚拟机

Java虚拟机JVM(Java Virtual Machine)在Java编程里面具有非常重要的地位,约相当于前面学到的Java运行环境,虚拟机的基本功能如下:

(1):通过ClassLoader寻找和装载class文件

(2):解释字节码成为指令并执行,提供class文件的运行环境

(3):进行运行期间垃圾回收

(4):提供与硬件交互的平台

Java虚拟机是在真实机器中用软件模拟实现的一种想象机器。Java虚拟机代码被存储在 .class文件中;每个文件都包含最多一个public类。Java 虚拟机规范为不同的硬件平台提供了一种编译Java技术代码的规范,该规范使Java 软件独立于平台,因为编译是针对作为虚拟机的“一般机器”而做。这个“一般机器”可用软件模拟并运行于各种现存的计算机系统,也可用硬件来实现。编译器在获取Java应用程序的源代码后,将其生成字节码,它是为JVM生成的一种机器码指令。每个Java解释器,不管它是Java技术开发工具,还是可运行applets 的Web浏览器,都可执行JVM。

JVM为下列各项做出了定义

-指令集(相当于中央处理器[CPU] )

-寄存器

-类文件格式

-栈

-垃圾收集堆

-存储区

JVM的代码格式由紧缩有效的字节码构成。由JVM字节码编写的程序必须保持适当的类型约束。大部分类型检查是在编译时完成。任何从属的Java技术解释器必须能够运行任何含有类文件的程序,这些类文件应符合Java虚拟机规范中所指定的类文件格式。

1.1虚拟机是Java平台无关的保障

正是因为有虚拟机这个中间层,Java才能够实现与平台无关。虚拟机就好比是一个Java运行的基本平台,所有的Java程序都运行在虚拟机上,如下图所示:

Java源程序(*.java文件)

Java类文件(*.class文件)

编译

平台无关

平台相关

Java虚拟机

被装载进入虚拟机

Linux

Windows

Unix

解释执行字节码文件

2.垃圾回收

2.1什么是垃圾

在程序运行的过程中,存在被分配了的内存块不再被需要的情况,那么这些内存块对程序来讲就是垃圾。

产生了垃圾,自然就需要清理这些垃圾,更为重要的是需要把这些垃圾所占用的内存资源,回收回来,加以再利用,从而节省资源,提高系统性能。

2.2垃圾回收

-不再需要的已分配内存应取消分配(释放内存)

-在其它语言中,取消分配是程序员的责任

-Java编程语言提供了一种系统级线程以跟踪内存分配

-垃圾收集

-可检查和释放不再需要的内存

-可自动完成上述工作

-可在JVM实现周期中,产生意想不到的变化

许多编程语言都允许在程序运行时动态分配内存,分配内存的过程由于语言句法不同而有所变化,但总是要将指针返回到内存的起始位置,当分配内存不再需要时(内存指针已溢出范围),程序或运行环境应释放内存。

在C,C++ 或其它语言中,程序员负责释放内存。有时,这是一件很困难的事情。因为你并不总是事先知道内存应在何时被释放。当在系统中没有能够被分配的内存时,可导致程序瘫痪,这种程序被称作具有内存漏洞。

Java编程语言解除了程序员释放内存的责任。它可提供一种系统级线程以跟踪每一次内存的分配情况。在Java虚拟机的空闲周期,垃圾收集线程检查并释放那些可被释放的内存。垃圾收集在Java技术程序的生命周期中自动进行,它解除了释放内存的要求,这样能够有效避免内存漏洞和内存泄露(内存泄露就是程序运行期间,所占用的内存一直往上涨,很容易造成系统资源耗尽而降低性能或崩溃)。

2.3提示

(1) 在Java里面,垃圾回收是一个自动的系统行为,程序员不能控制垃圾回收的功能和行为。比如垃圾回收什么时候开始,什么时候结束,还有到底哪些资源需要回收等,都是程序员不能控制的。

(2) 有一些跟垃圾回收相关的方法,比如:System.gc() , 记住一点,调用这些方法,仅仅是在通知垃圾回收程序,至于垃圾回收程序运不运行,什么时候运行,都是无法控制的。

(3) 程序员可以通过设置对象为null(后面会讲到)来标示某个对象不再被需要了,这只是表示这个对象可以被回收了,并不是马上被回收。

3.代码安全

Java如何保证编写的代码是安全可靠的呢?

(1)第一关:编写的代码首先要被编译成为class文件,如果代码写得有问题,编译期间就会发现,然后提示有编译错误,无法编译通过。

(2)第二关:通过编译关后,在类装载的时候,还会进行类装载检查,把本机上的类和网络资源类相分离,在调入类的时候进行检查,因而可以限制任何“特洛伊***”的应用。

(3)第三关:类装载后,在运行前,还会进行字节码校验,以判断你的程序是安全的。

(4)第四关:如果你的程序在网络上运行,还有沙箱(Sand Box)的保护,什么是沙箱呢?就是如果你的程序没有获得授权,只能在沙箱限定的范围内运行,是不能够访问本地资源的,从而保证安全性。

Compile

HelloWorld.java

HelloWorld.class

Javac

Network

Class Loader

Java

Byte code verifier

Interpreter

Hardware

Runtime

编译检查

装载检查

字节码校验

Runtime

沙箱保护

学习到这里,大家应该对Java有了一定的了解了。现在是否想要看看Java程序究竟什么样子呢?是不是想要体会一下如何开发Java程序呢?下面我们先来看看如何构建JSE的环境,这是进行Java程序开发的第一步。

Java私塾跟我学系列——JAVA篇 网址:http://www.javass.cn 电话:010-68434236

java私塾 java篇_Java私塾跟我学系列——JAVA篇 六、相关推荐

  1. java私塾 java篇_Java私塾跟我学系列——JAVA篇 五、

    五:Java如何做到让机器理解我们想要做的东西 用一个图来描述这个过程会比较容易理解: 1:编写代码 首先把我们想要计算机做的事情,通过Java表达出来,写成Java文件,这个过程就是 编写代码的过程 ...

  2. Java私塾跟我学系列——JAVA篇 第四章Java类和对象

    教学目标: i面向对象基础 i掌握对象的三大特性 i掌握Java类的构建 i掌握如何使用Java类 i理解引用类型 i理解按值传递和按引用传递 i深入理解变量 i掌握包装类 i理解类型转换 i理解Ja ...

  3. JAVA工程师定向招聘_Java工程师面试题整理[社招篇]

    http://blog.csdn.net/jackfrued/article/details/44921941 1.面向对象的特征有哪些方面? 2.访问修饰符public,private,protec ...

  4. java记事本应用程序_Java教程:使用记事本编写运行Java程序

    Java教程经过上节的操作已经配置完了 Java 的开发环境,但并不清楚所配置的开发环境是否真的可以运行 Java 应用程序.为了解除这个疑虑,也为了使读者对开发 Java 应用程序的步骤有一个初步的 ...

  5. java反射机制深入详解_Java基础与提高干货系列——Java反射机制

    前言 今天介绍下Java的反射机制,以前我们获取一个类的实例都是使用new一个实例出来.那样太low了,今天跟我一起来学习学习一种更加高大上的方式来实现. 正文 Java反射机制定义 Java反射机制 ...

  6. java输入输出实验报告_JAVA实验报告(河北工业大学)

    实验一Application与Applet程序调试运行 实验目的:熟悉所用系统的上机方法与步骤. 实验内容:编写一个Java Application和一个Applet程序,输出以下信息:Hello,J ...

  7. java工程师占比_Java工资怎么样?哪个地方Java工作机会最多?

    随着IT产业的发展,JAVA语言因其独有的特点,使其在各项服务器中应用程序的开发所占有一定的优势,随着JSP技术的发展,使Java语言的网络应用更为实际化.更高效快捷,成为IT产业常用的技术. 越来越 ...

  8. java中clone方法_Java Object clone()方法– Java中的克隆

    java中clone方法 Cloning is the process of creating a copy of an Object. Java Object class comes with na ...

  9. java jvm内存模型_Java(JVM)内存模型– Java中的内存管理

    java jvm内存模型 Understanding JVM Memory Model, Java Memory Management are very important if you want t ...

  10. java编程基础笔记_Java编程基础阶段笔记 day01 Java语言概述

    常用的DOS命令 dir :    列出当前目录下的文件以及文件夹 md :   创建目录 rd :     删除目录 cd :    进入指定目录 cd.. :  退回到上一级目录 cd\:     ...

最新文章

  1. SimBERTv2 融合检索和生成的RoFormer-Sim模型
  2. 乘法器的verilog实现(并行、移位相加、查找表)
  3. 变频器lpm故障码是什么_什么是变频器软故障,如何解决?
  4. python3.8安装xlwings出错_Python xlwings模块简单使用
  5. Java 线程状态流转
  6. java实现什么接口进行排序_使用Java中Comparator接口实现自定义排序
  7. 信息安全完全参考手册之信息安全概述(第一章)
  8. P1375 嵌套矩形
  9. weblogic进程自动关闭_手机内存不够还卡顿,那是你不会清理,关闭这3个设置就变流畅...
  10. 学生选课系统项目分析-1,架构
  11. 6个月内进轨,目标火星!马斯克刚刚发布最强“理想飞船”,称已达人类物理极限
  12. 鸿蒙系统安装电视家,华为荣耀智慧屏系统更新,支持安装第三方APP,网友:华为妥协了...
  13. 外文搜索数据库小记(工科)
  14. 云计算发展趋势好不好 学后能胜任哪些岗位
  15. 【C++】交通咨询系统(最短路径问题)
  16. java volatile理解
  17. 遥感小目标检测论文梳理
  18. Swift 类和结构体总结
  19. 基于Tensorflow框架的BP神经网络回归小案例--预测跳高
  20. git push错误failed to push some refs to的解决

热门文章

  1. Acrel-3200远程预付费电能管理系统的功能介绍
  2. 深入浅出Python——Python高级语法之函数
  3. 深入浅出Python的抽象基类
  4. nfine框架连接oracle,NFine快速开发框架(无后门)
  5. 计算机数学英语基础,计算机数学基础教程 2012年版
  6. SPSS软件自身案例数据
  7. 铁甲雄心机器人建造成本_铁甲雄心最强机器人
  8. QT 自带字体样式有哪些?
  9. 单商户商城系统功能拆解19—订单管理
  10. AD09 PCB制作开异性窗口