面试题:你说一下JVM? - Go语言中文社区

面试题:你说一下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

 

 

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_41987553/article/details/83096823
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-06-28 03:35:57
  • 阅读 ( 1153 )
  • 分类:面试题

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