JVM面试_1


title: JVM面试_1
date: 2019/7/30 8:23:01
tags: JVM面试_1
cateories: 面试




谈谈你对java的理解

  1. java具有平台无关性: 即可以一次编译,到处运行.
  2. jvm具有自动GC功能: 正因为有了GC,我们就不用像C++那样去手动释放内存了.
  3. java有自己的语言特性:如泛型,反射,lamda表达式
  4. java是面向对象的(OOP): 即将现实的事物和关系抽象出来变成类,不用在意过程的实现过程,包括了封装,继承,多态.
有一天你想吃鱼香肉丝了,怎么办呢?你有两个选择

1、自己买材料,肉,鱼香肉丝调料,蒜苔,胡萝卜等等然后切菜切肉,开炒,盛到盘子里。

2、去饭店,张开嘴:老板!来一份鱼香肉丝!

看出来区别了吗?这就是1是面向过程,2是面向对象。
  1. java有自己的类库.
  2. java有异常处理机制.

java的平台无关性如何实现(即Compile Once, Run Anywhere)

java程序执行主要分为两个阶段:

  1. 编译期: 通过javac将源码编译为字节码文件.

  2. 运行期:

字节码文件也就是class文件,其中保存的就是我们java文件翻译成的字节码文件,即java文件中的方法,对象,常量信息等都会被放在字节码文件中, 除此之外,还会添加一个公有的静态常量属性class,这个属性记录了相关的属性信息和类型信息,是class的一个实例,这样我们就可以通过类.class获取其class对象.

我们想看class文件,直接通过notepad++这样子的工具打开是乱码,所以我们需要知道javap这个JDK自带的反编译指令,通过这个指令可以查看字节码文件
可以通过在命令提示符窗口输入javap-help获取javap指令的帮助信息,其中javap -c 类名是用于对代码进行反编译,可以看到java从字节码文件到机器码文件再到显示执行结果的执行过程.
在这里插入图片描述

为什么JVM不直接将源码解析成机器码去执行

如果我们不直接将源码转换成机器码去执行,主要有以下原因:

  1. 准备工作太多: 每次执行都需要各种检查,效率会比较低(.class文件是编译时已经检查过基本语法等之后生成的文件).
  2. 为了实现兼容性,脱离java的束缚: 也可以将别的语言解析成字节码,由JVM进行调用.

JVM如何加载.class文件

JVM是一个内存中的虚拟机,也就是说,JVM的存储就是内存.

JVM大致架构
在这里插入图片描述

  • ClassLoader(类加载器): 依据特定格式(并不是随便一个class文件都可以加载),加载class文件到内存,它只负责加载,能不能运行就要看Execution Engine了.
  • Execution Engine(解释器): 对命令进行解析,解析完成后就提交到操作系统中去执行了.
  • Runtime Data Area(运行时数据区): JVM内存空间结构模型,我们的代码都会被加载到这里,之后才开始运行.
  • Native Interface(本地方法接口): 它融合了不同开发语言的原生库为java使用,也就是说,实现不是通过java实现的,但是java可以直接调用.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值