1、什么是jvm?
Jvm是一种计算机设备的规范,包括堆、方法区、本地方法栈、虚拟机栈、程序计数器
2、Jre和jdk和jvm的区别?
Jre是运行环境,jdk是开发工具,jvm是一个可以让java语言跨平台的虚构的操作系统
3、Jvm原理
1、 JVMshijava的核心和基础,在编译器和os平台之间的虚拟处理器。他是一种利用软件方法实现的抽象的计算机基于下层的操作系统和硬件平台,可以在上面执行字节码程序。
2、Java编译器只要面向jvm,生成jvm可以理解的代码或者字节码文件,java源文件经过编译成字节码程序,通过jvm将每一条指令翻译成不同平台集器码,通过特定平台运行。
3、.java文件(源代码)—.class文件(字节码)类加载器
4、JVM的体系结构
1、类转载器(classloader)用来装载class文件
2、执行引擎(执行字节码,或者执行本地方法)
3、运行时数据区(方法区,堆,本地方法栈,虚拟机栈,程序计数器)
5、对象以死得判定算法
1、有域程序计数器,java虚拟机栈,本地方法栈,都是线程独享,其中用的内存也是随线程生而生、随线程j结束而回收,而java堆和方法区则不同,线程共享,是GC所关注的部分。
2、在堆中几乎存在着所有对象,Gc之前需要考虑哪些对象还活着不能回收,哪些对象以及死去可以回收
3、有两种算法可以判断对象是否存活
A:引用计数算法
B:可达性分析算法:在java中有一种判断对象已死的方法“可达性分析”,所有的对象都会在GC roots树下的子节点,从GC roots向下搜索,搜索的路径称为引用链。如果引用链搜索不到,就说明这个对象可以被回收了
6、内存溢出和内存泄漏
1.内存泄漏
内存泄漏指的是一个不再被程序使用的对象或则变量依旧在内存中占有空间。
2.内存溢出
指程序运行过程中无法申请到足够的内存而导致的一种错误。