- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《Java安全知识
Java平台提供的原始安全模式是沙箱模式。对于从开放网络中得到的是不被信任的代码,该模型提供了一个非常严格的使用环境。沙箱模型的实质在于信任本地代码。使其完全可以访问重要的资源(例如文件系统);而下载的远程代码则不被信任,因而只能访问沙箱内提供的有限资源。沙箱模型通过Java开发工具包(JDK)发布,一般被用JDK编写的应用程序所采纳(包括支持Java的网络浏览器)。
Java沙箱是运行Java小应用程序的一个软件单元,对于Java小应用程序的访问权限加以限制,防止它访问计算机的关键部分,如磁盘驱动器、网络套接口和内存区。Java沙箱有三部分组成:字节码检验器、类装载器和安全管理器,这三部分共同完成装载和运行时对Java Applet的检验,用以限制对文件系统和网络访问及对浏览器内部的访问。
Java程序可以从网络上下载运行,这必然会带来很多不安全因素。一些恶意的Hacker可以直接写出直接代码段攻击用户节点,如删除文件、搞乱硬盘或未经用户许可在网上发布本地信息等。这些防卫本地机被攻击的任务就交给了Java虚拟机完成。Java虚拟机提供了几种安全机制,其中两种主要的安全机制是安全管理器和Java类文件认证器。
安全管理器时安全的实施者,它是一个可扩展类,提供加在应用程序和特殊系统上的安全措施。它实现Java虚拟机的安全策略。安全管理器建立Java程序的名空间,限制的对网络、本地文件系统和其他部分的访问。
Java认证器在.class文件运行前完成该文件的安全检查,确保Java字节码符合Java虚拟机规范。Java平台通过使用认证器查看类文件的句法和词法的正确性,检查版本及API符合性等,保证病毒和其他恶意程序不会侵犯本地系统。认证器包括四个阶段的的操作:类文件认证、类型系统认证、字节码认证和运行时类型的访问检查。此外,认证器在检查期间还能识别算法操作的上溢和下溢等其他可能发生在运行期间的程序错误。
Java虚拟机是加在当前主机操作系统上的,由于Java字节码执行速度目前要比本地机器慢10到20倍,速度问题可能是影响Java推广的唯一原因。目前,针对Java虚拟机程序速度慢的问题,Microsoft、Borland等提出了及时编译技术(Just-In-Time)JIT。具体说,就是JIT编译器在程序开始执行前把所有字节码翻译成本地机器码,然后再将翻译后的机器码放在CPU上运行。这样,就用字节码编译器代替了原来的解释器,它对用户透明又提高了执行速度也许将来JIT编译器加到Java虚拟机中,可以解决所有性能问题。
Java是如何管理内存的?
答案:Java的内存管理就是对象的分配和释放问题。在Java中,程序员需要通过关键字new为每个对象申请内存空间(基本类型除外),所有的对象都在堆(Heap)中分配空间。另外,对象的释放是由GC决定和执行的。在Java中,内存的分配是由程序完成的,而内存的释放是由GC完成的,这种收支两条线的方法却是简化了程序员的工作。但同时,它也加重了JVM的工作。这也是Java程序运行速度较慢的原因之一。因为,GC为了能够正确释放对象,必须监控每一个对象的运行状态,包括对象的申请、引用、被引用、赋值等,GC都需要进行监控。
监视对象状态是为了更加准确地、及时地释放对象,而释放对象的根本原则就是该对象不再被引用。
为了更好地理解GC的工作原理,我们可以将对象考虑为有向图的顶点,将引用关系考虑为图的有向边,有向边从引用者指向被引用对象。另外,每个线程对象可以作为一个图的起始顶点,例如,大多程序从main进行开始执行,那么该图就是以main进程顶点开始的一棵根树。在这个有向图中,根顶点可达的对象都是有效对象,GC将不回收这些对象。如果某个对象(连通子图)与这个根顶点不可达(注意,该图为有向图),那么我们认为这个(这些)对象不再被引用,可以被GC回收。
用有向图表示内存管理。对于程序的每一个时刻,都有一个有向图表示JVM的内存分配情况。以下的图,就是左边的代码的示意图。
什么是Java中的内存泄露?
答案:在Java中,内存泄露就是存在一些被分配的对象,这些对象有下面两个特点,首先,这些对象是可达的,即在有向图中,存在通路可以与其相连;其次,这些对象是无用的,即程序以后不会再使用这些对象。如果对象满足这两个条件,这些对象就可以判定为Java中的内存泄露,这些对象不会被GC说回收,然后它们却占用内存。
在C++中,内存泄露的范围更大一些。有些对象被分配了内存空间,然后却不可达,由于C++中没有GC,这些内存将永远的收不回来。在Java中,这些不可达的对象都由GC负责回收,因此程序员不需要考虑这部分的内存泄露。
对于C++,程序员需要自己管理边和顶点,而对于Java程序员只需要管理边就可以了(不需要管理顶点的释
文档评论(0)