jvm虚拟机
文章平均质量分 86
jvm虚拟机知识点总结
你别来、我无恙
不以物喜,不以己悲
展开
-
jvm内存分配与回收策略干货
概述java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决两个问题:给对象分配内存以及回收分配给对象的内存。对象的内存分配,往大方向将,就是堆上分配(但也可能经过JIT编译后被拆散为标量类型并间接地栈上分配),对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配。少数情况也可能会直接分配在老年代中,分配的规则并不是百分之百固定,其细节取决于当前...原创 2020-04-29 15:09:44 · 185 阅读 · 0 评论 -
垃圾收集器知识点汇总
概述如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商、不同版本的虚拟机所提供的垃圾收集器可能会有很大差别,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的收集器。这里讨论的收集器基于jdk1.7update 14之后的HotSpot虚拟机,这个虚拟机包含的收集器如图3-5所示...原创 2020-04-29 10:49:17 · 227 阅读 · 0 评论 -
一起理解垃圾回收算法
概述java内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行这出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的(尽管在运行期会由JIT编译器进行一些优化,但现在基于概念模型的讨论中,大体上可以认为是编译期可知的),因此这几个区域的内存分配和回收都具备确定性,在这几个区域内就不需要...原创 2020-04-28 10:39:13 · 163 阅读 · 0 评论 -
类加载器知识点梳理
类加载器定义虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为”类加载器“。类加载器可以说是java语言的一项创新,也是java语言流行的重要原因之一。1、类与类加载器**类加载器虽然只用于实现类的加载动作,但它在java程序中起到的作用却远远不限于...原创 2020-04-26 19:49:36 · 170 阅读 · 0 评论 -
虚拟机类加载机制干货知识点
概述虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。与那些在编译时需要进行连接工作的语言不同,在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为java应用程序提供高度的灵活性,在java里天生可以动态扩展的语言...原创 2020-04-26 19:45:13 · 125 阅读 · 0 评论 -
jvm字节码执行引擎,都帮你整理好了
概述执行引擎是java虚拟机最核心的组成部分之一。“虚拟机”是相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上的,而虚拟机的执行引擎是由自己实现的,因此可以自行制定指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。在java虚拟机规范中制定了虚拟机字节码执行引擎的概念模型,这个概念模型成为各种虚...原创 2020-04-24 11:45:27 · 155 阅读 · 0 评论 -
带你读懂Class类文件
Class文件Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件之中,中间没有添加任何分隔符,这使得整个Class文件中存储的内容几乎全部是程序运行的必要数据,没有空隙存在。当遇到需要占用8为字节以上空间的数据项时,则会按照高位在前的方式分割成若干个8位字节进行存储。根据Java虚拟机规范的规定,Class文件格式采用一种类似于C语言结构体的...原创 2020-04-22 09:11:45 · 608 阅读 · 1 评论 -
程序编译与代码优化—运行期优化
即时编译器在部分的商用虚拟机(Sun HotSpot、IBM J9)中,java程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”(hot spot code)。为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(...原创 2020-04-20 08:58:17 · 498 阅读 · 1 评论 -
程序编译与代码优化—编译期优化
3类编译过程中比较有代表性的编译器前端编译器:Sun的Javac、Eclipse JDT中的增量式编译器(ECJ)JIT编译器:HotSpot VM的C1、C2编译器AOT编译器:GUN Compiler for the java (GCJ)、Excelsior JETJavac编译器从Sun Javac的代码来看,编译过程大致可以分为3个过程:解析与填充符号表过程插入式注解处...原创 2020-04-14 19:21:54 · 330 阅读 · 0 评论 -
线程安全与锁优化,全是干货!
线程安全当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行其他任何的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的。java语言中的线程安全为了更加深入的理解线程安全,在这里我们可以不把线程安全当做一个非真即假的二元排他选项来看待,按照线程安全的“安全程度”由弱至强来排序,我们可以将java语言中...原创 2020-04-13 19:31:57 · 208 阅读 · 0 评论 -
一文带你看懂jvm虚拟机内存管理
运行时数据区程序计数器(线程私有)一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。如果线程正在执行的是一个java方法,记录的是正在执行的虚拟机字节码指令的地址;如果执行的是native方法,这个计数器值则为空。注意:此内存区域是唯一 一个在java虚拟机规范中没有规定任何OutOfMemoryError情况的区域java虚拟机栈(线程私有)虚拟机栈描述的是ja...原创 2020-04-09 16:10:49 · 149 阅读 · 0 评论 -
深入理解java虚拟机知识点—java内存模型
为什么要并发?一个很重要的原因是计算机的运算速度与它的存储和通信子系统的差距太大,大量的时间都花费在磁盘I/O、网络通信或者数据库访问上。而让计算机同时处理几项任务则是最容易想到、也被证明是非常有效的“压榨”处理器运算能力的手段。除了充分利用计算机处理器的能力外,一个服务端同时对多个客户端提供服务则是另一个更具体的并发应用场景。衡量一个服务性能的高低好坏,**每秒事务处理数(Transact...原创 2020-04-10 11:13:58 · 115 阅读 · 0 评论