jvm
「已注销」
这个作者很懒,什么都没留下…
展开
-
13深入理解java虚拟机--第五部分高效并发----线程安全与锁优化
13.2 线程安全按照线程安全的“安全程度”由强至弱来排序,我们[插图]可以将Java语言中各种操作共享的数据分为以下5类:不可变、绝对线程安全、相对线程安全、线程兼容和线程对立。1.不可变在Java语言中(特指JDK 1.5以后,即Java内存模型被修正之后的Java语言),不可变(Immutable)的对象一定是线程安全的,无论是对象的方法实现还是方法的调用者,都不需要再采取任何的...原创 2020-02-09 21:46:53 · 337 阅读 · 0 评论 -
11.深入理解java虚拟机--第三部分程序编译与代码优化----晚期运行期优化
11.1 概述在部分的商用虚拟机(Sun HotSpot、IBM J9)中,Java程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”(Hot Spot Code)。为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编...原创 2020-02-04 17:09:18 · 403 阅读 · 0 评论 -
10.深入理解java虚拟机--第三部分程序编译与代码优化----早期编译优化
10.1 概述Java语言的“编译期”其实是一段“不确定”的操作过程,因为它可能是指一个前端编译器(其实叫“编译器的前端”更准确一些)把*.java文件转变成*.class文件的过程;也可能是指虚拟机的后端运行期编译器(JIT编译器,Just In Time Compiler)把字节码转变成机器码的过程;还可能是指使用静态提前编译器(AOT编译器,Ahead Of Time Compiler)...原创 2020-02-02 21:05:11 · 448 阅读 · 0 评论 -
9.深入理解java虚拟机--第三部分虚拟机执行子系统----类加载及执行子系统的案例与实战
9.2.1 Tomcat:正统的类加载器架构主流的Java Web服务器,如Tomcat、Jetty、WebLogic、WebSphere或其他笔者没有列举的服务器,都实现了自己定义的类加载器(一般都不止一个)。因为一个功能健全的Web服务器,要解决如下几个问题:[插图]部署在同一个服务器上的两个Web应用程序所使用的Java类库可以实现相互隔离。这是最基本的需求,两个不同的应用程序可能会...原创 2020-02-01 15:55:17 · 393 阅读 · 0 评论 -
7.深入理解java虚拟机--第三部分虚拟机执行子系统----虚拟机类加载机制
代码编译的结果是从本地机器码转为字节码的,是存储格式发展的一小步,却是编程语言发展的一大步.7.1 概述虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制与那些在编译时需要进行连接工作的语言不同,在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令...原创 2020-01-28 15:20:36 · 399 阅读 · 0 评论 -
6.深入理解java虚拟机--第三部分虚拟机执行子系统----类文件结构
6.1概述记得在第一节计算机程序课上我的老师就讲过:“计算机只认识0和1,所以我们写的程序需要经编译器翻译成由0和1构成的二进制格式才能由计算机执行”。10多年时间过去了,今天的计算机仍然只能识别0和1,但由于最近10年内虚拟机以及大量建立在虚拟机之上的程序语言如雨后春笋般出现并蓬勃发展,将我们编写的程序编译成二进制本地机器码(Native Code)已不再是唯一的选择,越来越多的程序语言选择...原创 2020-01-26 15:15:26 · 279 阅读 · 0 评论 -
4.深入理解java虚拟机--第二部分--- 虚拟机性能监控与故障处理工具
4.1概述给一个系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。这里说的数据包括:运行日志、异常堆栈、GC日志、线程快照(threaddump/javacore文件)、堆转储快照(heapdump/hprof文件)等。经常使用适当的虚拟机监控和分析的工具可以加快我们分析数据、定位解决问题的速度,但在学习工具前,也应当意识到工具永远都是知识技能的一层包装,没有...原创 2020-01-18 22:27:57 · 222 阅读 · 1 评论 -
5.深入理解java虚拟机--第二部分--- 调优案例分析与实战
5.1概述上文介绍了处理Java虚拟机内存问题的知识与工具,在处理实际项目的问题时,除了知识与工具外,经验同样是一个很重要的因素。因此本章将与读者分享几个比较有代表性的实际案例。考虑到虚拟机故障处理和调优主要面向各类服务端应用,而大部分Java程序员较少有机会直接接触生产环境的服务器,因此本章还准备了一个所有开发人员都能够进行“亲身实战”的练习,希望通过实践使读者获得故障处理和调优的经验。...原创 2020-01-24 09:00:17 · 318 阅读 · 0 评论 -
3.深入理解java虚拟机--第二部分--- 垃圾收集器与内存分配策略
3.1概述哪些内存需要回收?[插图]什么时候回收?[插图]如何回收?3.2对象已死了吗?在堆中存放在几乎所有的java对象的实例,垃圾回收器在回收前,第一件事就是确定哪些对象是活的哪些对象已经死了3.2.1引用计数算法常用的是引用及计数算法:即给对象添加一个计数器,每当有地方引用它,计数器就加1,当引用失效,计数器就减一,任何时候计数器为0 的对象就是不可再用的对象,就是垃圾回...原创 2020-01-09 09:27:40 · 323 阅读 · 0 评论 -
2.深入理解java虚拟机--第二部分---java内存区域与内存溢出异常
目录2.java内存区域与溢出异常2.2运行时数据区域2.3Hotspot虚拟机对象探秘2.4 实战:OutOfMemoryError异常2.java内存区域与溢出异常2.1java与c或c++不同,c或c++的程序开发人员管理着内存,控制对象的生命周期.而java对象的存亡则是由java虚拟机自动的管理着.所谓着墙外的人想进来,墙内的人想出去java一旦出现内存溢...原创 2020-01-08 10:08:38 · 159 阅读 · 0 评论 -
深入理解java虚拟机------全书总结
1.java是有java虚拟机来控制着对象的存亡,而C或C++对象的存亡是由程序员控制的2.运行时数据区域:程序计数器:它可以看作是当前线程执行的字节码的行号指示器.java虚拟机是多线程处理的,为了在切换线程时线程能够恢复到正确的位置,所以这个计数器是私有的,每条线程需要一个独立的计数器.它们之间互不影响虚拟机栈java虚拟机栈也是线程私有的,生命周期同线程.j...原创 2020-05-08 09:49:38 · 293 阅读 · 0 评论 -
12深入理解java虚拟机--第五部分高效并发----java内存模型与线程
12.1 概述除了充分利用计算机处理器的能力外,一个服务端同时对多个客户端提供服务则是另一个更具体的并发应用场景。衡量一个服务性能的高低好坏,每秒事务处理数(Transactions PerSecond,TPS)是最重要的指标之一,它代表着一秒内服务端平均能响应的请求总数,而TPS值与程序的并发能力又有非常密切的关系。对于计算量相同的任务,程序线程并发协调得越有条不紊,效率自然就会越高;反之,...原创 2020-02-09 09:26:58 · 253 阅读 · 0 评论 -
8.深入理解java虚拟机--第三部分虚拟机执行子系统----虚拟机字节码执行引擎
8.1 概述执行引擎是Java虚拟机最核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上的,而虚拟机的执行引擎则是由自己实现的,因此可以自行制定指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。在Java虚拟机规范中制定了虚拟机字节码执行引擎的概念模型,这个...原创 2020-01-28 15:42:46 · 321 阅读 · 0 评论