线程和同步-JVM线程优化

优化线程栈大小

每个线程都有一个原生栈,操作系统会在这里存储线程的调用栈信息,如果空间不足可以通过调整线程使用的内存。

64位机器默认原生栈大小1MB

如果将线程栈设置的非常小会出现当调用栈非常大的时候会抛出StackOverflowError异常

OOM异常的三种情况

  • 32位JVM机器,进程内存达到4GB,最大大小
  • 系统实际已经耗尽虚拟内存
  • Unix风格的系统,用户创建的进程数超出了最大限度,在操作系统层面单个线程被认为是一个进程

JVM启动参数改变栈大小参数

-Xss=N

偏向锁

JVM默认开启偏向锁

可以通过-XX:-UseBiasedLocking禁用偏向锁

当锁被竞争,JVM(和OS)可以选择如何分配锁。

锁可以公平的授予,意味着每个线程会以轮训(round-robin)的方式获取锁

或者让锁偏向于最近访问锁的线程

偏向锁背后理论

如果一个线程最近使用了某个锁,那么下次该线程执行被同一个锁保护的代码,

处理器的缓存更有可能还包含该线程需要的数据。

如果让这个线程优先重新获取锁,那么缓存命中概率就会增加

如果发生上面假设的思想,那么机器的性能会好

但是偏向锁需要薄记信息,所以有时候机器性能反而更糟——查找信息过多的逻辑

线程优先级

每个线程都有一个由开发人员定义的优先级,这对操作系统是一种提示,说明特定线程的重要性。

操作系统会为机器上运行的每个线程计算一个当前优先级。

  • java层面开发人员定义的优先级
  • 线程上次运行到现在的时间长度
  • 其他因素

保证线程都有机会得到CPU运行而不会出现饥饿现象

因此都不能通过依赖线程的优先级决定线程运行的频率,如果确定任务的重要性,则需要程序逻辑处理优先级。

线程和同步-监控线程和锁

对于线程和同步效率最关注两点

  • 线程的总数(确保平衡)
  • 线程等待锁或其他资源的时间

查看线程

jconsole工具可视化查看

查看阻塞进程

jstack在一定程度上可以查看线程阻塞在哪些资源上

top -Hp 139382

jstack -l pid

Java性能-线程和同步-JVM线程优化和线程优先级相关推荐

  1. Android工程师进阶第五课 多线程锁,线程池和DVM/ART优化

    第09讲:Java 线程优化 偏向锁,轻量级锁.重量级锁 我目前所在的公司是一家跨国企业,总部在瑞典.前段时间公司新开发的一个应用准备发布到应用宝平台.但是在发布之前,需要准备一系列软著相关的证明材料 ...

  2. Java性能优化权威指南--笔记

    出处:http://xiongpq.cnblogs.com/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 原文 ...

  3. 线程的同步与互斥,死锁

    线程的同步与互斥 多个线程同时访问共享数据时可能会发生冲突,比如两个线程同时把一个全局变量加1,结果可能不是我们所期待的: 我们看这段代码的执行结果: #include <stdio.h> ...

  4. Java笔记-多线程中同步加锁相关

    Java程序入口就是由JVM启动的main线程: main线程又可以启动其他线程.当所有线程都运行结束时JVM退出,进程结束. 守护线程(Daemon):守护线程是为其他线程服务的线程,所有的非守护线 ...

  5. 线程的创建开销大吗?线程创建开销包括哪些?线程池

    1-1. 关于时间,创建线程使用是直接向系统申请资源的,这里调用系统函数进行分配资源的话耗时不好说. 关于资源,Java线程的线程栈所占用的内存是在Java堆外的,所以是不受java程序控制的,只受系 ...

  6. 阿里巴巴 Java性能诊断工具Arthas

    Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load.内存.gc.线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参.异常,监测方法执行耗时 ...

  7. 什么是线程池?(带你初步入门理解线程池)

    1.什么是线程池? 答:其实说白了,线程池是一种多线程处理方法,帮我们管理线程,避免创建大量的线程增加服务器压力. 其实在面向对象编程中,对象创建和销毁是很费时间的:那么大家就会说,使用线程技术不就好 ...

  8. c语言中的线程管理,深入解析C++编程中线程池的使用

    为什么需要线程池目前的大多数网络服务器,包括Web服务器.Email服务器以及数据库服务器等都具有一个共同点,就是单位时间内必须处理数目巨大的连接请求,但处理时间却相对较短. 传 统多线程方案中我们采 ...

  9. educoder 使用线程锁(lock)实现线程同步_性能:Lock的锁之优化

    Lock / synchronized Lock锁的基本操作是通过乐观锁实现的,由于Lock锁也会在阻塞时被挂起,依然属于悲观锁 synchronizedLock实现方式JVM层实现Java底层代码实 ...

最新文章

  1. ubuntu下python2完全卸载
  2. 找回Python IDLE Shell里的历史命令(用上下键翻历史命令怎么不好用了呢?)
  3. [Redux/Mobx] redux它的三个原则是什么?
  4. spring学习(23):基础组件
  5. Oracle conn 协议适配器错误解决
  6. 更新了一个新版本的editplus 语法文件(for nagios)
  7. 阿里是怎么做全链路压测的?
  8. HTML练习之吃豆豆小游戏
  9. hadoop key和value 分隔符号设置
  10. 苹果官方付费升级内存_vivo用户必看!官方推出扩容服务,最高升级到128G!
  11. cygwin装linux系统,给cygwin安装命令package
  12. web.xml.jsf_JSF 2.0 Ajax世界中的GMaps4JSF
  13. python-while-函数
  14. php file_get_contents 失效,phpfile_get_contents返回空无效解决办法_PHP教程
  15. 渗透测试 ( 4 ) --- Meterpreter 命令详解
  16. 【Java面试】什么是字节码?采用字节码的好处是什么?
  17. nba购票系统php,2019nba中国赛门票怎么买?(附票价+购票方式)
  18. 安徽科技学院 信网学院网络文化节 房辉
  19. 我与梅西粉丝们的世界杯观球日常
  20. Inno 简单使用心得记录

热门文章

  1. 5y平台计算机应用测试题,2016电大网考计算机应用基础统考试题模拟真题及答案 含小抄复习资料.docx...
  2. 低代码、端到端,一小时构建IoT示例场景,声网发布灵隼物联网云平台
  3. UE4 使用CustomMesh动态创建网格体
  4. 用el-select处理后台数据进行页面渲染,返回数据如果为空或者无法渲染文字时的处理
  5. Mac用户Excel里Wind插件相关问题
  6. 参加 TechEd 2004
  7. 职称申报评审管理系统_《四川省职称评审管理暂行办法》出台
  8. Python3爬取国家统计局官网2017年全国所有城市县镇数据
  9. linux 设置系统时间为当前网络时间
  10. 1000x计算机 案例解析,索尼WI-1000X耳机连接win10电脑方法讲解