美文网首页
JVM 和 GC 和 多线程GuC的全部面试题

JVM 和 GC 和 多线程GuC的全部面试题

作者: 李彬燊666 | 来源:发表于2019-07-30 20:47 被阅读0次

https://www.cnblogs.com/1024Community/p/honery.html#%E4%B8%89%E5%B8%B8%E7%94%A8%E7%9A%84%E5%9E%83%E5%9C%BE%E6%94%B6%E9%9B%86%E7%AE%97%E6%B3%95

以上的地址是比较重要的东西

堆:存放的是new 出来的对象

栈::基本类型的变量以及对象的引用

方法区:静态变量,常量,以及class 中的东西

JVM全部的相关没面试题:

01:java8和java 7的虚拟机有什么变化?

-------------》永久区被元空间代替。

02:GC的作用域。

         堆(99%)和方法区

0:请谈谈你对JVM的理解

https://blog.csdn.net/g19920917/article/details/40015611

JVM是java的核心和基础,可以执行java的字节码程序。Java源文件经编译成字节码程序,通过JVM将每一条指令翻译成不同平台机器码,通过特定平台运行。JVM执行程序的过程 :    

 I.加载.class文件

 II.管理并分配内存 

III.执行垃圾收集 JRE(java运行时环境)由JVM构造的java程序的运行环境    

1:java的类装载器ClassLoader

 1-启动类加载器(Bootstrap Loader ),负责加载%JAVA_HOME%\bin目录下的所有jar包,或者是-Xbootclasspath参数指定的路径;

2-扩展类加载器(ExtClassLoader ):负责加载%JAVA_HOME%\bin\ext目录下的所有jar包,或者是java.ext.dirs参数指定的路径;

3-应用程序类加载器(AppClassLoader ):负责加载用户类路径上所指定的类库,如果应用程序中没有自定义加载器,那么次加载器就为默认加载器。

4:自定义类加载器:

2:双亲委派(http://www.cnblogs.com/parent-absent-son/p/9872443.html)推荐的博客

双亲委派机制得工作过程:

          1:类加载器收到类加载的请求;

          2:把这个请求委托给父加载器去完成,一直向上委托,直到启动类加载器;

          3:启动器加载器检查能不能加载(使用findClass()方法),能就加载(结束);否则,抛出异常,通知子加载器进行加载。

例子:

大家所熟知的Object类,直接告诉大家,Object默认情况下是启动类加载器进行加载的。假设我也自定义一个Object,并且制定加载器为自定义加载器。现在你会发现自定义的Object可以正常编译,但是永远无法被加载运行。这是因为申请自定义Object加载时,总是启动类加载器,而不是自定义加载器,也不会是其他的加载器。

3:沙箱安全及机制

我们平时说Java是安全的,可以使用户免受而已程序的侵犯,这是因为Java提供了一个“沙箱”机制,这个“沙箱”基本组件包括如下4部分:

3.1):类加载体系结构·

3.2):·class文件检验器·

3.3):内置于Java虚拟机(及语言)的安全特性

3.4):安全管理器及Java API 

加载器之间的层次关系:

堆内存逻辑上分为三部分:新生+养老+永久区【元空间不在堆】

JVM体系结构概述:

======================================================

GC:

1:作用区域堆和方法区。【主要是堆

2:GC是什么?垃圾回收!

3:常见的GC回收的四大算法:(GC的三种收集方法:标记清除、标记整理、复制算法的原理与特点,分别用在什么地方)

              3.1:引用计数法JVM一般不使用这种

JVM实现一般不采用这种

缺点:     每次对对象赋值时均要维护引用计数器,且计数器本身也要有一定的消耗

              3.2:复制算法在新生代使用

                        优点:没有内存碎片,

                        缺点:但是总有空的内存

              3.3:标记清除标记之后的是要清除的

                标记和清除两个阶段

优点:节约空间

缺点:产生内存碎片
              3.4:标记整理标记,清除,管理

优点:没有内存碎片,并且节约空间

缺点:耗时
4:Minor GC(就是  Yong GC)与Full GC分别在什么时候发生:

5:JVM垃圾回收的时候如何确定垃圾,是否知道什么是GC root?

                简单说就是内存中已经不再被使用到的空间,

要进行垃圾回收,如何判断一个对象是否可被回收?

        1:引用计数法(了解即可)

        2:可达性分析

6:堆里面的分区:Eden,survival from to,老年代,各自的特点。

        java 8之后:将永久区变为了元空间,

7:JVM内存模型以及分区,需要详细到每个区放什么

8JVM内存结构在java1.7与java1.8有什么区别?
元空间替代了永久区

9:YungGC就是MinorGC(过程复制->清空->互换)

看下面的图文

10:  4种主要的回收方式【4中主要的垃圾回收器】

    串行垃圾回收器(Serial):单线程环境下使用,【现在不是用】

    并行垃圾收集器(Parallel)【 多个垃圾收集线程 并行工作】java8 默认这种

     并发垃圾回收器(CMS):  

      G1垃圾回收集器 : 将堆内存分割成不同的区域然后并发的对其进行垃圾回收 

7大垃圾收集器:

1:引用计数法 

2:复制算法(既下面的流程)

YungGC新生区的GC流程:[复制--》清空  ---》互换  a]

3:标记清除算法:

5:JV7垃圾,是否知道什么是GC root?

可以作为GC root的对象:(不要经常new 这些对象)

OOM:(常见的错误)

OOM:(常见的错误):

3:full GC 过后 并没有得到太多的流程,就会出现第三种oom

4:直接buffer内存溢出,

设置

设置参数出现上边的异常:MaxDirectMemorySize:类似于给元空间分配的内存

七大垃圾收集器:

配置的参数:

1:JVM是怎么调优的?

1:cpu

2:内存

3:io

相关文章

网友评论

      本文标题:JVM 和 GC 和 多线程GuC的全部面试题

      本文链接:https://www.haomeiwen.com/subject/fbsheqtx.html