首页 > 编程语言 >Java基础-JDK,JRE,JVM面试题

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

时间:2024-04-01 09:29:21浏览次数:32  
标签:面试题 Java JRE 回收 内存 JVM 溢出

目录

1、JDK

2、JRE

3、JVM

(1)JVM的跨语言特性

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

(3)内存溢出(OOM)

(4)内存泄漏

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


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)垃圾回收机制(GC)

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

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

确定哪些是可回收

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

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

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

栈内存:存放基本类型的变量、引用类型的的引用。

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

(3)内存溢出(OOM)

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

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

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

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

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

(4)内存泄漏

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

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

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

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

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

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

标签:面试题,Java,JRE,回收,内存,JVM,溢出
From: https://blog.csdn.net/m0_63927940/article/details/137217535

相关文章

  • 如在 Java 中分割 Excel 工作表
    前言在Excel中创建的大多数商业报告不是单页的文档,而是包含了多个上下文相关的信息,这些信息被存储在多个工作表中。例如我们的一些地区销售报告、按部门分类的员工记录、每家店铺的库存清单等。然而,随着Excel文件中工作表数量的增加,要在单一文档内导航和管理数据会变得十分具有......
  • 学习java第二十九天
    如何通过注解配置文件?@Configuration 用于指定当前类是一个spring配置类,当创建容器时会从该类上加载注解,value属性用于指定配置类的字节码。@ComponentScan 用于指定Spring在初始化容器时要扫描的包。basePackages属性用于指定要扫描的包。@PropertySource 用于加......
  • 【粉丝福利社】《Effective Java》(文末送书-进行中)
    ......
  • Java实现ATM机模拟系统(week1)
    目录目的项目规划(第一周)ATM机系统第一周需求分析账户管理大类Account(账户)类AccountOperations(对账户操作)接口创建账户账户内容管理账户权限管理User类UserOperations(用户操作)接口Operations类货币大类基本属性方法操作界面合作开发(利用git)后言 ......
  • .net和java串口通讯压力测试对比
    最近由于工作要求,需要对一个串口通讯设备进行压力测试,要求连续持续对串口设备发送指令,无间隔,测试设备是否会死机。要求做到毫秒级,测试第三方的工具,基本上都无法达到毫秒级,最少的也是10毫秒。于是就自己写代码测试。通过.net写,发现最少能达到1毫秒,但是有遗漏,看日志如下2024-03-3......
  • 解决 java.sql.SQLException:null,message from Server:"Host 'xxx' is not allowed t
    问题:url中机器地址写127.0.0.1或是localhost时不会发生,但写真实IP就出现此异常,即使从本机运行也会出此错。解决方法:在MySQL控制台,执行以下命令:mysql>usemysql;Databasechangedmysql>updateusersethost='%'whereuser='root';QueryOK,1rowaffected(0.04sec)......
  • 史上最全Java核心面试题(带全部答案)2024年最新版
    今天要谈的主题是关于求职,求职是在每个技术人员的生涯中都要经历多次。对于我们大部分人而言,在进入自己心仪的公司之前少不了准备工作,有一份全面细致面试题将帮助我们减少许多麻烦。在跳槽季来临之前,特地做这个系列的文章,一方面帮助自己巩固下基础,另一方面也希望帮助想要换工......
  • JavaScript基础篇3【数组】
    今日学习内容什么是数组简单理解就是用于临时存储同类数据,本质上是一种具有顺序的特殊对象【当然其实是可以存储不同的数据类型的,只是说那样做很少,所以一般就如前一样理解】数组的定义JavaScript中有两种定义数组的方式:实例化Array对象【称之为“完整形式”】vararr......
  • java(包)package(1)
    为了使类型更容易找到和使用,避免命名冲突,以及控制访问,程序员将相关类型类编排到包中。定义:包是一组提供访问保护和名称空间管理的相关类型。注意,类型指的是类、接口、枚举和注释类型。枚举和注释类型分别是特殊类型的类和接口,因此在本文中,类型通常被简单地称为类和接口。......
  • java(包)package(3)
    命名包由于世界各地的程序员都使用Java编程语言编写类和接口,因此许多程序员可能会对不同的类型使用相同的名称。当定义了一个Rectangle类时,但该类Rectangle在java.awt包定义过。但是,如果两个类位于不同的包中,编译器允许它们具有相同的名称。每个Rectangle类的完全限定名包括包......