Java无用内存自动回收机制

转载 2007年10月07日 18:15:00
1.2.2 无用内存自动回收机制
  
  1.2.3 代码安全性检查机制

  安全和方便总是相对矛盾的。java编程语言的出现使得客户端机器可以方便的从网络上下载java程序到本机上运行,但是如何保证该java程序不携带病毒或者不怀有其它险恶目的呢?如果java语言不能保证执行的安全性,那么它就不可能存活到今天。虽然有时候少数程序员会抱怨说applet连文件系统也不能访问,但是正是各种安全措施的实行才确保了java语言的生存。

 1.2.2 无用内存自动回收机制
  在程序的执行过程中,部分内存在使用过后就处于废弃状态,如果不及时进行无用内存的回收,就会导致内存泄漏,进而导致系统崩溃。在C++语言中是由程序员进行内存回收的,程序员需要在编写程序的时候把不再使用的对象内存释放掉;但是这种人为的管理内存释放的方法却往往由于程序员的疏忽而致使内存无法回收,同时也增加了程序员的工作量。而在java运行环境中,始终存在着一个系统级的线程,专门跟踪内存的使用情况,定期检测出不再使用的内存,并进行自动回收,避免了内存的泄露,也减轻了程序员的工作量。

  
1.2.3 代码安全性检查机制
  字节码的执行需要经过三个步骤,首先由类装载器(class loader)负责把类文件(.class文件)加载到java虚拟机中,在此过程需要检验该类文件是否符合类文件规范;其次字节码校验器(bytecode verifier)检查该类文件的代码中是否存在着某些非法操作,例如applet程序中写本机文件系统的操作;如果字节码校验器检验通过,由java解释器负责把该类文件解释成为机器码进行执行。java虚拟机采用的是"沙箱"运行模式,即把java程序的代码和数据都限制在一定内存空间里执行,不允许程序访问该内存空间外的内存,如果是applet程序,还不允许访问客户端机器的文件系统。

 1. 简单、面向对象和为人所熟悉
  java的简单首先体现在精简的系统上,力图用最小的系统实现足够多的功能;对硬件的要求不高,在小型的计算机上便可以良好的运行。和所有的新一代的程序设计语言一样,java也采用了面向对象技术并更加彻底,所有的java程序和applet程序均是对象,封装性实现了模块化和信息隐藏,继承性实现了代码的复用,用户可以建立自己的类库。而且java采用的是相对简单的面向对象技术,去掉了运算符重载、多继承的复杂概念,而采用了单一继承、类强制转换、多线程、引用(非指针)等方式。无用内存自动回收机制也使得程序员不必费心管理内存,是程序设计更加简单,同时大大减少了出错的可能。java语言采用了C语言中的大部分语法,熟悉C语言的程序员会发现java语言在语法上与C语言极其相似。

  2. 鲁棒并且安全
  java语言在编译及运行程序时,都要进行严格的检查。作为一种强制类型语言,java在编译和连接时都进行大量的类型检查,防止不匹配问题的发生。如果引用一个非法类型、或执行一个非法类型操作,java将在解释时指出该错误。在java程序中不能采用地址计算的方法通过指针访问内存单元,大大减少了错误发生的可能性;而且java的数组并非用指针实现,这样就可以在检查中避免数组越界的发生。无用内存自动回收机制也增加了java的鲁棒性。

  作为网络语言,java必须提供足够的安全保障,并且要防止病毒的侵袭。java在运行应用程序时,严格检查其访问数据的权限,比如不允许网络上的应用程序修改本地的数据。下载到用户计算机中的字节代码在其被执行前要经过一个核实工具,一旦字节代码被核实,便由java解释器来执行,该解释器通过阻止对内存的直接访问来进一步提高java的安全性。同时java极高的鲁棒性也增强了java的安全性。

  3. 结构中立并且可以移植
  网络上充满了各种不同类型的机器和操作系统,为使java程序能在网络的任何地方运行,java编译器编译生成了与体系结构无关的字节码结构文件格式。任何种类的计算机,只有在其处理器和操作系统上有java运行时环境,字节码文件就可以在该计算机上运行。即使是在单一系统的计算机上,结构中立也有非常大的作用。随着处理器结构的不断发展变化,程序员不得不编写各种版本的程序以在不同的处理器上运行,这使得开发出能够在所有平台上工作的软件集合是不可能的。而使用java将使同一版本的应用程序可以运行在所有的平台上。

  体系结构的中立也使得java系统具有可移植性。java运行时系统可以移植到不同的处理器和操作系统上,java的编译器是由java语言实现的,解释器是由java语言和标准C语言实现的,因此可以较为方便的进行移植工作。
4. 高性能
  虽然java是解释执行的,但它仍然具有非常高的性能,在一些特定的CPU上,java字节码可以快速的转换成为机器码进行执行。而且java字节码格式的设计就是针对机器码的转换,实际转换时相当简便,自动的寄存器分配与编译器对字节码的一些优化可使之生成高质量的代码。随着java虚拟机的改进和"即时编译"(just in time)技术的出现使得java的执行速度有了更大的提高。

  5. 解释执行、多线程并且是动态的
  为易于实现跨平台性,java设计成为解释执行,字节码本身包含了许多编译时生成的信息,使连接过程更加简单。而多线程使应用程序可以同时进行不同的操作,处理不同的事件。在多线程机制中,不同的线程处理不同的任务,互不干涉,不会由于某一任务处于等待状态而影响了其它任务的执行,这样就可以容易的实现网络上的实时交互操作。java在执行过程中,可以动态的加载各种类库,这一特点使之非常适合于网络运行,同时也非常有利于软件的开发,即使是更新类库也不必重新编译使用这一类库的应用程序。

