JVM快速入门

1、 JVM探究

  • 面试问题 :
  • 谈谈对JVM的理解? java8虚拟机和之前的变化更新?
  • 什么是OOM,什么是栈溢出*Error?怎么分析?
  • JVM的常用调优参数有哪些?
  • 内存快照如何抓取,怎么分析Dump文件?知道吗?
  • 谈谈JVM中,类加载器你的认识?

2、JVM的位置 

3、JVM的体系结构

3.1. jvm结构图

3.2. jvm垃圾回收

垃圾回收,指的的堆内存的垃圾回收

 3.3. jvm调优

4、类加载器

4.1. 类加载的过程

4.2. 哪些类加载器 

  • 引导类加载器(BootstrapClassloader):用C++编写,是JVM自带的类加载器;负责加载Java的核心类库。(该加载器无法直接获取)
  • 扩展类加载器(ExtClassloader):负责加载/jre/lib/ext目录下的jar包。
  • 应用程序类加载器(AppClassloader):负责加载java -classpath或-D java.class.path所指的目录下的类与jar包。(最常用的加载器)

4.3. 双亲委派机制 

  • 类加载器接收到一个加载请求时,他会委派给他的父加载器,实际上是去他父加载器的缓存中去查找是否有该类,如果有就加载返回,如果没有则继续委派给父类加载,直到顶层类加载器。
  • 如果顶层类加载器也没有加载该类,则会依次向下查找子加载器的加载路径,如果有就加载返回,如果都没有,则会抛出异常。

4.4. 沙箱安全机制 

5.native、方法区

5.1. native

凡是使用了native关键字的,说明Java的作用范围已经达不到了,它会去调用底层的C语言的库。

  • 进入本地方法栈。
  • 调用本地方法接口。JNI

JNI的作用:扩展Java的使用,融合不同的语言为Java所用。(最初是为了融合C、C++语言)

因为Java诞生的时候,C和C++非常火,想要立足,就有必要调用C、C++的程序。

所以Java在JVM内存区域专门开辟了一块标记区域Native Method Area Stack,用来登记native方法。
在最终执行(执行引擎执行)的时候,通过JNI来加载本地方法库中的方法。

  1. 编写一个多线程启动方法。

    1. public class Test {
           public static void main(String[] args) {
               new Thread(()->{
               },"MyThread").start();
           }
       }
  2. 点进去查看start方法。

    1. // Thread类中的start方法,底层是把线程加入到线程组,然后去调用本地方法start0
       public class Threa
上一篇:MATLAB工具箱使用案例详解


下一篇:Linux命令笔记