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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这篇文章是我之前翻阅了不少的书籍以及从网络上收集的一些资料的整理,因此不免有一些不准确的地方,同时不同JDK版本的...
    高广超阅读 15,710评论 3 83
  • 介绍JVM中7个区域,然后把每个区域可能造成内存的溢出的情况说明 程序计数器:看做当前线程所执行的字节码行号指示器...
    jemmm阅读 2,247评论 0 9
  • 作者:一字马胡 转载标志 【2017-11-12】 更新日志 日期更新内容备注 2017-11-12新建文章初版 ...
    beneke阅读 2,234评论 0 7
  • 工作之余,想总结一下JVM相关知识。 Java运行时数据区: Java虚拟机在执行Java程序的过程中会将其管理的...
    Huang远阅读 644评论 0 2
  • 所有知识点已整理成app app下载地址 J2EE 部分: 1.Switch能否用string做参数? 在 Jav...
    侯蛋蛋_阅读 2,507评论 1 4