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

沙箱保护

http://sishuok.com/forum/blogPost/list/1732.html

Java技术中的三大特性的更多相关文章

  1. Java中的三大特性 - 超详细篇

    前言 大家好啊,我是汤圆,今天给大家带来的是<Java中的三大特性 - 超详细篇>,希望对大家有帮助,谢谢 这一节的内容可能有点多,大家可以选择性的来看 简介 Java的三大特性:封装.继 ...

  2. Java语言中的面向对象特性总结

    Java语言中的面向对象特性 (总结得不错) [课前思考]  1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类?  2. 面向对象编程的特性有哪三个?它们各自又有哪些特性?  3. 你知 ...

  3. Java基础-面向对象第三大特性之多态(polymorphism )

    Java基础-面向对象第三大特性之多态(polymorphism) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 多态是继封装,继承之后,面向对象的第三大特性,多态的 ...

  4. Java语言中的面向对象特性:封装、继承、多态,面向对象的基本思想(总结得不错)

    Java语言中的面向对象特性(总结得不错) [课前思考] 1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类? 2. 面向对象编程的特性有哪三个?它们各自又有哪些特性? 3. 你知道jav ...

  5. 使用示例带你提前了解 Java 9 中的新特性

    使用示例带你提前了解 Java 9 中的新特性 转载来源:https://juejin.im/post/58c5e402128fe100603cc194 英文出处:https://www.journa ...

  6. Java 中的三大特性

    我们都知道 Java 中有三大特性,那就是继承 ,封装和多态 .那我今天我就来说说这几个特性 . 老样子 ,先问问自己为什么会存在这些特性 .首先说封装 ,封装就是使用权限修饰符来实现对属性的隐藏 , ...

  7. java中的三大特性

    java的三大特性是封装.继承.多态: 继承是OOD(面向对象设计)为了更好的建模,编程的时候是OOP(面向对象编程)提高代码的复用性.这里有个注意点:一个类只有一个直接的父类,但不是只有一个父类. ...

  8. Java中面向对象三大特性之——多态

    多态的概述:  多态是继封装.继承之后,面向对象的第三大特性. 生活中,比如跑的动作,小猫.小狗和大象,跑起来是不一样的.再比如飞的动作,昆虫.鸟类和飞机,飞起来也是不一样的.可见,同一行为,通过不同 ...

  9. Java中的三大特性:封装、继承、多态

    封装: 概念:封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问,适当的封装可以让代码更容易理解与维护,也加强了代码的安全性. 原则:将属性隐藏起来,若需要访问某个属性,提供公共方法对 ...

随机推荐

  1. C#学习大纲

    一.C#:    1.进制转换    2.vs界面内容 熟悉软件    3.数据类型 :引用类型 值类型    4.变量 (存储数据)一个变量存储一个数据    5.类型转换    6.运算符:算数运 ...

  2. vuex配置

    import Vue from 'vue' import App from './App.vue' import router from './router' import store from '. ...

  3. XMPP即时通讯协议使用(三)——订阅发布、断开重连与Ping

    package com.testV3; import java.util.List; import org.jivesoftware.smack.ConnectionListener; import ...

  4. Java虚拟机——Java内存区域与内存溢出

    内存区域 Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域.Java虚拟机规范将JVM所管理的内存分为以下几个运行时数据区:程序计数器.Java虚拟机栈.本地方法栈 ...

  5. 数据库系统实现 第一章 DBMS实现概述

    DBMS提供的能力 1)持久存储 DBMS在灵活性方面比文件系统要好,同时支持对非常大量数据的存储 2)编程接口 3)事务管理 DBMS支持对数据的并发存取,即多个不同的进程(称作事物)同时存取操作, ...

  6. JS基础入门篇(三十四)— 面向对象(一)

    1.对象 对象的定义 : 对象 是 由 键值对 组成的无序集合. 创建对象两种方法 : 方法一 : 字面量方法 var obj = {name: "k"}; 方法二 : new O ...

  7. 机器学习:1.K近邻算法

    1.简单案例:预测男女,根据身高,体重,鞋码 import numpy as np import matplotlib import sklearn from skleran.neighbors im ...

  8. Testng的使用总结(内容待持续更新)

    testng 6.8使用多线程时,在pom的surefire插件始终无效 -->升级testng版本,在6.8版本中无任何提示的 如何调用自定义的报告的 -->在testng中,有个IRe ...

  9. APICloud框架——总结一下最近开发APP遇到的一些问题 (三)

    ajax报错 Uncaught DOMException: Failed to execute 'send' on 'XMLHttpRequest': Failed to load 需要在服务器环境下 ...

  10. Codeforces 803F - Coprime Subsequences(数论)

    原题链接:http://codeforces.com/contest/803/problem/F 题意:若gcd(a1, a2, a3,...,an)=1则认为这n个数是互质的.求集合a中,元素互质的 ...