并发编程系列
JVM性能调优的一些学习和并发编程经验总结
hcmony
不积跬步,无以至千里;不积小流,无以成江海
展开
-
并发编程之ThreadLocal分析二
ThreadLocalMap ThreadLocal最重要的内部类理解ThreadLocal 要理解它与Thread、ThreadLocalMap 的关系,如下图:每个线程都有一个LocalThreadMap,LocalThreadMap初始化时有16个卡槽,每个卡槽放着一个Entry,对应的Key是ThreadLocal,这里的Key就是上面说到继承了弱引用类型,在我们使用remove方法时候就会用到。Value为Object 类型,也就是我们要放入的对象。...原创 2020-05-12 20:08:02 · 184 阅读 · 0 评论 -
并发编程之ThreadLocal分析一
知识点:神奇的hashcode , 0x61c88647 弱引用 WeakReference 拓展java引用相关 关键点 ThreadLocalMap AtomicInteger应用案例:spring RequestContextHolder zuul RequestContext guava Dispatcher tomcat ApplicationContext1.神奇的hashcode 0x61c886470x61c88647是什么?转化为十进制是1640531..原创 2020-05-12 19:45:09 · 231 阅读 · 0 评论 -
Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等
在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类。介绍的内容如下:1.公平锁 / 非公平锁2.可重入锁 / 不可重入锁3.独享锁 / 共享锁4.互斥锁 / 读写锁5.乐观锁 / 悲观锁6.分段锁7.偏向锁 / 轻量级锁 / 重量级锁8.自旋锁上面是很多锁的名词,这些分类并不是全是指锁的状态,有的指锁的特性,有的指锁的设计,下面总...转载 2019-12-12 19:47:02 · 178 阅读 · 0 评论 -
根据CPU核心数确定线程池并发线程数
目录一、抛出问题二、分析三、实际应用===========正文分割线=================一、抛出问题关于如何计算并发线程数,一般分两派,来自两本书,且都是好书,到底哪个是对的?问题追踪后,整理如下:第一派:《Java Concurrency in Practice》即《java并发编程实践》,如下图: 如上图,在《Java Concurrency in Practice》一书中,给出...转载 2018-03-12 10:39:57 · 1963 阅读 · 1 评论 -
【深入理解JVM】:类加载器与双亲委派模型
类加载器加载类的开放性类加载器(ClassLoader)是Java语言的一项创新,也是Java流行的一个重要原因。在类加载的第一阶段“加载”过程中,需要通过一个类的全限定名来获取定义此类的二进制字节流,完成这个动作的代码块就是类加载器。这一动作是放在Java虚拟机外部去实现的,以便让应用程序自己决定如何获取所需的类。虚拟机规范并没有指明二进制字节流要从一个Class文件获取,或者说根本...转载 2017-09-06 21:34:45 · 295 阅读 · 0 评论 -
比较 ReentrantLock 和 synchronized 的使用和可伸缩性
多线程和并发性并不是什么新内容,但是 Java 语言设计中的创新之一就是,它是第一个直接把跨平台线程模型和正规的内存模型集成到语言中的主流语言。核心类库包含一个 Thread 类,可以用它来构建、启动和操纵线程,Java 语言包括了跨线程传达并发性约束的构造 —— synchronized 和 volatile 。在简化与平台无关的并发类的开发的同时,它决没有使并发类的编写工作变得更繁琐,只是使它...转载 2017-09-06 20:45:22 · 312 阅读 · 0 评论 -
工作中为什么要用多线程,它的好处,以及一个简单多线程实例。
/** * Created by hcmony on 2017/8/31. */public class Test{ //多线程要执行的方法 public static void getInt(int i){ System.out.println(Thread.currentThread().getName()+"-"+i); } static原创 2017-09-01 10:02:13 · 4221 阅读 · 0 评论 -
java类装载器ClassLoader&ExtClassLoader &AppClassLoader &Bootstrp loader
JDK 默认提供了如下几种ClassLoader Bootstrp loader Bootstrp加载器是用C++语言写的,它是在Java虚拟机启动后初始化的,它主要负责加载%JAVA_HOME%/jre/lib中的类。 ExtClassLoader Bootstrp loader加载ExtClassLoader,并且将ExtClassLoader的父加载器设置为Boo...原创 2019-01-25 10:53:28 · 337 阅读 · 0 评论 -
Java虚拟机(JVM)中的内存设置详解
Java虚拟机(JVM)中的内存设置详解 在一些规模稍大的应用中,Java虚拟机(JVM)的内存设置尤为重要,想在项目中取得好的效率,GC(垃圾回收)的设置是第一步。PermGen space:全称是Permanent Generation space.就是说是永久保存的区域,用于存放Class和Meta信息,Class在被Load的时候被放入该区域Heap space:存转载 2017-09-15 17:26:22 · 9416 阅读 · 2 评论 -
内存溢出的几种原因和解决办法
对于JVM的内存写过的文章已经有点多了,而且有点烂了,不过说那么多大多数在解决OOM的情况,于此,本文就只阐述这个内容,携带一些分析和理解和部分扩展内容,也就是JVM宕机中的一些问题,OK,下面说下OOM的常见情况: 第一类内存溢出,也是大家认为最多,第一反应认为是的内存溢出,就是堆栈溢出:那什么样的情况就是堆栈溢出呢?当你看到下面的关键字的时候它就是堆栈溢出了:java.lang...转载 2018-07-18 21:18:15 · 6406 阅读 · 0 评论 -
java.lang.OutOfMemoryError及解决方案
java.lang.OutOfMemoryError及解决方案主要有3种比较常见的OutOfMemory Error:java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMemoryError: PermGen space java.lang.OutOfMemoryError: GC overhead limit exc...转载 2018-07-23 15:30:19 · 402 阅读 · 0 评论 -
记录用Memory Analyzer分析内存泄漏的解决过程
事故原因:我们的 一个线上项目出现了 java.lang.OutOfMemoryError: GC overhead limit exceeded top 命令发现CPU load average 超过了核心线程数。整个项目属于假死状态。 下载 堆栈信息进行分析如下 图所示:1:打开7个G的文件2,如...原创 2018-07-24 16:01:15 · 1637 阅读 · 0 评论 -
手动写java OOM内存溢出 java.lang.OutOfMemoryError: GC overhead limit exceeded
package com.hcmony.test.memory;import java.io.Serializable;/** * <h3>Shenjue.java基本描述</h3> * <p></p> * * @author hcmony * @since V1.0.0, 2018/09/04 14:43 */public c...原创 2018-09-04 14:51:22 · 1322 阅读 · 0 评论 -
手动写java OOM内存溢出 java.lang.OutOfMemoryError: Java heap space
1,先设置运作内存大小。我用的是idea2,最大最小内存各设置为5M -Xms5m -Xmx5m3package com.hcmony.test.memory;import java.util.ArrayList;import java.util.List;import java.util.UUID;/** * <h3>Shenjue.java基本...原创 2018-09-04 14:57:54 · 1297 阅读 · 0 评论 -
手动写java内存溢出 java.lang.StackOverflowError
package com.hcmony.test.memory;/** * <h3>Shenjue.java基本描述</h3> * <p> * java.lang.StackOverflowError * 【原因】:这也内存溢出错误的一种,即线程栈的溢出,要么是方法调用层次过多(比如存在无限递归调用),要么是线程栈太小。 * ...原创 2018-09-04 17:03:38 · 486 阅读 · 0 评论 -
手动写java内存溢出 java.lang.OutOfMemoryError: PermGen space
注意:运行时的参数 -Xms10m -Xmx10m -XX:PermSize=1m -XX:MaxPermSize=2mpackage com.hcmony.test.memory;import java.io.File;import java.net.URL;import java.net.URLClassLoader;import java.util.ArrayList;i...原创 2018-09-04 17:31:38 · 312 阅读 · 0 评论