码迷,mamicode.com
首页 > 编程语言 > 详细

java语言及其垃圾回收机制简单概述

时间:2016-07-14 22:09:05      阅读:280      评论:0      收藏:0      [点我收藏+]

标签:java语言 java跨平台 java垃圾回收机制

 一、java 语言概述

 Java 语言是一门纯粹的面向对象编程语言,它吸收了c++语言的各种优点。又摈弃了c++里难以理解的多继承,指针等概念因此Java语言具有功能强大和简单易用两个特征。

 Java语言的几个重要概念如下:

J2ME:主要用于控制移动设备和信息家电等有限存储设备

J2SE:整个java技术的核心和基础,

J2EEjava技术中应用最最广泛的部分,它提供了企业应用开发相关的完整的解决方案。

API: 核心类库

JRE:运行Java程序所必须的环境的集合,包含JVM标准实现及Java核心类库。是可以在其上运行,测试和传输应用程序的Java平台。

JDK:它是Java语言的软件开发工具包,主要用于移动设备,嵌入式设备上的JAVA应用程序,JDK是整个Java开发的核心,包含了Java的运行环境,Java的工具和Java的基础类库。

Java 语言是一种特殊的高级语言,它既具有解释型语言的特征,也具有编译型语言的特征,因为java程序要经过先编译,后解析两个步骤。

   编译型语言是指使用专门的编译器,针对特定的平台,将某种高级语言源代码一次翻译成

可被该平台硬件执行的机器码(包括机器指定和操作数),并包装成该平台所能识别的可执行的程序格式,这个转换过程称为编译,编译生成的可执行程序可以脱离开发环境,在特定的平台上独立运行。因为编译型的语言是一次性的编译成的机器码,所以可以脱离开发环境独立运行,但编译性的语言的程序被编译成特定平台上的机器码,因此编译生成的可执行程序通常无法移植到其他平台上,如果需要移植,则必须将源代码复制到特定平台上,针对特定平台进行修改,至少需要采用特定平台上的编译器重新编译。

 

    解释型语言是指使用专门的解释器对源程序逐行解释成特定平台上的机器码并立即执行的语言。解释型语言相当于把编译型语言中的编译和解释过程混合到一起同时完成。可以认为:每次执行解释型语言的程序都需要进行一次编译,因此解释型语言的程序运行效率通常较低,而且不能脱离解释器独立运行。但解释性的语言有一个优势,跨平台比较容易只需要提供特定平台的解释器即可,解释型语言可以方便的实现源程序级的移植,但是这是以牺牲程序的执行效率为代价的。

Java语言比较特殊,由java语言编写的程序需要经过编译步骤,但这步骤并不会生成特定平台的机器码,而是生成一种与平台无关的字节码。当然,这种字节码不是可执行性的,必须使用java解释器来解释执行。因此 可以认为java语言既是编译型语言,又是解释型语言。Java程序必须经过先编译后解释两个步骤。

 Java语言里负责解释执行字节码文件的是java虚拟机,不同平台上的JVM都是不同的。但是,所有平台上的JVM向编译器提供相同的编程接口,而编译器只需要面向虚拟机,生成虚拟机能理解的代码,然后由虚拟机来解释执行。JVM其实就是个转换器。JVM的统一标准如下:

(1)   指定集

(2)   寄存器

(3)   类文件的格式

(4)   

(5)   垃圾回收堆

(6)   存储区

 制定这些规范的目的是为了提供统一的标准,最终实现java程序的平台无关性。

 Java程序是一种纯粹的面向对象的语言,因此,Java程序必须以类的形式存在,类是jave程序的最小程序单位。Java程序不允许可执行性语句,方法等独立存在,所有的程序部分都必须放在类里定义。如需某个类被解释器解释执行,则这个类里必须包含main方法,main方法的写法必须是固定的。对于一个大型的Java程序而言,往往只需要一个入口,也就只有一个类包含main方法,而其他类都是用于被main方法直接或间接调用。Java虚拟机只会选择从main方法开始执行。


    、java的垃圾回收机制概述

传统的编程语言CC++,需要程序员回收已经分配的内存。显示的垃圾回收总是困难的,因为程序员不总是知道内存应该何时被释放。如果一些分配出去的内存得不到及时回收,就会引起系统运行速度下降,甚至导致程序瘫痪,这种现象被称为内存泄漏。Java程序的内存分配和回收都是由JRE在后台自动进行的。JRE会回收那些不再使用的内存,通常JRE会提供一个后台线程来进行检测和控制,一般是在CPU空闲或内存不足时自动进行垃圾回收。

Java的堆内存是一个运行时数据区,用以保存类的实例。Java虚拟机的堆内存中存储着正在运行的应用程序所建立的所有对象,一般来说,堆内存的回收由垃圾回收来负责,所有的JVM实现都有一个由垃圾回收器管理的堆内存,垃圾回收是一种动态存储管理技术,它自动的释放不再被程序引用的对象,按照特定的垃圾回收算法来实现内存资源的自动回收功能。

Java中,当没有引用变量指向原先分配给某个对象的内存时,该内存便成为垃圾。当一个对象不再被引用时,内存回收它占领的空间,以便空间被后来的新对象使用。除此之外,垃圾回收也可以清除内存记录碎片,由于创建对象和垃圾回收器释放丢弃对象所占的内存空间,内存会出现碎片。碎片是分配给对象的内存块之间的空闲内存区,碎片整理是指将碎片所占用的堆内存移到堆的一端,JVM将整理出的内存分配给新的对象。

垃圾回收能自动释放内存空间,减轻编程的负担。可以很好的提高编程效率,还可以保护程序的完整性。它的一个缺点是:它的开销影响程序性能。Java虚拟机必须跟踪程序中所有的对象,才可以确定哪些对象是无用的对象,并最终释放这些无用的对象。这个过程需要花费处理器的时间。其次是垃圾回收算法的不完备性,不能保证100%收集到所有的废弃内存。任何一种垃圾回收算法一般都要做两件基本事情:发现无用的对象;回收被无用对象占用的内存空间,使该空间可被程序再次使用。

垃圾回收机制的特点:

(1)只能回收内存资源,释放堆内存里的内存空间,对其他的物理资源如数据库连接,磁盘I/O无能为力;

(2) 为了更快的让垃圾回收机制回收那些不再使用的对象,可以将该对象的引用变量设置为null

(3)    垃圾回收发生的不可预知性。由于不同JVM采用不同的垃圾回收机制和不同的垃圾回收算法,因此可能是定时发生的,也可能是CPU空闲时发生,也可能是等到内存消耗出现极限时发生。

(4)   垃圾回收的精确性包括:一是能够精确标记活着的对象,二是能够精确的定位对象之间的引用关系。

          当编写Java程序时,一个基本的原则是:对于不再需要的对象,不要引用它们,如果保持这些对象的引用,垃圾回收机制暂时不会回收该对象,会导致系统内存越来越少;当系统内存越来越少时,垃圾回收执行的频率就越来越高,从而导致系统的性能下降。


java语言及其垃圾回收机制简单概述

标签:java语言 java跨平台 java垃圾回收机制

原文地址:http://11835236.blog.51cto.com/11825236/1826528

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!