文档详情

Java面试题附答案.docx

发布:2021-07-06约4.4万字共40页下载文档
文本预览下载声明
跨平台性原理是什么? Java实现跨平台无非就是 JVM起的作用,可以这样想,如果是 C/C++的编译方式, 一旦换了一个平台,那么我们就需要重新编译一份对应的可执行代码,但是 Java 则不同,我们编译好了一份 Java字节码,换到不同的平台上时,并不需要重新编译, 前提是这些平台上都装了相应平台的 JVM,JVM不是跨平台的 ,实现跨平台的根本机制还 是JVM 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收? 对于 GC来说,当程序员创建对象时, GC 就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆 (heap)中的所有对象。通过这种方式确 定哪些对象是 可达的,哪些对象是 不可达的 。当 GC确定一些对象为 不可达时, GC就有责任回收这些内存空间。 不可以,程序员可以手动执行 System.gc(),通知 GC运行, 但是 Java语言规范并不保 证 GC一定会执行。 垃圾回收的优点和原理。并考虑 3种回收机制。 Java语言中一个显著的特点就是引入了垃圾回收机制,使 c++程序员最头疼的内存管理的问题迎刃而解,它使得 Java程序员在编写程序的时候不再需要考虑内存管理。由于 有垃圾回收机制, Java中的对象不再有 作用域 的概念,只有对象的引用才有 作用域。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。 垃圾回收器通常是作为一个单独的低级别的线程运行, 不可预知的情况下对内存堆中已 经死亡的或者长时间没有使用的对象进行清除和回收, 程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。 回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。一、分代复制垃圾回收 不同的对象的生命周期是不一样的。因此,不同生命周期的对象可以采取不同的收集 方式,以便提高回收效率。 在Java程序运行的过程中,会产生大量的对象,其中有些对象是与业务信息相关,比如 Http请求中的 Session对象、线程、 Socket 连接,这类对象跟业务直接挂钩,因此生命周期比较长。但是还有一些对象, 主要是程序运行过程中生成的临时变量, 这些对象生命周期会比较 短,比如: String 对象,由于其不变类的特性,系统会产生大量的这些对象,有些对象 甚至只用一次即可回收。 如果每次垃圾回收都是对整个堆空间进行回收, 花费时间相对会长,并且生命周期长的对象依旧存在,因此引入分代回收,把不同生命周期的对象 放在不同代上,不同代上采用最适合它的垃圾回收方式进行回收。 虚拟机中的共划分为三个代:年轻代( Young Generation)、年老点( Old Generation)和持久代(Permanent Generation)。由于对象进行了分代处理,因此垃圾回收区域、时间 也不一样。 GC有两种类型: Scavenge GC和Full GC。 二、标记垃圾回收 在使用标记清除算法时 ,未引用对象并不会被立即回收 .取而代之的做法是 ,垃圾对象将一直累计到内存耗尽为止 .当内存耗尽时 ,程序将会被挂起 ,垃圾回收开始执行 .当所有的未引用对象被清理完毕时 ,程序才会继续执行。 标记清除算法由两个阶段组成 : ① 标记阶段,标记所有的可访问对象。 ② 收集阶段,垃圾收集算法扫描堆并回收所有的未标记对象。三、增量垃圾回收 简单地说,它的存在是为了解决标记清除的长停顿问题。 增量收集器把堆栈分为多个域, 每次仅从一个域收集垃圾。这会造成较小的应用程序中断。 jvm垃圾回收机制,何时触发 minorgc等操作 堆内存分为 年轻代 老年代 和 持 久 代 年轻代 又分为 eden 区和 survivor 区这两个区如果满了 触发的就是 minorgc Java的四种引用,强弱软虚,用到的场景 众所周知, java中是 JVM负责内存的分配和回收,这是它的优点(使用 方便,程序不用再像使用 c那样操心内存),但同时也是它的缺点(不够灵活)。为了解决内存操作不灵活这个问题,可以采用软引用等方法。 在 JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序 就无法再使用这个对象。 也就是说,只有对象处于可触及状态, 程序才能使用它。这 就像在日常生活中,从商店购买了某样物品后,如果有用,就一直保 留它,否则就把它扔到垃圾箱, 由清洁工人收走。 一般说来,如果物品已经被扔到垃圾箱,想再 把它捡回来使用就不可能了。 但有时候情况并不这么简单, 你可能会遇到类似鸡肋一样的物品, 食之无味,弃之可惜。 这种物品现在已经无用了,保留它会占空间, 但是立刻扔掉它也不划算,因 为也许将来还会派用场。对于这样的可有
显示全部
相似文档