
java基础
一刀平
java架构
展开
-
Java 的几把 JVM 级锁
简介在计算机行业有一个定律叫 " 摩尔定律 ",在此定律下,计算机的性能突飞猛进,而且价格也随之越来越便宜, CPU 从单核到了多核,缓存性能也得到了很大提升,尤其是多核 CPU 技术的到来,计算机同一时刻可以处理多个任务。在硬件层面的发展带来的效率极大提升中,软件层面的多线程编程已经成为必然趋势,然而多线程编程就会引入数据安全性问题,有矛必有盾,于是发明了“锁”来解决线程安全问题。在这篇文章...转载 2020-02-19 10:58:07 · 310 阅读 · 0 评论 -
Java 应用性能调优实践
Java 应用性能优化是一个老生常谈的话题,典型的性能问题如页面响应慢、接口超时,服务器负载高、并发数低,数据库频繁死锁等。尤其是在“糙快猛”的互联网开发模式大行其道的今天,随着系统访问量的日益增加和代码的臃肿,各种性能问题开始纷至沓来。Java 应用性能的瓶颈点非常多,比如磁盘、内存、网络 I/O 等系统因素,Java 应用代码,JVM GC,数据库,缓存等。笔者根据个人经验,将 Java 性能转载 2017-02-10 15:55:44 · 458 阅读 · 0 评论 -
Object详解
Object类是Java中其他所有类的祖先,没有Object类Java面向对象无从谈起。作为其他所有类的基类,Object具有哪些属性和行为,是Java语言设计背后的思维体现。 Object类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入。Object类没有定义属性,一共有13个方法,具体的类定义结构如下图:1.类转载 2017-02-28 17:08:55 · 671 阅读 · 0 评论 -
java线程模型
1. 概述众所周知,线程 - Thread 是比进程 - Progress 更轻量级的调度单位。简单来说,引入线程带来的好处是:可以把一个进程 的资源分配和执行调度分开,各个线程 既可以共享进程 资源(内存地址、文件I/O等),又可以独立调度。线程实现方式: 主流的操作系统都实现了线程 ,而编程语言一般会提供关于线程 的统一API操作。那么,编程语言如何去调用系转载 2017-02-11 19:08:27 · 382 阅读 · 0 评论 -
最小生成树-Prim算法和Kruskal算法
Prim算法1.概览普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。该算法于1930年由捷克数学家沃伊捷赫·亚尔尼克(英语:Vojtěch Jarník)发现;并在1957年由美国计算机科学家罗伯特·普转载 2017-02-15 17:27:03 · 342 阅读 · 0 评论 -
工作备忘
1:查看内存情况jmap -heap 49212:查看gc情况jstat -gcutil 4921原创 2017-01-23 16:48:03 · 370 阅读 · 0 评论 -
netty可靠性(相对于nio)
转自:http://blog.youkuaiyun.com/pentiumchen/article/details/45117233Selector空轮询处理在NIO中通过Selector的轮询当前是否有IO事件,根据JDK NIO api描述,Selector的select方法会一直阻塞,直到IO事件达到或超时,但是在Linux平台上这里有时会出现问题,在某些场景下select方法会直接返回,即使没转载 2017-03-16 16:43:47 · 1185 阅读 · 0 评论 -
如何合理地估算线程池大小?
如何合理地估算线程池大小?这个问题虽然看起来很小,却并不那么容易回答。大家如果有更好的方法欢迎赐教,先来一个天真的估算方法:假设要求一个系统的TPS(Transaction Per Second或者Task Per Second)至少为20,然后假设每个Transaction由一个线程完成,继续假设平均每个线程处理一个Transaction的时间为4s。那么问题转化为:如何设计线程转载 2017-03-16 16:49:30 · 455 阅读 · 0 评论 -
Maven常用命令 - 构建反应堆中指定模块
转自:http://blog.youkuaiyun.com/jason5186/article/details/39530087mvn -h 可以看到很多命令及其用途;-am --also-make 同时构建所列模块的依赖模块;-amd -also-make-dependents 同时构建依赖于所列模块的模块;-pl --projects 构建制定的模块,模块间用逗号分隔;-rf -re转载 2017-05-02 14:05:05 · 497 阅读 · 0 评论 -
通过jstack日志分析和问题排查
转自:http://www.ccblog.cn/84.htm前段事件公司出现了一个严重故障(调用dubbo服务一直处于超时,整个服务系统发生雪崩,系统彻底访问不了),一开始怎么都找不到问题的根源,日志的表现形式是dubbo线程池用完了,那么具体是什么导致的没有找到,后然通过jstack日志分析才找到问题的根源,根源就是系统日志代码写有问题。通过这个故障我们来了解下如何通过jstack日志分转载 2017-02-10 15:44:13 · 39407 阅读 · 2 评论 -
从Java视角理解系统结构(三)伪共享
转自 转载自并发编程网 – ifeve.com http://ifeve.com/from-javaeye-false-sharing/从我的前一篇博文中, 我们知道了CPU缓存及缓存行的概念, 同时用一个例子说明了编写单线程Java代码时应该注意的问题. 下面我们讨论更为复杂, 而且更符合现实情况的多核编程时将会碰到的问题. 这些问题更容易犯, 连j.u.c包作者Doug Lea大师转载 2016-12-21 20:28:39 · 346 阅读 · 0 评论 -
缓存一致性协议(MESI协议)
大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要通过和内存的交互来进行,会大大降低指令执行的速度。因此在CPU里面就有了高速缓存转载 2016-12-08 20:16:44 · 12241 阅读 · 5 评论 -
并发编程的三个重要概念
并发编程的三个概念在并发编程中,我们通常会遇到以下三个问题:原子性问题,可见性问题,有序性问题。我们先看具体看一下这三个概念:原子性原子性:即一个操作或者多个操作要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。 一个很经典的例子就是银行账户转账问题:比如从账户A向账户B转1000元,那么必然包括2个操作:从账户A减去1000元,往账户B加上1转载 2016-12-08 20:11:53 · 530 阅读 · 0 评论 -
深入剖析volatile关键字
volatile关键字的两层含义一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,就具备了两层语义: 1.保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。 2.静止进行质量重排序。先来看看一段代码,假设线程1先执行,线程2后执行://线程1 boolean s转载 2016-12-08 19:49:07 · 387 阅读 · 0 评论 -
ThreadLocal
为什么要用threadLocal? 可以总结为一句话:ThreadLocal的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。 举个例子,我出门需要先坐公交再做地铁,这里的坐公交和坐地铁就好比是同一个线程内的两个函数,我就是一个线程,我要完成这两个函数都需要同一个东西:公交卡转载 2016-12-09 13:48:35 · 319 阅读 · 0 评论 -
CopyOnWrite容器
Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。转载 2016-12-09 14:21:26 · 467 阅读 · 0 评论 -
内存模型JMM
享到:微博微信FacebookTwitter有道云笔记邮件分享稍后阅读我的阅读清单并发编程模型的分类在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递 。在共享内存的并发模型里,线程之间共转载 2016-12-08 17:28:12 · 7501 阅读 · 0 评论 -
从Java视角理解系统结构(一)CPU上下文切换
本文转自:转载自并发编程网 – ifeve.com http://ifeve.com/java-context-switch/ 在高性能编程时,经常接触到多线程. 起初我们的理解是, 多个线程并行地执行总比单个线程要快, 就像多个人一起干活总比一个人干要快. 然而实际情况是, 多线程之间需要竞争IO设备, 或者竞争锁资源,导致往往执行速度还不如单个线程. 在这里有一个经常提及的概念转载 2016-12-21 19:57:14 · 357 阅读 · 0 评论 -
从Java视角理解系统结构(二)CPU缓存
转载自并发编程网 – ifeve.com http://ifeve.com/from-javaeye-cpu-cache/众所周知, CPU是计算机的大脑, 它负责执行程序的指令; 内存负责存数据, 包括程序自身数据. 同样大家都知道, 内存比CPU慢很多. 其实在30年前, CPU的频率和内存总线的频率在同一个级别, 访问内存只比访问CPU寄存器慢一点儿. 由于内存的发展都到技术及成本转载 2016-12-21 20:08:22 · 359 阅读 · 0 评论 -
java内存模型(概念 )
一、内存模型Java内存模型,往往是指Java程序在运行时内存的模型,而Java代码是运行在Java虚拟机之上的,由Java虚拟机通过解释执行(解释器)或编译执行(即时编译器)来完成,故Java内存模型,也就是指Java虚拟机的运行时内存模型。作为Java开发人员来说,并不需要像C/C++开发人员,需要时刻注意内存的释放,而是全权交给虚拟机去管理,那么有就必要了解虚拟机的运行时内存转载 2016-12-08 17:20:53 · 399 阅读 · 0 评论