jvm
文章平均质量分 86
越学习越无知
本人是一名刚入编程世界的小白,喜欢在博客上分享自己学习的理解,博客中如果哪里没写对欢迎在留言区留言
展开
-
JVM中TLAB初认识
TLAB解读单线程分配内存单线程环境下JVM对于内存的分配是没有冲突的,目前有两种分配方式指针碰撞(bump-the-pointer)空闲列表首先,在class文件被加载进JVM时,就可以在分配内存前计算出内存分配的大小。如果采用指针碰撞的方式分配内存(下面我叫它撞针分配),由于可分配内存并不是连续的,会导致1.如果指针所在的那块内存剩下可分配内存满足要分配内存的大小,则可以在这块内存分配2.如果满足不了所有分配的内存大小,会导致指针频繁的找另一块内存去分配,造成Cpu执行效原创 2021-07-11 23:09:04 · 406 阅读 · 0 评论 -
JVM方法区构成
方法区保存着被加载过的每一个类的信息;这些信息由类加载器在加载类的时候,从类的源文件中加载出来;方法区是线程共享的;当有多个线程都用到一个类的时候,而这个类还未被加载,因为 <clinit> () 方法是带锁的,所以在多线程环境下进行类初始化的话可能会引起多个进程阻塞,并且这种阻塞很难被发现,让其他线程等待;方法区的大小不必是固定的,jvm可以根据应用的需要动态调整。jvm也可以允许用户和程序指定方法区的初始大小,最小和最大限制;方法区同样存在垃圾收集,因为通过用户定义的类加原创 2021-07-11 19:59:34 · 261 阅读 · 0 评论 -
JVM类加载过程
类加载过程加载-》连接-》初始化-》卸载其中连接又可分为 检查-》准备-》解析类的加载过程通过全类名获取定义此类的二进制字节流将字节流所代表的静态存储结构转换为方法区的运行时数据结构/加载类信息在内存中生成一个代表该类的 Class 对象,作为方法区这些类信息的访问入口一个非数组类的加载阶段(加载阶段获取类的二进制字节流的动作)是可控性最强的阶段,这一步我们可以去完成还可以自定义类加载器去控制字节流的获取方式(重写一个类加载器的 loadClass() 方法)。数组类型不原创 2021-07-11 19:43:07 · 65 阅读 · 0 评论 -
JIT分析
JIT(Just In Time)1.什么是Just In Time编译器?在主流商用JVM(HotSpot、J9)中,Java程序一开始是通过解释器(Interpreter)进行解释执行的。当JVM发现某个方法或代码块运行特别频繁时,就会把这些代码认定为“热点代码(Hot Spot Code)”,然后JVM会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为:即时编译器(Just In Time Compiler,JIT)JIT编译器是“动态编译器”的一种,相对的原创 2021-07-11 19:34:23 · 323 阅读 · 0 评论 -
class对象创建流程
class对象创建流程类加载阶段通过全类名获取定义此类的二进制字节流将字节流所代表的静态存储结构转换为方法区的运行时数据结构/加载类信息在内存中生成一个代表该类的 Class 对象,作为方法区这些类信息的访问入口先通过全类名找到.class文件-》将.class文件存储的静态信息结构转成JVM动态的存储结构-》通过存储在方法区中的类信息创建一个在堆中的class对象,外界可以通过访问class对象访问到类信息方法区中的类信息会保存一个对class对象的引用,可以用来判断是否原创 2021-07-11 17:37:40 · 345 阅读 · 0 评论 -
详解.class文件
详解.class文件话不多说,直接上图.class文件理解:在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题并且保留了解释型语言可移植的特点,而通过即时编译器(jit)又有编译型语言执行效率高的特点。所以 Java 程序运行时比较高效。Java通过字节码文件和虚拟机jvm之间的关系,做到了平台无关性,一次编译,各平台都可运行。原创 2021-07-10 23:31:05 · 15808 阅读 · 1 评论 -
为什么说Java是编译与解释共存的语言
为什么说Java是编译与解释共存的语言在解释这个问题之前首先要知道什么是编译型语言和解释型语言计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机语言,也就是机器码。而这种转换的方式有两种:1.编译2.解释由此高级语言也分为编译型语言和解释型语言。编译型语言:编译型语言注重编译,它是指将文件通过编译器一次性编译成特定平台(操作系统)可以运行的机器码。解释型语言:使用专门的解释器对源程序逐行解原创 2021-07-10 20:48:47 · 2582 阅读 · 0 评论 -
JVM详解
前言本文主要是关于jvm的一些个人理解,如果文中用词或者理解方面出现问题,欢迎指出。此文旨在分享jvm的整体知识,对于细节方面不会去深究,若有细节方面的问题,欢迎指出标题JVM类的加载过程类加载过程加载-》连接-》初始化其中连接又可分为 检查-》准备-》解析对象加载过程类加载检查-》分配内存-》初始化零值-》设置对象头-》执行init方法...原创 2021-07-10 13:28:09 · 373 阅读 · 0 评论