人的记忆力会随着岁月的流逝而衰退,写作可以弥补记忆的不足,将曾经的人生经历和感悟记录下来,也便于保存一份美好的回忆。相信许多人会觉得范文很难写?以下是我为大家搜集的优质范文,仅供参考,一起来看看吧
java管理岗java主管的责任和义务篇一
;摘 要:java软件在知识产权的保护上面临着很大的安全风险,java软件保护是一个亟需解决的课题。在深入研究java类文件加载机制的基础上,结合密码学中加密体制、密钥管理等技术提出了一种新的java软件保护方案-加密类文件保护方案。
关键词:java 软件保护;密钥管理
java软件保护是目前业界,尤其是很多大公司非常关注的一个课题,因为许多大型的工业、医疗等设备的实时应用软件都是采用java开发的,而java类文件本身固有的特性给攻击者提供了反编译的机会,一旦这些软件被破解,将给设备商带来不可估量的损失。用加密的方法来保护java类文件,加密可以有效地对抗反编译,加密系统的关键问题是如何安全有效地管理密钥。
一、软件保护技术的应用与不足
在对java体制和java类文件深入分析研究的基础上,人们从不同的角度出发,提出了多种保护技术,这些保护技术在一定程度上起到了保护java类文件的作用,但是都存在各自的缺点和不足。将本地化技术应用在java软件保护上,可以收到很好的效果,但是也存在明显的问题,本地化技术是以丧失java的跨平台性为代价的,而这恰恰是java广受欢迎的重要原因。数字水印技术目前被广泛的应用,但是数字水印技术不是一种主动的防御技术,而是一种被动的取证技术,只能在侵权行为己经发生,攻击者己经成功获得代码,为证明产权的归属提供证据时发挥作用,而不能从根本上用技术手段防止侵权行为的发生。代码混淆技术是目前应用最广泛、研究最多的一种技术手段,混淆使用的是类文件模糊技术,通过使用各种手段模糊代码的语义信息、打乱程序的执行流程,从而达到降低反编译代码可读性的目的,但是混淆的前提是不能对程序的外部功能表现有任何的影响,在重构技术日趋成熟的今天,只要有足够的耐心,这些混淆了的代码仍然是可以被反编译出来并且能够被读懂的。
二、密钥保护的可行性分析
在java软件保护中,需要保护的内容是体现软件价值的创新之处和核心算法,这些都包含在不同的类文件中,如果能够确保核心类文件的内容不被攻击者获得就可以确保java软件的安全性。利用密码技术,可以将敏感信息加密并通过一种并不安全的途径传递。这样,只有拥有密钥的收件人或终端才能解读原始信息。加密技术是一种数据安全的科学,要完成信息加密需要一种加密算法和一个密钥。加密的安全性取决于加密算法的强度和密钥的保密性。现代密码理论和应用实践证明,使用高级加密算法如:des、aes等算法加密文件,在攻击者唯密文攻击的情况下,加密文件具有极高的安全性,即在加密机、解密机受到良好保护不被攻击者获得的情况下,可以确保加密文件具有相当的安全性。而对类文件进行加密的方法来保护类文件,能够实现保护java软件的目的。
三、软件保护技术的方案与实现
在java软件保护技术中,密钥是整个系统的关键,而攻击者对系统的攻击通常也从对密钥的攻击入手。对软件系统密钥攻击的常见方法是跟踪软件的执行流程,通过对软件解密流程的分析来探测密钥的存放位置,而密钥通常会存放在相对固定的位置上,这样跟踪者在多次跟踪后,就比较容易确定密钥的位置。
1、java的类加载机制
java语言编译器把源代码转换为虚拟机上的机器语言,产生的虚拟机代码存储在扩展名为class的类文件中。执行时,虚拟机解释程序解释这些类文件,把虚拟机上的指令序列翻译成目标机器的机器语言。在java虚拟机中,各个class loader对象是按层次结构组织的,除了最顶层的bootstrap class loader以外,每一个class loader对象都有一个parent class loader。这种父子层次结构的组织关系是建立在调用关系的基础上,而不是建立在各个class loader类的继承关系上。虚拟机除了装载某个特定程序需要的类外,还必须装载系统类(system class)。虚拟机知道如何利用引导类装载器bootstrap classloader装载系统类(中读取),bootstrap classloader是虚拟机的一个重要组成部分,它通常是用c语言实现的。我们无法控制系统类的装载过程,但是可以用定制类装载器装载应用程序类。
2、定制启动程序
对单机应用程序而言,decrypt classloader类是在定制的启动程序中被使用并创建对象的,启动程序首先用deerypt classloader对象来载入并解密应用程序的 mainclass,应用程序中所有其他的类都是被 mainclass直接或间接的引用,因而这些被引用的类都会采用deerypt classloader来载入并解密。这里的启动程序是一个bootapplicatinn类,该类的作用就是替代己经加密过的 mainclass来启动己经加密过的java应用程序。该类和decrypt classloader类一样,是不能被加密的,否则就没有类可以启动已经加密过的java应用程序了。而且boot application类的内部实现中也没有任何与加解密有关的信息,即使被成功反编译也是没有意义的。bootapplieation类也是一个main class,是一个可以启动并运行的java类。在bootapplication类中首先保存传入给真正应用程序的 mainclass的参数,以便在解密生成真正的mainclass后,可以把保存好的参数传给它。bootapplication类首先创建一个decryptelassloader对象,用该对象来载入真正的mainclass类,e( )方法。
3、web应用程序的保护
在web应用程序中,发布的应用程序是war包,其中包括servlet,jsp,html以及javascript等各种文件。只有把war包部署在应用服务器上,web应用程序才能运行。在单机应用程序中,mainclass类文件被加密,应用程序的启动是由boot application类来完成的。在bootapplieation类中需要创建boot classloader对象并解密mainclass类文件,这样被mainclass引用的所有类都会被decryptclassloader对象载入。而在web应用程序中,启动程序始终是web服务器,这是一个无法改变的前提。当war包被加密之后,包中的所有类文件都是加密过的java类文件。因为webappclassloader只能加载正常的java类文件,而不能加载己经被加密的java类文件,所以web服务器无法启动己经被加密过的应用程序。为了解决这个问题,本方案设计的方法是由web应用程序负责创建decryptclassloader。这个方法的优点是无须改动tomcat中的任何文件,缺点是需要修改web应用程序的部分源代码。
四、结语
应用此方案实现java软件的保护,单机应用程序不需要对应用软件的代码作任何改变,网络应用程序的改动也比较小,将servlet的接口和实现分离即可,只需要使用定制的工具加密相应的类文件,并在应用环境下使用定制的classloader即可实现类文件的解密,因此本方案是一种通用性强、高效方便实现java软件保护的方法。
参考文献:
作者简介:庄笑衍(1990,9-),男,江苏宿迁人,天津工业大学2009级软件工程专业本科生。
相关热词搜索:;java管理岗java主管的责任和义务篇二
java内存怎么划分?经常有人把java内存区分为堆内存(heap)和栈内存(stack),这种分法比较粗糙,java内存区域的划分实际上远比这复杂。这种划分方式的流行只能说明大多数程序员最关注的、与对象内存分配关系最密切的内存区域是这两块。其中所指的“堆”是为 java 堆,所指的“栈”是为虚拟机栈或者说是虚拟机栈中局部变量表部分。
程序计数器是一块较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器完成。
由于java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)都只会执行一条线程中的指令。因此,为了线程切换后能恢复到正确的执行位置,独立存储,我们称这类区域为“线程私有”的内存。
如果线程正在执行的是一个java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的`是native方法,这个计数器值为空(undefined)。
此内存区域是唯一一个在java虚拟机规范中没有规定任何 outofmemoryerror 情况的区域。
与程序计数器一样,java 虚拟机栈也是线程私有的,生命周期与线程相同。
虚拟机栈描述的是 java 方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。
局部变量表存放了编译期可知的各种基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用(reference类型,它不等同于对象本身,可能是一个指向对象起始地址的引用指针,也可能是指向一个代表对象的句柄或其他与此对象相关的位置)和returnaddress类型(指向了一条字节码指令的地址)。
其中64位长度的 long 和 double 类型的数据会占用2 个局部变量空间(slot),其余的数据类型只占用一个。局部变量表所需的内存空间在编译期间完成分配,当进入一个方法时,这个方法需要在帧中分配多大的局部变空间是完全确定的,在方法运行期间不会改变局部变量表的大小。
在 java 虚拟机规范中,对这个区域规定了两种异常状况:如果线程请求的栈深度大于虚拟机所允许的深度,将抛出 stackoverflowerror 异常;如果虚拟机栈可以动态扩展,如果扩展时无法申请到足够的内存,就会抛出 outofmemoryerror 异常。
本地方法栈与虚拟机栈所发挥的作用是非常相似的,区别不过是虚拟机栈为虚拟机执行 java 方法服务,而本地方法栈则为虚拟机使用到的 native 方法服务。在虚拟机规范中对本地方法栈中的方法使用的语言、使用方法与数据结构并没有强制规定,因此具体的虚拟机可以自由实现它。甚至有的虚拟机(譬如sun hotspot虚拟机)直接就把本地方法栈和虚拟机栈合二为一。
与虚拟机栈一样,本地方法栈区域也会抛出 stackoverflowerror 和 outofmemoryerror 异常。
对于大多数应用来说,java 堆是 java 虚拟机所管理的内存中最大的一块。java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例以及数组都在这里分配内存。
java堆是垃圾收集器管理的主要区域,因此很多时候也被称为“gc堆”。从内存分配的角度看,由于现在收集器基本都采用分代收集算法,所以 java 堆中还可以细分为:新生代和老年代;再细致一点的有 eden 空间、from survivor 空间、to survivor 空间等。从内存分配的角度看,线程共享的 java 堆中可能划分出多个线程私有的分配缓冲区。不过无论如何划分,都与存放内容无关,无论哪个区域,存储 的都仍然是对象实例,进一步划分的目的是为了更好地回收内存,或者更快地分配内存。
java虚拟机规范的规定,java 堆可以处于物理上不连续的内存空间中,只要逻辑上是连续的即可。在实现时,既可以实现成固定大小的,也可以是可扩展的,不过当前主流的虚拟机都是按照可扩展来实现的(通过-xmx和 -xms控制)。
如果在堆中没有内存完成实例分配,并且堆也无法再扩展时,会抛出 outofmemoryerror 异常。
方法区与 java 堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
方法区在虚拟机启动的时候被创建,虽然方法区是堆的逻辑组成部分,但是简单的虚拟机实现可以选择在这个区域不实现垃圾回收。java虚拟机规范也不限定实现方法区的内存位置和编译代码的管理策略。方法区的容量可以是固定大小的,也可以随着程序执行的需求动态扩展,并不在过多空间时自动收缩。方法区在实际内存空间 中可以是不连续的。
根据 java 虚拟机规范的规定,当方法区无法满足内存分配需求时,将抛出 outofmemoryerror 异常。
运行时常量池是方法区的一部分,用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中存放。一般来说,除了保存class文件中描述的符号引用外,还会把翻译出来的直接引用也存储在运行时常量池中。
运行时常量池相对于 class 文件常量池的另一个重要特征是具备动态性,java 语言并不要求常量一定只有编译期才能产生,也就是并非预置入 class 文件中常量池的内容才能进入方法区运行时常量池,运行期间也可能将新的常量放入池中,这种特性被开发人员利用的比较多的便是 string 类的 intern() 方法。
既然运行时常量池是方法区的一部分,自然受到方法区内存的限制,当常量池无法再申请到内存时会抛出 outofmemoryerror 异常。
java管理岗java主管的责任和义务篇三
;摘要:信息时代的到来给网络管理带来了巨大的挑战,对网络管理进行相关研究势在必行。本文对网络管理的涵义、工作模式和基于java技术的网络管理系统进行了简要的阐述。本文的研究对以后如何进行网络管理具有一定的理论意义和实践意义。
关键词:java;网络管理;web
liu shaogang
(lincang teachers’ college,lincang677000,china)
一、引言
随着计算机网络技术和通信技术的飞速发展,网络管理作为网络系统的重要组成部分,在网络系统中占有重要的地位。面对网络复杂性、综合化等特点,如何对网络进行有效管理成为当前研究的重点。传统的网络管理手段已经不能适应新时期和新形势发展的需要,而java语音由于具有面向对象、分布式、多线程和支持网络编程等优点,在网络管理中得到了广泛的应用。
二、网络管理
(一)网络管理涵义。所谓网络管理是对网络本身和网络服务的操作、管理和支持的统称。网络管理的过程包括数据采集、数据处理,然后把处理的结果提交给管理者,从而进行相关的操作使用。网络管理通过控制和管理计算机与网络设备的连接来最大限度的提高网络设备的利用率,提高工作效率,降低网络运行成本,为网络的持续健康发展提供保证。
(二)网络管理模式。随着计算机网络发展规模的日益壮大,网络管理系统的结构主要分为集中式和非集中式这两种管理结构方式。集中式网络管理中的管理决策主要由有限地域上集中的管理者来完成。非集中式管理中的管理决策由分布广泛的多个管理者共同协作完成。集中式网络管理模式是应用最为普遍的一种结构。
为了使用新形势下网络技术的发展,采用分布式面向对象的技术进行网络管理,从而产生了非集中式网络管理模式,比较常用的有层次式和分布式两种。层次式网络管理模式如图2所示。由图1可知,层次式网络管理模式采用“管理者之管理者”(manager of manager,mom)的模式,上层mom控制它们之间的通信连接。
随着网络技术的飞速发展和广泛应用,网络管理技术也朝着开放性、综合性、智能化和基于web的网络管理方向发展。
(一)基于web的网络管理模式。基于web的网络管理模式已经成为网络管理未来发展的一个趋势。java技术作为web网络管理中的一种关键技术,它具有灵活多变、可移植性和易于网络编程等特点,在基于web的网络管理模式中起着重要的作用。
(二)基于java applet的网络管理系统。java是一种面向对象、分布式、高效能的语言,具有分布式和可移植等特点。java applet是java中执行于web浏览器上的应用小程序,它可以从服务器上进行下载并可以在浏览器中运行。当浏览器访问嵌入java applet的网页时,代码就会被下载到本地计算机中运行,以减轻服务器端的负载。
网络管理系统是通过对数据进行采集处理来对网络的工作状态进行监视和性能分析。根据基于web的网络管理模型,基于java applet的网络管理系统结构可以分为管理客户端、网管系统服务器和网管平台三部分。
1.管理客户端。管理客户端主要包括web浏览器和java applet管理程序。管理者与网络管理系统之间的联系通过web浏览器来实现,web浏览器可以实现对网络信息的采集和处理工作。与此同时,管理者通过下载网络管理所必须的java applet管理程序来实现与网管系统服务器之间的通信连接,进行来实现数据的发送和接收工作。
2.系统服务器。系统服务器作为网络管理系统的核心部分,它主要由web服务器、服务器应用程序和数据库以及相应的网管平台组成。系统服务器程序的主要功能是负责监听和响应管理用户的请求,与此同时调用相应的管理功能模块来进行工作。管理功能模块的主要功能是实现网络管理和对数据库的访问。
3.网管平台。通过网络管理平台,可以实现服务器应用程序对网络设备资源的管理工作。基于java applet的网络管理系统,具有减少嵌入式设备端的资源开销和工作效率高等优点。用户通过嵌入到系统web服务器主页面中的applet标签,调用实现网管系统功能的java applet程序。这样极大的减少了运行成本,操作方便和使用性强。
四、结语
java技术与web技术的结合应用给网络管理带来了新的发展。java技术由于具有面对对象、可移植性好和易于编程等优点,在网络管理中发挥了重要的作用。随着我国网络管理技术的不断发展,java技术以其鲜明的特点在未来的发展中占有一席之地。
参考文献:
相关热词搜索:;
一键复制