调整线程栈空间

当很缺少内存时,能够调整线程使用的内存。

每一个线程都有一个栈,用来记录该线程的调用栈信息。线程中的栈的默认空间是有OS和JVM的版本号决定的:

OS 32-bit 64-bit
Linux 320 KB 1 MB
Mac OS N/A 1 MB
Solaris Sparc 512 KB 1 MB
Solaris X86 320 KB 1 MB
Windows 320 KB 1 MB

当栈空间被设置的过小时,可能会由于有较长的调用栈而抛出StackOverflowError。

在64位的JVM中,一般不须要改动这个值。除非内存确实很吃紧。而在32位的JVM中。能够将这个值从320KB设置成128KB,为了给堆内存腾出很多其它的空间。

更改线程栈空间的指令:-Xss=N 比方:-Xss=256k

偏见锁(Biased
Locking)

当锁被多个线程所争夺时。JVM和OS能够选择将锁分配给哪个线程。能够使用一种公平的策略将锁分配给其它线程,或者也能够使用一种不公平(偏见)的策略。比方将锁再分配给上一次拥有该锁的线程。

将锁再次分配给上一次拥有该锁的线程,这样做的合理性在于:因为时间上的连续性,处理器中可能还缓存着和该线程所运行任务相关的数据。因此当线程再次运行时。准备上下文的时间就行节省下来。

当然,使用偏见锁本身须要记录一些相关数据,因此在某些时候反而会对性能有影响。

典型的比方,在非常多时候,假设将偏见锁应用在线程池中。那么性能反而会变差。假设一个应用并不须要使用偏见锁来作为锁分配的策略,那么能够通过:-XX:-UseBiasedLocking 来禁用它,由于默认是会启用偏见锁的,禁用它会提升些许性能。

锁的自旋(Lock
Spinning)

对于没有得到锁的线程。JVM有两种处理方式:

  • 让线程进入一个忙循环(Busy Loop)。待它运行了一些指令后会再次检查须要的锁是否可用。

  • 让线程进入一个队列,当须要的锁可用时通知它。此时CPU能够被其他线程使用。

假设处于竞争中的锁仅仅须要被持有一小段时间,那么使用第一种忙循环(也被称为线程自旋(Thread Spinning))的速度会比另外一种让线程进入队列的方式快的多。反之,当竞争中的锁会被线程持有较长的时间时,使用另外一种方式更优。这可以让CPU的有效利用率更高。

JVM会合理地选择使用哪种处理方式。首先会让线程自旋一段时间,假设还没有得到须要的锁,就会将该线程放入队列中等待,从而让出CPU资源给其他线程。

线程优先级

在Java API中。每一个线程都可以被设置一个优先级,OS会參考这个值。可是注意OS不过“參考”,并不一定会遵循它。OS会对每一个执行中的线程计算一个“当前”优先级。这个计算过程会考虑到设置的优先级,可是它不过众多因素中的一个。当中最重要的因素往往是这个线程已经执行了多长时间。

考虑这个因素是为了让每一个线程都可以得到执行的机会。

所以,不管线程被设置的优先级有多低,它们也总可以得到执行的机会。

另外,设置的线程优先级在不同的OS上的权重是不同的。

在基于Unix的系统上,线程的运行时间是主导线程当前优先级的因素,也就是说设置的线程优先级差点儿不会被“參考”。而在Windows系统上。设置的线程优先级的权重会略微高一些。

所以。不管是在哪个OS上,应用的性能都不能依赖于对线程设置优先级。假设某些任务的优先级确实高于另外一些任务,那么这一点须要被应用程序的逻辑来完毕,而不是通过设置线程的优先级来完毕。

一个办法将任务分配给不同的线程池,然后设置这些线程池的规模。

