jvm虚拟机那些面试干货

1.Jdk、jre、jvm

Jdk:java开发的工具箱,java开发的核心,里面包含了jre、javac的工具类,原生API
分为三个版本:javaSE、javaEE、javaME
jre:java运行时的环境,底层依赖于虚拟机
jvm:java虚拟机,实现跨平台的核心

-XX:+HeapDumpOnOutOfMemoryError 内存溢出转存到文件,文件默认存在项目目录下
-Xms20m -Xmx20m 内存设置

2.java的发展历史

 

 

 

 

 

 3。JAVA虚拟机的发展

 

 

 4.JAVA虚拟机内存管理

线程共享区:方法区、java堆
线程独占区:虚拟机栈、本地方法栈、程序计数器

方法区:类信息、常量、静态变量(存储运行时常量池、及时编译器编译后的代码)
虚拟机栈:局部变量、动态方法、返回地址(存放方法运行时所需要的数据,成为栈帧)
本地方法栈:为JVM所调用到的Native脚本地方法服务
堆:内存区域、对象实例
程序计数器:记录当前程序所执行到的字节码的行号

堆:先进先出
栈:先进后出
1.堆溢出:不断地new对象
2.栈溢出:死循环、递归无终止
3.内存泄漏:分配的内存未被回收
4.内存溢出:内存不够

  5。JVM回收机制

1.GC发生在堆中
2.Gc是什么
分代收集算法
	频繁收集 Young区  Minor GC
	较少收集 Old区 FullGC
	不动 Perm区(永久区)
3.GC算法
	a.引用计数法 现已被淘汰,原因:较难解决循环引用
	b.复制算法 Minor GC使用 缺点:双倍空间 优点:效率高
	c.标记清楚算法:清楚无标记的  老年代一般是标记清楚和标记压缩混用
			缺点:两次扫描耗时,会产生内存碎片
			优点:不需要空间
	d.标记压缩算法:
			缺点:两次扫描耗时,移动对象
			优点,不会产生碎片
	e:标记清除压缩算法:先标记、再清楚、最后压缩
4.GC在什么时候,对什么东西做了什么事情
	新生代:老年代=1:2
	新生代有一个Eden 区和两个survivor 区构成,比例为:Eden: su:su=8:1:1
	1.首先会把对象放入Eden区,当 Eden 空间不足,会先放其中一个survivor区,如果仍然放不下,,引发一次
	minor GC, 将存活的对象放人另一个survivor 区清空 Eden 区和之前的survivor 区,survivor区,在某次GC 后发现仍然放不下将对象存入老年代内存
	2.大对象及长期存活的对象直接放人老年代
	3.进行minor GC 时发现老年代还是不够放,
	进行一次 full GC
	对什么东西
	从 GCROOt 中搜索不到,且经过一次标记清理仍然未复活的对篆
	做什么
	新生代:复制清理
	老年代:标记清理和标记/压缩
	永久代:存放类和类加载器
5. 类加载器工作机制
	1.装载:将java 二进制代码导入 JVM 中生成class 文件
	2.连接:a:校验 b:准备(分配存储空间)C:解析
	3.初始化:静态变量、静态方法、静态代码块

  

 

 

 

 

 

posted @ 2022-07-19 15:49  爱笑的小杰  阅读(37)  评论(0)    收藏  举报