Java基础-JDK,JRE,JVM面试题

目录

1、JDK

2、JRE

3、JVM

(1)JVM的跨语言特性

(2)类加载机制

(3)垃圾回收机制(GC)

(4)内存溢出(OOM)

(5)内存泄漏

(6)内存溢出与内存泄漏的关系


1、JDK

Java Development Kit,Java开发工具包,包含JRE、开发工具(javac编译、java运行、jdb调试、jar打包);

2、JRE

Java Runtime Environment,Java运行时环境,包含JVM、核心类库、运行工具java;

3、JVM

Java Virtual Machine,Java虚拟机,是Java程序正真运行的地方,也是Java语言跨平台一次编译多处运行的关键,想要在哪个操作系统运行,则只需要安装对于的JVM(JRE)就行。

以简单HelloWorld程序为例,写好.java文件后,经过JDK中的javac编译工具编译生成.class字节码文件,然后在JVM中调用需要的核心类库,解释运行,生成机器码执行出结果。

(1)JVM的跨语言特性

因为JVM跟语言没有直接关系,只识别class字节码文件,Java的.class就是一种字节码文件,还有像Kotlin语言编译成字节码文件后也可以在JVM上运行。

(2)类加载机制

指的是JVM如何把类的二进制数据加载到内存中,并进行校验、准备、解析和初始化,最终形成可以被JVM直接使用的Java类型,即java.lang.Class对象;

加载二进制数据文件(即.class文件),到虚拟机内存;

连接

        验证:是否符合JVM规范;

        准备:为静态变量赋默认值;

                注意:静态变量是类变量,分配在方法区中;并非实例变量,创建对象才有,跟随对象

                                分配在Java堆中;

                        默认值即零值,基本类型为0,引用类型为nul,并非在程序中设定的值l;

                        不包括static final共同修饰的变量,因为是常量,默认值就是在程序中设定的值。

        解析:将符号引用转换为直接引用,即转换为内存地址;

初始化:为静态变量赋值(这是才赋予程序中设定的值),开始执行Java程序class文件。

(3)垃圾回收机制(GC)

主要针对Java堆回收,JVM自动干活,方便程序员管理内存;

针对堆区新生代minorGC,针对堆区老年代majorGC;

确定哪些是可回收

        引用计数法:每一个创建的对象都有一个引用计数器,表示该对象有几个引用指向它,当计数器为零时,表示没有引用指向,就是没有用了,则就可被回收。缺点:当两个对象互相引用时,引用计数器不可能为零,所以永远无法回收。

        可达性分析算法:从整个Java堆内存跟对象出发,依次判断有哪些对象是可达的,不可达即无法访问,被回收。

Java堆:是JVM中最大的内存空间,用于存放所创建的对象,包含常量池。

Java虚拟机栈:存放基本类型的变量、引用类型的的引用。

方法区:存放类信息、静态变量、静态方法。

(4)内存溢出(OOM)

Out Of Memory,是指JVM可用内存不足(先回收,回收还不足时),导致出现异常。

栈溢出:StackOverflowError,栈溢出异常,举例:死递归引起。

堆溢出:OutOfMemoryError,堆内存溢出异常,举例:创建String数组,大小大于设置的堆内存大小。

JVM启动参数:-Xmx4g最大 -Xms4g最小。

方法区溢出、本机直接内存溢出。

(5)内存泄漏

Memory Leak,是指本来无用的对象占用着内存不释放的情况。

典型场景:每当请求进来都分配了内存,但有一部分未能回收,那么随着处理的请求越来越多,内存泄漏也就越来越严重。

(6)内存溢出与内存泄漏的关系

当内存泄露严重时,随着时间的推移一定会发生内存溢出;

内存泄露是资源管理问题和程序bug;

内存溢出是内存空间不足和内存泄漏的最终结果。

  • 21
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值