一个公网ip可以做几个网站,推广普通话内容100字,html转wordpress教程,网络推广培训学费几万最近在看关于JVM的一些知识点#xff0c;之前也有了解过#xff0c;可是时间一长就总会忘#xff0c;索性按照自己的记忆方式去回顾一下知识点。 首先#xff0c;jvm是Java程序运行的环境#xff0c;全称为Java Virtual Machine 当我们写好的Java文件经过javac编译后就变成… 最近在看关于JVM的一些知识点之前也有了解过可是时间一长就总会忘索性按照自己的记忆方式去回顾一下知识点。 首先jvm是Java程序运行的环境全称为Java Virtual Machine 当我们写好的Java文件经过javac编译后就变成了class文件此时就该虚拟机发挥作用了。
1虚拟机运行时的内存组成环境
总共包括五部分其中三部分是线程私有的剩余两个是线程共享的 线程私有
程序计数器用于记录当前线程所执行的行号即当前线程的位置。虚拟机栈用于存放要执行的方法和局部变量。本地方法区主要是存放一下系统的本地方法。
线程共享
方法区/元空间用于存储加载的类信息常量和静态变量等堆存放对象和数组
2JVM有哪些部分组成运行流程是什么 从图中可以看出 JVM 的主要组成部分
ClassLoader类加载器Runtime Data Area运行时数据区内存分区Execution Engine执行引擎Native Method Library本地库接口
运行流程
1类加载器ClassLoader把Java代码转换为字节码
2运行时数据区Runtime Data Area把字节码加载到内存中而字节码文件只是JVM的一套指令集规范并不能直接交给底层系统去执行而是有执行引擎运行
3执行引擎Execution Engine将字节码翻译为底层系统指令再交由CPU执行去执行此时需要调用其他语言的本地库接口Native Method Library来实现整个程序的功能。
3 堆栈的区别是什么
1、栈内存一般会用来存储局部变量和方法调用但堆内存是用来存储Java对象和数组的的。堆会GC垃圾回收而栈不会。
2、栈内存是线程私有的而堆内存是线程共有的。
3,、两者异常错误不同但如果栈内存或者堆内存不足都会抛出异常。
栈空间不足java.lang.StackOverFlowError。
堆空间不足java.lang.OutOfMemoryError。
4类加载器
JVM只会运行二进制文件而类加载器ClassLoader的主要作用就是将字节码文件加载到JVM中从而让Java程序能够启动起来。现有的类加载器基本上都是java.lang.ClassLoader的子类该类的只要职责就是用于将指定的类找到或生成对应的字节码文件同时类加载器还会负责加载程序所需要的资源
类加载器种类
类加载器根据各自加载范围的不同划分为四种类加载器 启动类加载器(BootStrap ClassLoader) 该类并不继承ClassLoader类其是由C编写实现。用于加载JAVA_HOME/jre/lib目录下的类库。 扩展类加载器(ExtClassLoader) 该类是ClassLoader的子类主要加载JAVA_HOME/jre/lib/ext目录中的类库。 应用类加载器(AppClassLoader) 该类是ClassLoader的子类主要用于加载classPath下的类也就是加载开发者自己编写的Java类。 自定义类加载器 开发者自定义类继承ClassLoader实现自定义类加载规则。 由此可引出双亲委派模型
5 什么是双亲委派模型:
如果一个类加载器在接到加载类的请求时它首先不会自己尝试去加载这个类而是把这个请求任务委托给父类加载器去完成依次递归如果父类加载器可以完成类加载任务就返回成功只有父类加载器无法完成此加载任务时才由下一级去加载。 采用双亲委派有两个好处 1通过双亲委派机制可以避免某一个类被重复加载当父类已经加载后则无需重复加载保证唯一性。
2为了安全保证类库API不会被修改
下面介绍关于垃圾回收的知识