科技期刊常用排版软件选择探讨
沈旭
生成PDF 清样下载 引用

复制成功

导出题录

参考文献( GB/T 7714-2015 ) 复制

沈旭,. 科技期刊常用排版软件选择探讨[J]. 软件工程研究,2022.6. DOI:10.12721/ccn.2022.157060.
摘要:
本文首先研究JAVA编程语言的内涵,然后叙述JAVA在软件开发中的应用。通过研究帮助程序设计人员合理使用各种工具,保证计算机软件系统的有效开发,保证程序的稳定运行。
关键词: 计算机软件开发JAVA编程语言
DOI:10.12721/ccn.2022.157060
基金资助:

引言:随着我国社会经济建设的不断推进,我国计算机软件技术逐渐进入到人们的生活,并成为人们日常生活中的重要组成部分。尤其就JAVA语言技术来说,此技术是计算领域中的佼佼者,已经得到人们的认可,此技术不仅操作较为简答,而且不会受到区域和天气变化等干扰,应用价值较高,对其展开深入分析,可保证JAVA语言在计算机软件开发领域中的广泛应用。

一、JAVA编程语言概述

JAVA编程语言是JAVA的核心组成部分,更是JAVA可以被跨平台应用的基础,利用JAVA编程语言,让JAVA程序可以安装在任何操作系统上。虚拟机会执行字节文件,对于任何高级语言编写的源程序,只要可以被翻译成JAVA字节码,都可以在JAVA编程语言上运行,比如JRuby、Jython等等,因此JAVA具备了多语言混合编写的能力,具有较强的拓展性。

JAVA的内存管理方式和C++有很大的区别,对于C++程序员而言,需要为每一个new对象编写专门的delete代码,实现内存空间的回收,避免程序占据太多的内存空间导致程序占用资源过多。但是JAVA编程的过程中,JAVA编程语言将会自动进行内存的分配,包括对new对象的删除,从而达到回收内存的目的。由于JAVA使用了自动化的内存管理机制,减轻了程序员的程序编写难度,但是如果程序员不了解JVM对内存的分配和回收机制,就会导致内存出现泄露或者溢出的情况,再进行数据的排查和定位会变得十分困难[1]

二、JAVA编程语言内存管理设计

内存管理工作就是对内存空间分配和释放,在JAVA程序运行的过程中,所有的对象都储存的堆中,对于对象的施放将会由JAVA垃圾回收器执行和负责。垃圾回收器会针对性地自动释放对象所占用的内存,简化了程序员的操作,但是也加重了JVM的运行负担[2]。在JAVA程序运行的过程中,垃圾回收器需要监控所有对象的动态,以及判断对象被申请、引用、赋值的情况,如果垃圾回收器判断对象不会被再次使用,就会对对象进行垃圾回收,释放对象所占用的内存。但是在实际的运转过程中,并不能保证对所有无用对象都进行回收。

垃圾回收器在完成对所有对象的遍历之后,需要使用合理的处理方式,让对象重新排列。但是回收方式和处理方式在不同的JVM中会有一定的区别,多数系统中都采用停止再复制的方式,或者用标记再回收的方式。

停止再复制:停止再复制的模式下,JVM会先将正在执行的程序暂停,然后在遍历程序中的所有对象,并将其从原来的的堆复制到另一个堆上,并且会修改对这些对象的引用,并将原来的所有对象都视为垃圾。在对象复制到另一个堆上的时候,会使用头尾连接的而方式,让堆能够具有紧凑的排列。这种复制方式和实现方法比较简单,一般情况下具有较快的速度,但是也会有一些原因,导致它的效率不能保证。首先,使用这种方式对于内存空间需求较高,必须有两个堆的空间,导致JVM占据的内存很大,而且在两个堆之间来回复制数据的过程中,也要修改指向这些对象的引用,会占据大量的算力。对于堆上或者静态储存空间的对象,修改比较容易,但是对于其他位置的对象,必须要进行遍历才能找到,这就导致程序的性能会受到严重的影响。同时,很多程序在运行稳定之后,产生的垃圾并不多,甚至不会产生垃圾,但是在这种情况下,如果依然进行复制和修改工作,就会浪费大量运算资源。

标记再回收:标记再回收也是一种回收原理,会从堆或者静态储存器开始,搜索所有的引用,找出存活对象。在查找的过程中,只要找到一个存活对象,就会给该对象一个标记,在找出所有存活对象之后,就可以简单地实现对垃圾对象的识别,然后将内存释放掉,并不需要进行复制和排序的工作[3]。在标记再回收的工作模式下,内存始终处在不连续的工作状态,在不断释放垃圾对象之后,或者内存处于完全的零碎状态后,才会对空间继续进行密集的处理,并且找到它所标记的对象进行整理,这时JVM也需要暂停正在执行的程序。使用这种方式是的问题在于程序的运行速度会很慢,但是如果程序相对较小,只有少量垃圾或者没有垃圾时,这种方式就比较有效了。

