网站建设标语文案,湛江专业的建站软件,wordpress国产微课主题,图片制作器下载JVM是跨平台跨语言的虚拟机#xff0c;不直接接触硬件#xff0c;位于操作系统的上一层
跟字节码文件直接关联#xff0c;和语言没有关系
一次编译成字节码文件#xff0c;多次执行 虚拟机可以分成三部分#xff1a;类加载器#xff0c;运行时数据区#xff0c;执行引…JVM是跨平台跨语言的虚拟机不直接接触硬件位于操作系统的上一层
跟字节码文件直接关联和语言没有关系
一次编译成字节码文件多次执行 虚拟机可以分成三部分类加载器运行时数据区执行引擎解释器JIT编译器
JIT编译器是把一些常用代码编译成 机器指令并缓存起来加快执行速度【解释器相当于步行响应快但是速度慢。JIT要先编译成机器指令相当于公交车要等一段时间但是速度块。只用解释器很慢只用JIT要等比较久】零地址指令是因为栈里面每次只会有一个元素在栈顶一次只处理一个
栈式架构指令集小但是完成一个操作用的指令数量多
反编译运行写的程序之后会输出编译后的文件夹cmdcd进到某class文件的文件夹javap -v class文件名 xxx.txt 【就可以把字节码文件的信息放到txt文件看】
一个Java程序对应一个java虚拟机应该是服务器部署多个服务应该有多个虚拟机所以不同程序的堆栈不共享
第一部分类加载器 加载获取类的全类名读取class文件在方法区创建对应的Class对象链接 验证验证字节码文件是否合法之类准备**把类变量加了static的变量创建处理赋零值** 【加了final的常量在编译时就已经分配内存在准备阶段显式初始化】【不会为实例变量分配初始化实例变量就是成员变量是在对象创建时分配到堆时默认赋零值】 解析把常量池内的符号引用换成直接引用【事实上解析操作往往在JVM初始化之后执行】 初始化执行类构造器方法的过程。就是如果有类变量或者静态方法块虚拟机会自动把他们整合在一起按顺序创建变量和赋值由字节码中的方法执行这个方法称为类构造器方法 子类如果有类变量或者静态方法块会先执行父类的方法然后执行子类的多线程下会给方法加锁是类构造器每个类的字节码文件都有 通过 某个类.class.getClassLoader() 可以得到它的类加载器获取的类加载器对象.getParent() 可以获得它包含的类加载器引导类加载器 用C/C写不能获取到加载Java的核心类库String类就是用它加载 扩展类加载器 用Java写加载ext文件夹下的类库 系统类加载器 用Java写默认的类加载器加载环境变量或系统属性 好处 避免用户创建自己的类替换Java的一些核心类比如String 【如果包名和核心api包名一样即使是新的类也不允许创建】【实践中如果新建一个String类这个类的包也是 java.long 里面有个main方法。但是启动不了会报错】因为它经过双亲委派机制到达引导类加载器但是引导类加载器加载的是api里面的String加载不了这个类所以就启动不了main方法 避免类的重复加载向上委托一旦父加载器加载了子加载器就不会重复加载不同的类加载器加载的类 就算包名一样且同名也是不同的类也是说要是从同一个class文件加载不同类加载器类也不同 常用调优工具
JDK命令行Eclipse: Memory Analyzer ToolJconsoleVisualVMJprofilerJava Flight RecorderGCViewerGC Easy