JAVA性能优化
提高JAVA性能方面的基础知识
Bonjour~Bridge
踏踏实实做基础的技术学习
展开
-
JVM基础:JVM调优的一下小技巧记录
JIT编译参数 JIT编译器可以将运行时候的字节码编译成本地代码,从而提高运行效率,但是只有当一段代码被调用的次数超过JIT的编译阈值时,才会被编译成本地代码,下面就是设置这个阈值的参数: -XX:CompileThreshold=2000 -XX:+PrintCompilation -XX:+CITime 代码表示,被调用2000千次,才会被编译为本地代码 但是,如果阈值设的太低,一些不常用的代码也会被编译,反而会浪费时间 堆快照 ...原创 2020-05-16 11:14:06 · 205 阅读 · 0 评论 -
JVM基础:常用的调优技巧
以下是一些垃圾回收方案的技巧,对不不同情况,用户应该自己分析,下面的只是提供一种参考: 1. 尽量将对象留在新生代 Full GC的成本要远远高于Minor GC,所以尽量将对象留在新生代 方法 增加新生代的内存大小 合理的数组survivor区,并且提高survivor区的使用率,可以设置90%及以上 设置方式可以看这篇博客 增大新生代进入老年代的年龄的阈值 2. 直接将大对象分配给老年代 原因 大对象出现在新生代,很可能导致新生代内存不足,意思JVM不得不将新生代中年轻的对象移动到老年代。这对GC来原创 2020-05-15 17:28:57 · 139 阅读 · 0 评论 -
JVM基础:常用的垃圾收集器
这里介绍一下各个垃圾收集器的作用,在理解各个垃圾收集器之前,你应该熟悉垃圾收集器的算法和分类 新生代串行收集器 特点 仅仅使用单线程进行垃圾回收 独占式的垃圾回收 使用的复制算法 优点 是一个成熟、经过长时间生成环境考验的极为高新的收集器 使用复制算法,实现相对简单,逻辑处理特别高效,且没有线程切换的开销 缺点 运行时,JAVA应用程序中的线程都需要暂停进行等待。出现“Stop the World”现象 用户体验非常糟糕,在实时性要求较高的应用场景,这种现象往往是不能接受的 老年代串行收集器 特原创 2020-05-15 15:36:29 · 127 阅读 · 0 评论 -
JVM基础 : 垃圾回收机制的类型和性能指标
类型分类方式: 按照线程数分类:可以分为串行垃圾回收器和并行垃圾回收器 按照工作模式分类:可以分为并发式垃圾回收器和独占式垃圾回收器 按照碎片处理方式分类:可以分为压缩式垃圾回收器和非压缩式垃圾回收器 按照内存区间分类:可以分为新生代垃圾回收器和老年代垃圾回收器 GC策略的指标 可以用以下指标评价一个垃圾回收处理器的好坏: 吞吐量:应用程度花费的时间和系统总运行的时间的比值。比如:系统运行了100分钟,GC耗时1分钟,那么吞吐量就是99/100 = 99% 垃圾回收器负载:和吞吐量正好相反,上面的例子原创 2020-05-15 11:08:24 · 338 阅读 · 0 评论 -
JVM基础 : 垃圾回收机制常用算法思想
曾让C++程序“羡慕”的JAVA垃圾回收机制是怎么设计的呢?我们先看下面几种垃圾回收机制的做法吧! 引用计数法 对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1,当引用失效时,引用计数器就减1.只要对象A的应用计数器的值为0,则对象A就不可能再被使用 缺点 如果对象A引用了对象B,对象B引用了对象A,而对象A、B都没有被其他对象引用,则A、B应该被回收,这个称谓循环引用,但是引用计数器却不能解决这个问题,从而会导致内存泄漏 标记-清除算法 标记-清除算法分为2个阶段,标记阶段和清除阶段。首原创 2020-05-15 10:07:34 · 129 阅读 · 0 评论 -
记录篇:JVM运行参数设置
设置步骤 很简单,直接看图吧 设置参数记录 这里主要记录设置的参数 -XX:PermSize=2M :永久保存去2M -XX:MaxPermSize=4M -XX:+PrintGCDetails PermGen space的全称是Permanent Generation space,是指内存的永久保存区域 ...原创 2020-05-14 23:56:01 · 201 阅读 · 1 评论 -
JVM基础:JVM内存模型简单介绍
PC寄存器 一块很小的内存空间,用于记录下一条CPU要运行的指令,各个线程之间是独立拥有自己的PC寄存器 当执行Java代码时:存放的Java字节码地址 当执行native方法时:则程序计数器为空 虚拟机栈 也是线程私有的内存空间,和线程一起创建,它保存方法的局部变量、部分结果,并参与方法的调用和返回。 栈的大小可以设置为动态扩展或者固定大小 可以使用 -Xss参数来设置栈的固定大小 如果超过固定大小,程序则会抛出StackOverflowError异常 如果设定为动态扩展,超过内存范围后,抛出Ou.原创 2020-05-14 16:59:09 · 239 阅读 · 0 评论 -
基础篇:JAVA的内存模型
介绍 了解JAVA多线程的数据安全之前,我们需要先了解JAVA的内存模型,每个线程有一块自己的工作内存区,另外一块主内存,他们的作用如下: 主内存:存放各个线程共享的数据 工作内存:存放着从主内存拷贝的变量 为了正确的存取变量,它们的步骤如下: 第一步:线程先清空自己的工作内存; 第二步:锁定主内存,并读取数据; 第三步:执行代码并且可能修改工作内存中的数据; 第四步:将工作内存中的数据写入并解锁主内存 数据操作 线程的操作(6个) 通过上面的步骤,我们可以了解到线程可以有以下6种操作,这些操作都是原子原创 2020-05-11 17:21:37 · 103 阅读 · 0 评论 -
基础篇:java的四种引用类型
java提供了4个级别的应用:强引用、软引用、弱引用、虚引用 FinalReference强引用 平时我们看见的大部分引用都是强引用 强引用可以直接访问目标对象 强引用所指向的对象在任何时候都不会被系统回收 强引用可能导致内存泄漏 StringBuffer str = new StringBuffer("abc"); SoftReference软引用 弱引用会根据当前堆的使用情况来判断何时回收 只有当堆的使用率接近阈值时,才会回收 软引用可以用于实现对内存敏感的Cache 代码 MyObject原创 2020-05-09 00:01:49 · 120 阅读 · 1 评论 -
JAVA性能调优之缓冲、缓存、对象池化
缓冲Buffer 缓冲类似生活中的漏斗的作用,经常用在文件写入时提高I/O的速度,由于CPU处理特别快,而I/O却相对较慢,所以可以先将内容写入内存中,当数据达到一定量时,一起写入文件中,比如设计模式中装饰模式提到的BufferedWriter 不采用缓存的方式 new DataoutputStream(new FileOutputStream("d:\\test.txt")) new FileW...原创 2020-05-07 00:40:34 · 234 阅读 · 0 评论 -
JAVA性能调优 - 概述
性能低的几个直观表现(4个) 执行速度慢 内存消耗过多,甚至溢出 启动时间太长 负载承受差,当系统压力上升的时候,系统的执行速度、响应时间急速下降 评价性能高低的指标(6个) 代码执行时间、CPU占用时间、内存分配、磁盘吞吐量、网络吞吐量、响应时间 解决性能的2个思想 木桶原理:我们首先要解决的是系统性能最差的,就比如木桶一样,最低的一块木板,才是决定木桶装多少水 Amdahl定律:充分...原创 2020-05-06 09:53:04 · 146 阅读 · 0 评论 -
基础篇:JAVA的8大基础类型
写Java几年了,其实一直对java的基础类型有点模糊,所以在这里总结一下 字节 byte: 字节,长度是1个字节,相当于8个比特(bit),一个能存256个数字,范围是 -128 ~127(相当于2的8次方,可以参考最后2的次方表理解) 整数 short : 占用2个字节,相当于16个比特(bit),范围是 -32768 ~ 32767 int:占用4个字节,范围是大约:负21亿 ~ 正...原创 2020-05-05 16:02:38 · 163 阅读 · 0 评论