java基石-JVM
2021/8/26 22:36:02
本文主要是介绍java基石-JVM,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
我对java这门语言的理解:
主要从以下几个方面阐述:1、java平台无关性(跨平台,一次编译,到处运行);2、GC;3、语言特性(反射,泛型,lamda表达式);4、面向对象(封装,继承,多态);5、类库(java本身自带的集合,并发库,网络库,IO,NIO等;6、异常处理)
如何实现平台无关的:
编译期javac命令可以把java源文件编译成.class的字节码文件,运行时:不同平台的JVM解析,而不需要重新编译,JVM执行字节码的时候把字节码转换成具体平台的机器指令。
JVM的构成:1、Class Loader,依据指定格式加载class文件到内存。2、Execution Engine 命令解释器 3、Runtime Data Area(Heap,Stack,Method Area,Native Method Stack)内存结构模型 4、Native Interface 融合不同开发语言原生库为java所用。
谈谈ClassLoader:
JVM的核心组件,主要工作在class的装载阶段,所有的class都是由classLoader加载的,负责将class的二进制数据流装载进系统,交给虚拟机进行连接,初始化等操作。主要由以下4类:
1、BootStrapClassLoader:C++编写,加载核心库java。
2、ExtClassLoader:java编写,加载扩展库javax.*。
3、AppClassLoader:java编写,加载程序所在目录。
4、自定义的ClassLoader :java编写,定制化(实现findClass来获得Class的字节数据,然后defineClass方法生成类的字节码返回)。
为什么类加载器为什么要使用双亲委派机制:避免多份同样字节码的加载。
classLoader和ForName的区别
类的加载方式:1、隐式加载 new 2、显式加载 classLoader、ForName。
类的装在过程:1、加载,通过classLoader加载class文件字节码,生成Class对象; 2、链接 (校验,准备,解析)3、初始化 执行类变量赋值和静态代码块。
Class.forName得到的class是已经初始化的。
ClassLoader.loaderClass得到的class还没有经过链接(ioc中使用这种方式延时加载,从而提升加载性能)。
这篇关于java基石-JVM的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-28微服务架构中API版本控制的实践
- 2024-09-28AI给的和自己写的Python代码,都无法改变输入框的内容,替换也不行
- 2024-09-27Sentinel配置限流资料:新手入门教程
- 2024-09-27Sentinel配置限流资料详解
- 2024-09-27Sentinel限流资料:新手入门教程
- 2024-09-26Sentinel限流资料入门详解
- 2024-09-26Springboot框架资料:初学者入门教程
- 2024-09-26Springboot框架资料详解:新手入门教程
- 2024-09-26Springboot企业级开发资料:新手入门指南
- 2024-09-26SpringBoot企业级开发资料新手指南