java面试题(一)

1. JDK和JRE的区别

  • JDK是整个JAVA的核心,包括了Java运行环境JRE,一堆Java工具和Java基础的类库。通过JDK开发人员将源码

    ​ 文件(java文件)编译成字节码文件(class文件)。

  • JRE是Java运行环境,不含开发环境,即没有编译器和调试器。将class文件加载到内存准备运行

2. 讲一讲Java内存的堆(heap)、栈(stack)和方法区(method)

  • 栈:调用方法将在栈中开辟内存,称为入栈(压栈)。

    • 栈内存存放基本类型值和引用数据类型的地址。
    • 栈内存中的数据,没有默认初始化值,需要手动设置。
    • 方法调用完成,栈内存立即释放,称为出栈(弹栈)。
  • 堆:用于存放使用new创建的对象或数组。

    • 所有的对象都有内存地址值。

    • 数据都有默认初始化值。

    • 堆内存中的对象不再被指向时,JVM启动垃圾回收机制,自动清除。

    • 方法区:与Java堆一样,是各个线程共享的内存区域。

    • 存储已被Java虚拟机加载的类信息、常量、静态变量、以及编译器编译后的代码等。

3. GC是什么? 为什么要有GC?

  • GC是垃圾收集的意思。

  • 是指JVM用于释放那些不再使用的对象所占用的内存。垃圾回收可以有效的防止内存泄露

    ​ 有效的使用可以使用的内存。Java有了GC,就不需要程序员去人工释放内存空间。

4. 在java中,对象什么时候可以被垃圾回收?

  • 一般情况下java中对象可被回收的前提是:该对象不再被引用。

    ​ 然后垃圾回收器在回收的时候便会把这个对象清理掉

  • 垃圾回收机制的算法:

    • 引用计数算法:

      • 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;

        ​ 当引用失效时,计数器 值就减1;

        ​ 任何时刻计数器都为0的对象就是不再被使用的,垃圾收集器将回收该对象使用的内存。

    • 根搜索算法:

    • 过一系列的名为“GC Root”的对象作为起点,从这些节点向下搜索

      ​ 搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Root没有任何引用链相连 时,则该对象不可达,该对象是不可使用的,垃圾收集器将回收其所占的内存。

5. java中会存在内存泄漏吗,请简单描述。

  • 会存在,
  • 泄漏是指程序分配的内存未释放或无法释放的现象。
  • java中内存泄露的发生场景:全局的集合变量、不正确的单例模式的使用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值