java虚拟机JVM
ma_ke_xin
这个作者很懒,什么都没留下…
展开
-
java虚拟机——线程安全
java虚拟机——线程安全java语言中各种操作共享的数据分为以下5类:不可变、绝对线程安全、相对线程安全、线程兼容、线程对立1、不可变:不可变的对象一定是线程安全的。不需要采取任何的线程安全保障措施。2、绝对线程安全:不管运行环境如何,调用者都不需要任何额外的同步措施3、相对线程安全:对该对象单独的操作是线程安全的,在调用时不需要额外的保障措施。对于伊特特定顺序的连续调用,在调用端使用额...原创 2020-01-01 21:43:45 · 96 阅读 · 0 评论 -
java虚拟机——java与线程
java与线程线程的实现1、使用内核线程实现内核线程(KLT),由内核来完成线程切换。程序一般是使用内核线程的一种高级接口——轻量级进程。每个轻量级进程都由一个内核线程支持。轻量级进程的优点:每个轻量级进程都是一个独立的单元,即使有一个轻量级进程在系统调用中阻塞了,也不会影响整个进程的工作。轻量级进程的缺点:基于内核实现的,所以各种线程操作都需要进行系统调用。系统调用的代价相对较高,需...原创 2019-12-26 12:32:26 · 94 阅读 · 0 评论 -
java虚拟机——java内存模型
java内存模型多任务处理在现代计算机操作系统中必须的原因:计算机的运行速度与他的存储和通信子系统速度的差距太大,大量的时间都花费在磁盘I/O、网络通信或数据库访问上。让计算机并发的执行若干个计算任务,但是大多数的计算任务都不可能只靠处理器“计算”就能完成,处理器至少要与内存交互,如读取运算出具、存储运算结果,这个I/O操作是很难消除的。通过加入一层**高速缓存(Cache)**来作为内存和...原创 2019-12-26 11:06:29 · 113 阅读 · 2 评论 -
java虚拟机——java与c/c++的编译器对比
java与c/c++的编译器对比大多数程序员都认为C/C++比java快,这种观点是由于java刚出现的时候即时编译技术还不成熟,主要靠解释器执行的java语言性能比较低下。现在的即时编译技术已经成熟,下面对java和C/C++的速度进行讨论。java与C/C++的编译器对比实际上代表了最经典的即时编译器与静态编译器的对比。java虚拟机的即时编译器与C/C++的静态优化编译器相比,由于以...原创 2019-12-10 10:17:34 · 534 阅读 · 0 评论 -
java虚拟机——晚期(运行期)优化
java虚拟机——晚期(运行期)优化1、解释器与编译器许多商用虚拟机都同时包含解释器与编译器。解释器与编译器两者各有优势。当程序需要迅速启动和执行的时候,解释器可以首先发挥作用,省去编译的时间,立即执行。在程序运行后,随着时间的推移,编译器逐渐发挥作用,把越来越多代码编译成本地代码之后,可以获得更高的执行效率。当程序运行环境中内存资源限制较大,可以使用解释执行节约内存,反之可以使用编译执...原创 2019-12-09 17:18:40 · 72 阅读 · 0 评论 -
java虚拟机——早期(编译器)优化
java虚拟机——早期(编译器)优化前期编译器:把.java文件转变成.class文件的过程。(常说的)虚拟机的后端运行期编译器:把字节码转变成机器码的过程。编译大致分为3个过程:1、解析与填充符号表过程2、插入式注解处理器的注解处理过程3、分析与字节码生成过程解析与填充符号表1、词法、语法分析词法分析将源代码的字符流转变为标记(Token)集合。语法分析是根据Token序列构...原创 2019-12-03 17:34:44 · 85 阅读 · 0 评论 -
java虚拟机——虚拟机字节码执行引擎
java虚拟机——虚拟机字节码执行引擎栈帧栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构。每一个方法从调用开始到执行完成的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。栈帧包含:局部变量表、操作数栈、动态连接、方法返回地址和一些额外的信息。在编译时期,多数操作数栈已经完全确定并写入方法表的Code属性。因此一个镇站需要分配多少内存不会受到程序运行期变量数据的影响。1、局部...原创 2019-12-02 20:19:58 · 100 阅读 · 0 评论 -
java虚拟机——虚拟机类加载机制
java虚拟机——虚拟机类加载机制类加载机制:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Jave类型。类从被加载到虚拟机内存中开始,到卸载出内存为止,整个生命周期:加载——连接(包括:验证、准备、解析)——初始化——使用——卸载其它类加载过程都是按部就班的开始,但是解析阶段不一定:在某些情况下可以在初始化阶段之后开始,...原创 2019-11-30 22:04:30 · 74 阅读 · 0 评论 -
java虚拟机——类文件结构
java虚拟机——类文件结构1、各种不同平台的虚拟机与所有平台都统一使用的程序存储格式——字节码2、实现语言无关性的基础是虚拟机和字节码存储格式。java虚拟机不和包括java在内的任何语言绑定,只与“class文件”这种特定的二进制文件所关联。Class文件中包含了java虚拟机指令集和符号表以及若干其它辅助信息。3、Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照...原创 2019-11-30 19:30:01 · 104 阅读 · 0 评论 -
java虚拟机——内存分配与回收策略
自动管理内存解决两个问题:给对象分配内存, 回收分配给对象的内存。1、对象优先在Eden分配大多数原创 2019-11-19 21:33:32 · 83 阅读 · 0 评论 -
java虚拟机——垃圾收集器
1、Serial收集器“单线程”, 仅使用一个CPU或一条线程去完成垃圾收集工作。在进行垃圾收集时,必须暂停其它所有的工作线程。Serial收集器由于没有线程交互的开销,专心做垃圾收集,获得最高的单线程收集效率。可与CMS收集器配合工作。(CMS收集器:并发收集器,实现垃圾回收线程和用户线程同时工作)2、ParNew收集器Serial收集器的多线程版本。除使用多条线程进行垃圾回收之外,其...原创 2019-11-19 21:16:14 · 61 阅读 · 0 评论 -
java虚拟机——HotSpot算法实现
枚举根节点可达性分析从GC Roots节点找引用连,如果逐个检查引用,必然会消耗很多时间。可达性分析对执行时间的敏感还体现在GC停顿上,因为进行可达性分析时不许在一个能确保一致性的快照中进行,即整个执行系统都像被冻结在某个时间点上。因此GC进行时必须停顿所有java线程。在HotSpot的实现中,时使用一组成为OopMap的数据结构达到该目的。在类加载完成后,HotSpot就把对象内什么偏移...原创 2019-11-01 10:20:01 · 163 阅读 · 0 评论 -
java虚拟机——垃圾收集算法
Java虚拟机——垃圾收集算法1、标记-清除算法“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。缺点:1、效率不高。标记和清除两个阶段的效率都不高。2、空间问题,标记清除后产生大量不连续的内存碎片。导致以后需要分配大对象时,无法找到足够的连续内存空间,而不得不引发一次垃圾收集 动作。2、复制算法为解决效率问题。将可用内存按容量分为大小相...原创 2019-11-01 09:54:34 · 64 阅读 · 0 评论 -
java虚拟机——判断对象是否已死
判断对象是否已死引用计数算法给对象添加一个引用计数器:有一个地方引用它时,计数器值加1;引用失效时,计数器值减1.优点:实现简单,判断效率高。缺点:很难解决对象之间相互循环引用的问题。(相互引用对方的话,引用计数器的值就都不为0,也就不能通过引用计数算法通知GC收集器回收它们)可达性分析算法 —— 主流算法通过一系列成为" GC Roots"的对象作为起始点,从这些节点向下搜索,搜索链...原创 2019-11-01 09:42:05 · 73 阅读 · 0 评论 -
java虚拟机——运行时数据区域
相比于C、C++, 使用java开发的一个优点是:在虚拟机自动内存管理机制的帮助下,不用为每一个new操作写配对的delet/free代码,因此不容易出现内存泄漏和内存溢出的问题。而使用C、C++则需要负责每一个对象生命开始到终结。将内存控制的权利交给java虚拟机,一旦出现内存泄漏和内存溢出方面的问题,就需要了解java虚拟机是怎样使用内存的。运行时数据区域java虚拟机在执行java程序...原创 2019-09-09 17:22:32 · 63 阅读 · 0 评论