zoukankan      html  css  js  c++  java
  • Java技术中的三大特性

    1.虚拟机                                                                        

    Java虚拟机JVMJava 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实现周期中,产生意想不到的变化

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

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

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

     

    2.3 提示

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

    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 

  • 相关阅读:
    QinQ基础知识
    mysql执行sql脚本时--force的作用
    docker的thin pool 和 ulimit问题
    使用MAT来进行java内存问题的简单分析
    自己对DHCP的理解
    根据类名找jar包和maven坐标
    curl在windows下和linux中使用的一个区别
    JAVA实现LRU算法
    经典买票并发
    AQS学习
  • 原文地址:https://www.cnblogs.com/itommy/p/10610344.html
Copyright © 2011-2022 走看看