乐闻世界logo
搜索文章和话题

Java面试题手册

Java中如何进行垃圾回收?

Java中的垃圾回收主要是通过垃圾回收器(Garbage Collector, GC)来自动管理内存的。Java的垃圾回收机制主要涉及以下几个步骤:标记:首先,垃圾回收器会识别出所有从根集合(通常包括全局引用、活动线程的栈帧中的局部变量和输入参数等)可达的对象。所有可达的对象被视为活动的,不可达的对象则被认定为垃圾。正向清扫或删除:在标记阶段后,垃圾回收器会清除掉所有标记为垃圾的对象,释放被它们占用的内存空间。具体方法可以是直接清除这些对象的内存,或者是其他如压缩、复制等操作来优化内存的使用。压缩(可选):为了防止内存碎片化,某些垃圾回收器会在清除不可达对象之后进行内存压缩。这一步骤会将存活的对象向内存的一端移动,从而使得剩余的内存空间连续,便于未来的内存分配。Java中常见的垃圾回收器包括:串行垃圾回收器(Serial GC):适用于小型应用和单处理器环境。在进行垃圾回收时会暂停所有应用线程。并行垃圾回收器(Parallel GC):在多个处理器上并行地执行垃圾回收,适用于多核服务器。能够在垃圾回收时缩短应用停顿的时间。并发标记清除(CMS)垃圾回收器:减少停顿时间,通过并发标记和并发清除阶段来回收垃圾,适用于交互式应用。G1垃圾回收器:面向服务端应用,采用分区堆的方式,允许垃圾收集与应用线程并发执行,以及优化可预见的停顿时间。不同的垃圾回收器适用于不同类型和规模的应用,开发者可以根据具体需求选择合适的垃圾回收策略。
阅读 0·2月7日 12:47

Java中的对象是如何序列化的?

在Java中,对象序列化是指将对象的状态转换为字节序列的过程,这使得对象可以被存储或者通过网络传输。对象序列化主要通过实现 java.io.Serializable 接口来完成。这是一个标记接口,它不包含任何方法,仅用于标识类的对象可以被序列化。具体的序列化过程通常如下:实现Serializable接口: 要使Java类可序列化,类必须实现 java.io.Serializable 接口。ObjectOutputStream: 使用 ObjectOutputStream 类将对象写入流中。这个类有一个 writeObject() 方法,用于序列化指定的对象并将其输出到输出流中。序列化过程: 当通过 writeObject() 方法写入对象时,Java虚拟机(JVM)首先检查该对象是否已经被序列化过。如果没有,JVM将记录该对象的类型和状态(即其成员变量的值),然后递归地对该对象的所有引用进行相同处理。transient关键字: 如果不希望某个字段被序列化,可以使用 transient 关键字来修饰该字段。被 transient 修饰的字段在对象序列化时会被忽略。UID: 在类中声明一个名为 serialVersionUID 的静态常量可以用来显式定义序列化版本UID。这有助于确保序列化的兼容性,即在类定义变化时仍然能够对老版本的序列化对象进行反序列化。反序列化是上述过程的逆过程,主要通过使用 ObjectInputStream 类和其 readObject() 方法来实现,将字节序列恢复为Java对象。
阅读 0·2月7日 00:13