ITPub博客

首页 > 应用开发 > > Java虚拟机调优 JVM优化 工作非常实用的调优技巧

Java虚拟机调优 JVM优化 工作非常实用的调优技巧

作者:supergirlxu 时间:2019-10-24 09:58:02 0 删除 编辑

JVM大体结构

class 文件 加载-验证-准备-解析-初始化-使用-卸载 一个线程一个栈,一个方法一个栈帧

如何确定垃圾

引用计数

会有循环引用的问题

正向可达

从roots对象计数可以达到的对象

垃圾收集算法

标记清除(缺点:内存碎片化,没有连续的内存)

Copying (缺点:浪费内存 一般用在新生代[new])

标记压缩 (比copying慢一点 一般用在老年代[tenured])

new

存活对象少

使用copying,占用的内存空间也不大,效率也高

old

垃圾少

一般使用mark-compact

Serial Collector

XX:+UseSerialGC

单线程

Parallel Collector

并行量大,不过每次垃圾收集,JVM会停顿

CMS Collector

并发分区来完成,停顿时间短

G1

不仅停顿短,同事并发大。仅仅是个平衡点

有人说建议Java9用这个

JVM 参数

- 标准参数,所有jvm 都应该支持

-X 非标,每一个jvm实现都不同

-XX 不稳定参数,下一个版本可能会取消

java 对象的分配

不开逃逸分析不会先分配在栈上

栈上分配

线程私有小对象

无逃逸(-XX:+DoEscapeAnalysis开启逃逸分析 默认是开启的)

支持标量替换

无需调整

线程本地分配TLAB(Thread Locla Allacation Buffer)在堆上也是eden区,这样做的目的是有一部分数据可以不加锁

占用eden,默认1%

多线程的时候不用竞争eden就可以申请空间,提高效率

小对象

无需调整

老年代

大对象

eden

堆:

-XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=tmp/jvm.dump -XX:PrintGCDetails

-Xms10M -Xmx10M 直接调大最大,避免中途分析和垃圾回收的计算

栈 +Xss128k

大 线程递归调用可以很深

小 线程并发数量可以特别多

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/644/viewspace-3163558/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-04-12

  • 博文量
    220
  • 访问量
    1688