自省方式:通常在JVM中,对垃圾的回收都是采用以上两种方法,实际工作过程中,会采用两种方式融合的方法,也就是自省方式。在所有的内存对象都是长期存活而且效率下降时,就会转化为标记在复制的方式,如果发现空间已经出现了严重的撕裂,那么就会采用停止再复制的方式。由于在工作过程中JVM会对自身的工作状态不断分析,所以得名“自省”。由于内存的分配都是以块为单位的,一般都和对象大小相同。但是如果有比较大的对象,会有专门的块空间。因此,每个块中都会有世代计数器,判断内存中的对象是否被使用了。在复制的过程中,通过复制那些比较小的对象,将内存联系起来,而对于那些大对象,修改的时候会利用世代计数器,判断大对象是否存活,从而完成清理工作。

三、JAVA的内存设计

(一) JAVA内存泄露的出现

内存泄露是程序员动态分配了内存,但是在使用完成后并没有释放内存,这种情况在C++程序中比较常见。但是在JAVA中,内存回收工作会交给虚拟机自动管理,所以并不需要程序员专门调动函数。但是因为JVM的运行机制,如果程序员并没有做好内存分配工作,就会导致泄露问题。例如在程序运行期间,有两个不同生存周期的A类和B类,程序运行时,A类首先被实例化,并且在程序运行的很长时间内都存在;某个时间点,B类被创建,A类添加了对B类的引用。如果B类是用户界面的小控件,由用户决定其是否被清除,如果没有清除A对B的引用,即便不再需要B那么B类也会占据控件。

(二)内存泄露检测工具

内存泄露检测工具能够检测内存的泄露问题,通过JAVA程序在运行过程中的所有申请、释放动作,从而统计内存信息,以及完成可视化显示。开发人员就能够根据这些信息分析是否会存在内存泄露。目前的泄露检测工具包括JRockit Memory Leak Detector、HeapAnalyzer等等。

(三)finalize()函数

该函数能够弥补垃圾回收装置存在的不足,由于垃圾回收器只能对存货对象进行搜索,并且使用new的方式进行内存空间的分配,但是不能回收一些特殊的内存空间。所以JAVA也提供了finalize()函数满足程序员的要求,在内存回收器进行无用对象释放时,会先调用对象的finalize()函数,在垃圾回收器动作发生时再释放真正的对象。因此在程序设计的过程中finalize()来释放回收器无法释放的特殊内存[4]

结束语:JAVA虽然有自动的工作内存释放机制,但是如果程序设计存在问题,依然会导致内存泄露的问题。因此,程序员在设计程序的时候,需要做好对内存泄露工具的使用,以及合理使用finalize()函数,加强对内存的控制,清除垃圾对象释放内存,确保程序的稳定运行。

参考文献:

[1]于斌. MSVL程序的高效运行时验证方法研究[D].西安电子科技大学,2019.

[2]管文浩. 内存泄露环境下可验证对称可搜索加密技术研究[D].西安电子科技大学,2018.

[3]李褚乔. 基于Android的内存泄露检测方法研究[D].哈尔滨工程大学,2017.

[4]朱洪军,韩洋,华保健,陈灏.移动应用程序内存泄露机制分析与检测方案设计[J].计算机工程与应用,2016,52(17):29-35+67.

》在线投稿系统

*文章题目:
*作者姓名:
*电子邮箱:
*通讯地址:
*联系方式:

  备      注:

*上传稿件:

支持上传.doc,.docx,.pdf,.txt,.wps文件

投稿须知:

1、审稿结果将于1~7个工作日以邮件告知,请注意查收(包含录用通知书、审稿意见、知网CNKI查重报告)。

2、提交投稿后,若7个工作日之内未接到录用通知,则说明该文章未被录用,请另投他刊。

3、凡投寄本刊稿件,如在内容上有侵权行为或不妥之处,均应文责自负。本刊有权对来稿进行文字编辑、加工和修改,如不同意,请附说明,以便妥善处理。

4、多作者文稿署名时须征得其他作者同意,排好先后次序,通知用稿后不再改动。

5、凡投往本刊稿件一经录用发表,其版权归本刊所有。

6、本刊已全文录入中国知网、万方、维普等数据库,如作者不同意被收录,请提前申明,未申明者,本刊一律视为同意被收录。

7、请勿一稿多投。