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:(常见的错误):
3:full GC 过后 并没有得到太多的流程,就会出现第三种oom
4:直接buffer内存溢出,
设置参数出现上边的异常:MaxDirectMemorySize:类似于给元空间分配的内存
七大垃圾收集器:
配置的参数:
1:JVM是怎么调优的?
1:cpu
2:内存
3:io