自学内容网 自学内容网

JVM探究

JVM探究

  • 请你谈谈你对JVM的理解?java -> class -> jvm
    java 8虚拟机和之前的变化更新
  • OOM 内存溢出。栈溢出 StackOverFlowError > 怎么分析
  • JVM的常用调优参数 ? 扩大内存
  • 内存快照如何抓取,怎么分析Dump文件?知道吗?
  • 谈谈JVM中,类加载器你的认识? rt-jar ext application
  1. JVM的位置
    在这里插入图片描述

  2. JVM的体系结构
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  3. 类加载器
    在这里插入图片描述
    在这里插入图片描述

  4. 双亲委派机制

  • 首先,通过委派的方式,可以避免类的重复加载,当父加载器已经加载过某一个类时,子加载器就不会再重新加载这个类
  • 另外,通过双亲委派的方式,还保证了安全性。因为Bootstrap ClassLoader在加载的时候,只会加载JAVA_HOME中的jar包里面的类,如java.lang.Integer,那么这个类是不会被随意替换的,除非有人跑到你的机器上, 破坏你的JDK。

双亲委派代码
实现双亲委派的代码都集中在java.lang.ClassLoader的loadClass()方法之中:

protected Class<?> loadClass(String name, boolean resolve)

            throws ClassNotFoundException

        {

            synchronized (getClassLoadingLock(name)) {

                // First, check if the class has already been loaded

                Class<?> c = findLoadedClass(name);

                if (c == null) {

                    long t0 = System.nanoTime();

                    try {

                        if (parent != null) {

                            c = parent.loadClass(name, false);

                        } else {

                            c = findBootstrapClassOrNull(name);

                        }

                    } catch (ClassNotFoundException e) {

                        // ClassNotFoundException thrown if class not found

                        // from the non-null parent class loader

                    }



                    if (c == null) {

                        // If still not found, then invoke findClass in order

                        // to find the class.

                        long t1 = System.nanoTime();

                        c = findClass(name);



                        // this is the defining class loader; record the stats

                        sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0);

                        sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1);

                        sun.misc.PerfCounter.getFindClasses().increment();

                    }

                }

                if (resolve) {

                    resolveClass(c);

                }

                return c;

            }

        }

在这里插入图片描述

  1. 沙箱安全机制

在这里插入图片描述
在这里插入图片描述

  1. Native
    在这里插入图片描述
    在这里插入图片描述

很重要
7. Pc寄存器
Program Counter Register
在这里插入图片描述

+1+1 线程不乱
8. 方法区 Method Area
此区域属于共享区间
在这里插入图片描述

  1. 栈 stack
    在这里插入图片描述

栈溢出

在这里插入图片描述

栈:8大基本类型+对象引用+实例方法

子帧是为了调用子程序,子程序执行完需要找到原来的父帧的房重新执行
在这里插入图片描述

在这里插入图片描述

  1. 三种JVM
  2. 新生区,老年区
  3. 永久区
  4. 堆内存调优
  5. GC 垃圾回收器
  6. JMM
  7. 总结

1.百度
2.思维导图 需要自己去画一下。


JVM 运行在 操作系统之上
JRE包含JVM


原文地址:https://blog.csdn.net/qq_33472553/article/details/136715353

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!