1.2.5 java平台-不断扩展的计算平台

  java不仅是编程语言,还是一个开发平台,java技术给程序员提供了许多工具:编译器、解释器、文档生成器和文件打包工具等等。同时java还是一个程序发布平台,有两种主要的"发布环境",首先java运行时环境(java runtime environment,简称JRE)包含了完整的类文件包,其次许多主要的浏览器都提供了java解释器和运行时环境。目前Sun公司把java平台划分成J2EE、J2SE、J2ME三个平台,针对不同的市场目标和设备进行定位。J2EE是Java2 Enterprise Edition,主要目的是为企业计算提供一个应用服务器的运行和开发平台。J2EE本身是一个开放的标准,任何软件厂商都可以推出自己的符合J2EE标准的产品,使用户可以有多种选择。IBM、Oracle、BEA、HP等29家已经推出了自己的产品,其中尤以BEA公司的weglogic产品和IBM公司的websphare最为著名。J2EE将逐步发展成为可以与微软的.NET战略相对抗的网络计算平台。J2SE是Java2 Standard Edition,主要目的是为台式机和工作站提供一个开发和运行的平台。我们在学习java的过程中,主要是采用J2SE来进行开发。J2ME是Java2 Micro Edition,主要是面向消费电子产品,为消费电子产品提供一个java的运行平台,使得java程序能够在手机、机顶盒、PDA等产品上运行。上述三个java平台的关系如右图所示。

 

 


Java jvm 内存回收机制

Java jvm 内存回收机制 源代码下载地址:http://www.zuidaima.com/share/1782298898271232.htm...
  • yaerfeng
  • yaerfeng
  • 2016年05月01日 21:41
  • 4622

java如何进行内存自动释放、垃圾回收?

垃圾收集的目的在于清除不再使用的对象。gc通过确定对象是否被活动对象引用来确定是否收集该对象。gc首先要判断该对象是否是时候可以收集。两种常用的方法是引用计数和对象引用遍历。 引用计数 每个对象都含...
  • jiutianhe
  • jiutianhe
  • 2013年10月24日 16:21
  • 4781

Java深入 - Java 内存分配和回收机制

Java的GC机制是自动进行的,和c语言有些区别需要程序员自己保证内存的使用和回收。...
  • initphp
  • initphp
  • 2014年06月13日 14:55
  • 28307

Java的内存回收机制详解

Java的内存回收机制详解 说到java内存回收机制,就得先说内存回收的意义。 1 垃圾回收的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不...
  • YQlakers
  • YQlakers
  • 2017年04月12日 08:56
  • 943

Qt 内存回收机制

关于 Qt 内存回收机制的,刚接触 Qt 不久,第一次看到这方面的问题。有点乱,等下次看到更全面和更官方的内容时再补充。          在 C++ Primer 中读到 new 是在堆里面申请一段...
  • dscyw
  • dscyw
  • 2013年11月03日 20:45
  • 2134

php 内存回收机制

php 内存回收机制 对象引用计数器机制回收:     php 5.3之前使用的垃圾回收机制是单纯的“引用计数”,也就是每个内存对象都分配一个计数器,当内存对象被变量引用时,计数器+1;当变量...
  • samxx8
  • samxx8
  • 2014年07月03日 18:33
  • 6485

js中的垃圾回收机制

js具有自动垃圾回收机制,也就是说,执行环境会负责管理代码执行过程中使用的内存。而在C和C++之类的语言中,开发人员的一项基本任务就是手工跟踪内存的使用情况,这是造成许多问题的根源。在编写js程序时,...
  • pvfhv
  • pvfhv
  • 2013年02月19日 08:51
  • 7814

Java 与 C++的内存回收机制

1、C++的内存回收机制 当我们使用new为一个对象分配了空间之后,在这个对象结束使用之后,我们必须人为的去释放这块内存(delete)。 2、Java的内存回收机制 如下边...
  • leo115
  • leo115
  • 2012年11月16日 11:29
  • 3162

Java自动内存管理机制(一) JVM、Class

关于JVM的内存回收机制,内容概念非常多,非一篇博文所能详尽。所以这里只截取重要部分。详细之处可参阅相关书籍或博客: 《深入理解Java虚拟机-JVM高级特性与最佳实践》 周志明 著1.JVM概念 ...
  • u012440687
  • u012440687
  • 2016年07月25日 09:03
  • 761

深入理解Java回收机制

来源:http://www.importnew.com/16173.html 一、垃圾回收机制的意义 Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问...
  • liuyi1207164339
  • liuyi1207164339
  • 2016年03月18日 19:57
  • 1100
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java无用内存自动回收机制
举报原因:
原因补充:

(最多只允许输入30个字)