[Java Performance] JVM 线程调优的更多相关文章

  1. Java性能优化权威指南-读书笔记(五)-JVM性能调优-吞吐量

    吞吐量是指,应用程序的TPS: 每秒多少次事务,QPS: 每秒多少次查询等性能指标. 吞吐量调优就是减少垃圾收集器消耗的CPU周期数,从而将更多的CPU周期用于执行应用程序. CMS吞吐调优 CMS包 ...

  2. jvm系列(六):Java服务GC参数调优案例

    本文介绍了一次生产环境的JVM GC相关参数的调优过程,通过参数的调整避免了GC卡顿对JAVA服务成功率的影响. 这段时间在整理jvm系列的文章,无意中发现本文,作者思路清晰通过步步分析最终解决问题. ...

  3. jvm 命令使用调优 通过jstat、jmap对java程序进行性能调优

    转载:http://blog.csdn.net/jerry024/article/details/8507589 转载: https://blog.csdn.net/zhaozheng7758/art ...

  4. Java架构师面试题——JVM性能调优

    JVM内存调优 对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数. 1.Full GC 会对整个堆进行整理,包括Young.Tenured和Perm.Full GC因为需要对 ...

  5. 【JAVA进阶架构师指南】之五:JVM性能调优

    前言   首先给大家说声对不起,最近属实太忙了,白天上班,晚上加班,回家还要收拾家里,基本每天做完所有事儿都是凌晨一两点了,没有精力再搞其他的了.   好了,进入正题,让我们来聊聊JVM篇最后一个章节 ...

  6. JAVA系列之JVM内存调优

    一.前提 JVM性能调优牵扯到各方面的取舍与平衡,往往是牵一发而动全身,需要全盘考虑各方面的影响.在优化时候,切勿凭感觉或经验主义进行调整,而是需要通过系统运行的客观数据指标,不断找到最优解.同时,在 ...

  7. Java性能优化权威指南-读书笔记(二)-JVM性能调优-概述

    概述:JVM性能调优没有一个非常固定的设置,比如堆大小设置多少,老年代设置多少.而是要根据实际的应用程序的系统需求,实际的活跃内存等确定.正文: JVM调优工作流程 整个调优过程是不断重复的一个迭代, ...

  8. JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解

    摘要: JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps.jstack.jmap.jhat.jstat.hprof等小巧的工具,本博客希望 ...

  9. JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解(转VIII)

    JVM本身就是一个java进程,一个java程序运行在一个jvm进程中.多个java程序同时运行就会有多个jvm进程.一个jvm进程有多个线程至少有一个gc线程和一个用户线程. JDK本身提供了很多方 ...

随机推荐

  1. BZOJ 1042:[HAOI2008]硬币购物(容斥原理+DP)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1042 [题目大意] 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4. 某人去 ...

  2. bzoj 1233: [Usaco2009Open]干草堆tower

    1233: [Usaco2009Open]干草堆tower Description 奶牛们讨厌黑暗. 为了调整牛棚顶的电灯的亮度,Bessie必须建一座干草堆使得她能够爬上去够到灯泡 .一共有N大包的 ...

  3. [NOIp2017提高组]小凯的疑惑

    题目大意: 给你两个数a,b,保证a与b互质,求最大的x满足不能被表示成若干个a与b的和. 思路: 据说是小学奥数题. 考场上先写了个a*b的60分DP,然后打表发现答案就是(a-1)*(b-1)-1 ...

  4. Vue2.X的路由管理记录之 钩子函数(切割流水线)2

    $route可以在子组件任何地方调用,代表当前路由对象,这个属性是只读的,里面的属性是 immutable(不可变) 的,不过你可以 watch(监测变化) 它. 导航和钩子函数: 导航:路由正在发生 ...

  5. Ubuntu下轻松安装virtualbox

    转自:http://blog.csdn.net/flm2003/article/details/8168628 以下假设你的Ubuntu系统版本为11.10的64位版本,进行如下操作: 1.到http ...

  6. 简单总结es6箭头符号

    1.es6箭头符号的几种写法 (1)没有参数 ()=>1*1 (2)一个参数 x=>x*x (3)两个参数以及多个参数 (x,y,z)=>x*y*z 2.箭头符号不会绑定this.a ...

  7. POI创建Excel使用的常见的属性

    public static void main(String[] args) { //创建新的Excel 工作簿 HSSFWorkbook workbook =new HSSFWorkbook(); ...

  8. nginx配置rewrite总结

    1.rewrite regex replacement [flag] 2.flag为break时,url重写后,直接使用当前资源,不在执行location里其他语句,完成本次请求,地址栏url不变. ...

  9. 央行mlf,SLF,PSL,MLF,SLO

    央行mlf是什么意思 中国人民银行 中国人民银行(The People's Bank Of China,英文简称PBOC),简称央行,是中华人民共和国的中央银行,中华人民共和国国务院组成部门.在国务院 ...

  10. 15.同步类容器Vector

    同步类容器1 1.线程都是安全的. 2.在某些场景下需要加锁来保护“复合操作” a.迭代:反复去访问元素.遍历完容器所有的元素 b.跳转:根据下标制定去访问查找元素 c.条件运算 3.复合操作在多线程 ...