必威体育Betway必威体育官网
当前位置:首页 > IT技术

面试题:你说一下JVM?

时间:2019-10-12 11:14:20来源:IT技术作者:seo实验室小编阅读:67次「手机版」
 

jvm

JVM就是java虚拟机,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。

1.类的加载(加载到JVM)

class文件通过类加载器加载到内存。

类加载全过程:加载Class对象---连接(1.验证(安全和规范),2.准备(分配内存),3.解析(将类中的符号引用转换成直接引用))---初始化---使用---卸载

类加载器使用的加载模式:双亲委托机制

  • 1、当APPClassLoader加载一个class时,它首先不会自己去尝试加载这个类,而是把类加载请求委派给父类加载器ExtClassLoader去完成。
  • 2、当ExtClassLoader加载一个class时,它首先也不会自己去尝试加载这个类,而是把类加载请求委派给BootStrapClassLoader去完成。
  • 3、如果BootStrapClassLoader加载失败(例如在$JAVA_HOME/jre/lib里未查找到该class),会使用ExtClassLoader来尝试加载;
  • 4、若ExtClassLoader也加载失败,则会使用AppClassLoader来加载
  • 5、如果AppClassLoader也加载失败,则会报出异常ClassnotfoundException

类加载器:

BootStrapClassLoader   启动类加载器    负责jre/lib/rt.jar

ExtClassLoader  扩展类加载器   jre/lib/*.jar或-Djava.ext.dirs

AppClassLoader  应用类加载器   记载classpath中指定的jar包及目录中class

UserClassLoader  自定义的类加载器   继承ClassLoader   getClass().ClassLoader()可以获得

2.在类加载检查通过后,接下来虚拟机将为新生对象分配内存。

别人家画内存模型, 戳这里 http://www.cnblogs.com/lfs2640666960/p/9297176.html

简单看了一下内存模型,简单看看每个区域究竟存储的是什么(干的是什么):

  • 堆:存放对象实例,几乎所有的对象实例都在这里分配内存
  • 虚拟机栈:虚拟机栈描述的是Java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(Stack Frame)用于存储局部变量表、操作栈、动态链接、方法出口等信息
  • 本地方法栈:本地方法栈则是为虚拟机使用到的Native方法服务。
  • 方法区:存储已被虚拟机加载的类元数据信息(元空间)
  • 程序计数器:当前线程所执行的字节码的行号指示器

我来宏观简述一下工作流程:

  • 1、通过java.exe运行Java3yTest.class,随后被加载到JVM中,方法区(元空间)存储着类的信息(包括类的名称、方法信息、字段信息..)。
  • 2、然后JVM找到Java3yTest的主函数入口(main),为main函数创建栈帧,开始执行main函数
  • 3、main函数的第一条命令是Java3y java3y = new Java3y();就是让JVM创建一个Java3y对象,但是这时候方法区中没有Java3y类的信息,所以JVM马上加载Java3y类,把Java3y类的类型信息放到方法区中(元空间)
  • 4、加载完Java3y类之后,java虚拟机做的第一件事情就是在堆区中为一个新的Java3y实例分配内存, 然后调用构造函数初始化Java3y实例,这个Java3y实例持有着指向方法区的Java3y类的类型信息(其中包含有方法表,java动态绑定的底层实现)的引用
  • 5、当使用java3y.setName("Java3y");的时候,JVM根据java3y引用找到Java3y对象,然后根据Java3y对象持有的引用定位到方法区中Java3y类的类型信息的方法表,获得setName()函数的字节码的地址
  • 6、为setName()函数创建栈帧,开始运行setName()函数。

3.GC

相关阅读

JVM G1详解

java程序性能 当我们调优java程序时,通常的目标有两个: 响应能力 或者 吞吐量 响应能力 响应能力指一个程序或者系统对请求的是

JVM参数:-XX:ReservedCodeCacheSize

通过笨神的分享整理笔记: 这个参数主要设置codecache的大小,比如我们jit编译的代码都是放在codecache里的,所以codecache如果满了的

如何处理jvm内存溢出

1       前言相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各

什么是JVM?

说明:做java开发的几乎都知道jvm这个名词,但是由于jvm对实际的简单开发的来说关联的还是不多,一般工作个一两年(当然不包括爱学习的及

弄懂JDK、JRE和JVM到底是什么

首先是JDKJDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。在JDK的安装目录下有一个jre目录,里面有两个文件夹bin

分享到:

栏目导航

推荐阅读

热门阅读