- 博客(14)
- 收藏
- 关注
原创 线程安全与锁优化、升级
并发处理的广泛应用是使得 Amdahl 定律代替摩尔定律成为计算机性能发展源动力的根本原因,也是人类 “压榨” 计算机运算能力的最有力武器。Amdahl 定律:通过系统中并行化与串行化的比重来描述多处理器系统能获得的运算加速能力摩尔定律:用于描述处理器晶体管数量与运行效率之间的发展关系 这两个定律的更替代表了近年来硬件发展从追求处理器频率到追求多核心并行处理的发展过程。一、概...
2020-02-12 17:05:26
187
原创 Java内存模型与线程
一、概述 计算机的运算速度与它的存储和通信子系统速度的差距太大,大量的时间都花费在磁盘I/O、网络通信或者数据库访问上。如果不希望处理器在大部分时间里都处于等待其他资源的状态,就必须使用一些手段去把处理器的运算能力“压榨”出来——多线程,多进程 衡量一个服务性能的高低好坏,每秒事务处理数(Transactions Per Second,TPS)是最重要的指标之一,它代表着一秒内服务端平均能...
2020-02-10 23:25:58
177
原创 晚期(运行期)优化
一、概述部分商用虚拟机中,Java程序最初通过解释器进行解释执行,当虚拟机发现 某个方法或代码块的运行特别频繁 时,就会把这些代码认定为"热点代码"。为了提高热点代码的执行效率,在运行时,虚拟机将会 把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为 即时编译器二、HotSpot虚拟机内的即时编译器2.1 解释器与编译器 事实上,现在许...
2020-02-07 15:13:24
516
原创 早期(编译期)优化
一、概述JVM的编译器分类:前端编译器:把.java转变为.class的过程。如Sun的Javac、Eclipse JDT中的增量式编译器(ECJ)。JIT编译器:把字节码转变为机器码的过程,如HotSpot VM的C1、C2编译器。AOT编译器:静态提前编译器,直接将*.java文件编译本地机器代码的过程。 虚拟机设计团队把对性能的优化集中到了后端的即时编译器中,这样...
2020-02-04 15:38:10
213
原创 类加载及执行子系统的案例与实战
在 Class 文件格式与执行引擎这部分中,用户的程序能直接影响的内容并不太多,Class 文件以何种格式存储,类型何时加载、如何连接,以及虚拟机如何执行字节码指令等都是由虚拟机直接控制的行为,用户程序无法对其进行改变。能通过程序进行操作的,主要是 字节码生成 与 类加载器 这两部分的功能。对于类加载器的实际改造的两个例子:传统的类加载器:tomcat的类加载器灵活的类加载器:OSGi...
2020-02-02 16:47:46
180
原创 虚拟机字节码执行引擎
一、概述 在不同的虚拟机实现里面,执行引擎在执行Java代码的时候可能会有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择,也可能两者兼备,甚至还可能会包含几个不同级别的编译器执行引擎。但从外观上看起来,所有的Java虚拟机的执行引擎都是一致的:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果。二、运行时的栈帧结构 栈帧(Stack F...
2020-01-31 17:03:00
165
原创 虚拟机类加载机制
代码编译的结果:本地机器码 转变为 字节码一、概述1.1 虚拟机的类加载机制 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。1.2 Java语言的动态加载和动态连接 java语言中类型的加载连接以及初始化过程都是在程序运行期间完成的,这种策略虽然会使类加载时稍微增加一些性能开销,但是会为java应用程...
2020-01-27 19:38:33
147
原创 Tomcat端口被占用
解决:找到端口被占用的程序,然后关闭即可查看端口被哪些程序占用netstat -ano|findstr “80”根据pid(进程id) 查询对应的应用程序tasklist|findstr “1828”根据名称 结束该程序taskkill /f /t /im java.exe或者通过pid终止:taskkill /f /pid 1828...
2020-01-25 18:41:20
115
原创 类文件结构
一、无关性的基石 各种不同平台的虚拟机与所有平台都统一使用的程序存储格式——字节码(ByteCode)是构成平台无关性的基石 实现语言无关性的基础仍然是虚拟机和字节码存储格式。java虚拟机不和包括java在内的任何语言绑定,它只和“Class文件”这种特定的二进制文件格式所关联,Class文件中包含了java虚拟机指令集和符号表以及若干其他辅助信息。二、代码清单-1 为了讲解方便...
2020-01-24 16:48:10
335
原创 Java基础-安装
一、资源下载和配置1.JDK下载JDK下载(根据自己电脑配置选择相应安装包)2. Oracle账户 以上安装包下载前需注册一个Oracle账户,在这里笔者嫌麻烦,毕竟就为了下个安装包而已,没必要再注册个账号,所以从以下网站随便选了个账号Oracle共享账户3. 环境变量配置右键我的电脑->属性->高级->环境变量->系统变量新建变量名 JAVA_HO...
2019-12-06 14:23:37
162
原创 虚拟机性能监控与故障处理工具
一、 概述 给一个系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。二、JDK命令行工具(JDK安装的bin目录下) 这些命令行工具大多数是 jdk/lib/tools.jar 类库的一层薄包装而已,它们主要的功能代码是在tools类库实现的 图1 Sun JDK 中的工具目录1. Sun JDK监控和故障处理...
2019-12-06 13:36:06
211
原创 软件体系结构风格
一、经典软件体系结构风格数据流风格:批处理序列;管道/过滤器调用/返回风格:主程序/子程序;面向对象风格;层次结构独立构件风格:进程通讯;事件系统虚拟机风格:解释器;基于规则的系统仓库风格:数据库系统;超文本系统;黑板系统管道与过滤器优点使得软构件具有良好的隐蔽性和高内聚、低耦合的特点允许设计者将整个系统的输入输出行为看成是多个过滤器的行为的简单合成支持软件重用系统...
2019-11-27 11:27:30
2404
原创 软件体系结构建模
软件体系结构的模型【根据建模的侧重点不同划分】 结构模型(常用) 框架模型 动态模型(常用) 过程模型 功能模型4+1视图模型定义 “4+1”视图模型从5个不同的视角包括逻辑视图、进程视图、物理视图、开发视图和场景视图来描述软件体系结构。每一个视图只关心系统的一个侧面,5个视图结合在一起才能反映系统的软件体系结构的全部内容逻辑视图 主要支持系统的功能需求,即系统提...
2019-11-26 20:05:01
1682
原创 垃圾回收机制与内存分配策略
一、 概述 说起垃圾收集(Garbage Collection,GC),大部分人都把这项技术当做Java语言的伴生产物。事实上,GC的历史比Java久远,早在1960年诞生于MIT的Lisp这门语言中就使用了内存动态分配和垃圾回收技术。当Lisp还在胚胎时期时,人们就在思考GC需要完成的3件事情哪些内存需要回收?什么时候回收?如何回收?二、 对象是否存活? 猿们都...
2019-11-26 13:51:17
277
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人