java面试——JVM

谈谈你对java的理解

  • 平台无关性
  • GC
  • 语言特性(泛型、反射、lamda)
  • 面向对象(封装、多态、继承)
  • 类型
  • 异常处理

Complie Once,Run Anywhere如何实现?(平台无关性)

  java一般分为编译时(javac指令)、运行时

       

     

  java源码被编译成字节码,再由不同的平台的JVM进行解析,Java在不同平台上不需要重新编译,JVM在执行字节码时,只需转换成不同平台上的机器码

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

  准备工作:每次执行都需要各种检查

  兼容性:也可以将别的语言解析成字节码

如何查看字节码?——>>javap

JVM如何加载.class文件?

  

  Class Loader:依据特定格式,加载class文件到内存

  Execution Engine:对命令进行解析

  Native Interface:融合不同开发语言的原生库为java所用

  Runtime Data Area :JVM内存空间结构模型

  类的加载是指把类的.class 文件中的数据读入到内存中,

 

反射

  java反射机制是运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能为java语言的反射机制。

  

类的加载方式

  隐式加载:new

  显示加载:loadclass.forName等

loadclass和forName的区别

  类的加载过程

  加载:通过ClassLoader加载class文件字节码,生成Class对象

  链接:

    • 校验:检查加载的class的正确性和安全性
    • 准备:为类变量分配存储空间并设置类变量初始化值
    • 解析:JVM将常量池内的符号引用转换为直接引用

  初始化:执行类变量赋值和静态代码块

java的内存模型

  内存简介

  

  地址空间的划分

  >>内核空间

  >>用户空间

  

  程序计数器(Program Counter Register)

  >>当前线程所执行的字节码行号指示器(逻辑)

  >>改变计数器的值来选取下一条需要执行的字节码指令

  >>和线程是一对一的关系即“线程私有”

  >>对java方法计数,如果是Native方法则计数器值为Underfined

  >>不会发生内存泄露

posted @ 2019-07-04 20:57  echola_mendes  阅读(199)  评论(0)    收藏  举报