自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一名coder

Change the world with thought and code!

  • 博客(35)
  • 收藏
  • 关注

原创 JVM调优专题-JVM调试工具

不怕有错,就怕不知道哪里有错,Java开发中,到底哪里错了,借助工具一看便知。本节介绍几款JVM诊断的工具和方法

2019-06-29 21:43:53 584

原创 JVM调优专题-垃圾回收机制

后天起,上海市实行强制垃圾分类。为了响应国家号召,建议上海同胞买头猪区分干湿垃圾,是干是湿、让猪试吃、一吃便知^v^,哈哈。。想当年,Java凭借跨平台和垃圾回收机制一举拿下编程语言第一的宝座,深刻说明垃圾分得好、到哪都是宝。本节我们一起探讨Java的垃圾回收机制

2019-06-29 21:30:17 269

原创 JVM调优专题-内存溢出及解决方案

吃撑过吗?吃多了还想吃咋办?当然JVM也有吃撑了的时候,甚至撑到程序宕机卡死,后果很严重。本节我们一起探讨如何判断JVM内存溢出、以及其解决方案。

2019-06-29 19:59:30 1660

原创 JVM调优专题-JVM调优参数

什么是虚拟机参数配置在虚拟机运行的过程中,如果可以跟踪系统的运行状态,那么对于问题的故障排查会有一定的帮助,为此,在虚拟机提供了一些跟踪系统状态的参数,使用给定的参数执行Java虚拟机,就可以在系统运行时打印相关日志,用于分析实际问题。我们进行虚拟机参数配置,其实就是围绕着堆、栈、方法区进行配置。参数含义 -XX:+PrintGC 每次触发GC的时候打印相关...

2019-06-24 23:28:29 295

原创 JVM调优专题-JVM内存原理及内存结构

作为JAVA开发工程师,相信大家对JVM并不陌生,作为Java程序基础编译和执行平台,自然占据着相当重要的地位。Java语言的跨平台性和垃圾回收机制,简直是程序员的福音,一次性充分的解决了最让人头疼的兼容性问题和内存问题,真是个天才的设计^v^。所以啊,我们日常工作中无需过多的关注JVM的问题,这就导致了即使对jvm不熟悉也不影响我们的软件运行,其实这里有利也有弊,这样可能会存在一些隐藏的问题不能被发现,会在某些情况下集中爆发,不利于顺利实施一个成熟可靠地软件产品。所以在某些情况下,JVM调优就显得尤为重要

2019-06-24 22:56:10 782

原创 Java多线程专题(总结)-加锁对性能的影响、CAS如何保证线程安全

加锁通常会严重地影响性能。线程会因为竞争不到锁而被挂起,等锁被释放的时候,线程又会被恢复,这个过程中存在着很大的开销,并且通常会有较长时间的中断,因为当一个线程正在等待锁时,它不能做任何其他事情。如果一个线程在持有锁的情况下被延迟执行,例如发生了缺页错误、调度延迟或者其它类似情况,那么所有需要这个锁的线程都无法执行下去。这个测试程序调用了一个函数,该函数会对一个64位的计数器循环自增5亿次。机...

2019-06-11 21:37:07 5505

原创 Java多线程专题-线程锁深度解析

我们在前面章节也提到过多线程的锁机制,但没有深入的去研究锁的种类以及其用法。在这里做一个深度说明。多线程锁是为了解决有可能产生得线程安全问题,从而保证多线程程序的健壮性和可靠性。本节我们将讨论Java多线程中的各种锁以及其用法。悲观锁和乐观锁悲观锁和乐观锁无具体实现,只是概念上的锁。下面会讲到这两种概念锁的具体实现细节何其应用场景。悲观锁(Pessimistic Lock)顾...

2019-06-05 21:37:19 316

原创 Java多线程专题-线程池原理

线程池概念及应用线程池是为了省去频繁创建线程所带来的开销,统一管理线程,在程序一开始就创建一些线程供程序使用,使用完毕后不会结束该线程,而是放回线程池,以便被再次使用,可以理解为线程池是一个线程的集合,每一个线程都可被多次使用。Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。降低资源消耗...

2019-06-05 21:06:24 151

原创 Java多线程专题-并发队列

在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue。ConcurrentLinkedQueue是一个适用于高并发场景下的队列,通过无锁的方式,实现了高并发状态下的高性能,通常ConcurrentLinkedQueue性能好于BlockingQue...

2019-06-04 22:19:13 213

原创 Java多线程专题-Countdownlatch、CyclicBarrier与Semaphore

这三个类都属于java.util.concurrent包下的,用于保证线程安全,用比较简明的话讲,这三个类的主要功能为:Countdownlatch:指定数量的线程执行完后才能向下执行。 CyclicBarrier:指定数量的线程到达屏障之后,一起向下执行 Semaphore:只允许指定数量的线程同时执行具体参照下面的详细介绍CountDownLatchCountDownLatc...

2019-06-04 22:07:52 168

原创 Java多线程专题-同步容器类之间的线程问题

Vector与ArrayList区别1.ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。2....

2019-06-04 22:02:51 155

原创 Java多线程专题-Lock锁的使用

在 jdk1.5 之后,并发包中新增了 Lock 接口(以及相关实现类)用来实现锁功能,Lock 接口提供了与 synchronized 关键字类似的同步功能,但需要在使用时手动获取锁和释放锁。Lock写法Lock lock = new ReentrantLock();lock.lock();try{//可能会出现线程安全的操作}finally{//一定在finally中释放...

2019-06-04 21:57:14 452

原创 Java多线程专题-wait()、notify、notifyAll()方法

wait()、notify()、notifyAll()是三个定义在Object类里的方法,可以用来控制线程的状态。这三个方法最终调用的都是jvm级的native方法。随着jvm运行平台的不同可能有些许差异。 如果对象调用了notifyAll方法就会通知所有等待这个对象控制权的线程继续运行。 如果对象调用了notify方法就会通知某个正在等待这个对象的控制权的线程可以继续运行。 如果对象调...

2019-06-04 21:51:13 296

原创 Java多线程专题-ThreadLocal

ThreadLocal是线程内部的局部变量,仅提供给当前线程访问,可以在线程运行时随时获取。当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。ThreadLocal的接口方法ThreadLocal类接口很简单,只有4个方法,我们先来了解一下:void se...

2019-06-04 21:36:37 135

原创 Java多线程专题-volatile的使用

什么是volatileVolatile关键字的作用是保证被修饰的变量在多个线程之间的可见性。并不保证线程安全先来看下面这个例子class ThreadVolatileDemo extends Thread { public boolean flag = true; @Override public void run() { System.out...

2019-06-03 21:36:53 142

原创 Java多线程专题-Java内存模型

共享内存模型指的就是Java内存模型(简称JMM),JMM决定一个线程对共享变量的写入时,能对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存,写...

2019-06-02 23:39:32 147

原创 Java多线程专题-多线程三大特性

在我们的日常编码中,遵守多线程的三大特性可以使我们的程序更加稳健,避免不必要的麻烦。原子性即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。一个很经典的例子就是银行账户转账问题: 比如从账户A向账户B转1000元,那么必然包括2个操作:从账户A减去1000元,往账户B加上1000元。这2个操作必须要具备原子性才能保证不出现一些意外的问题。我们...

2019-06-02 23:37:43 264

原创 Java多线程专题-线程死锁的原因解决方案

死锁的概念所谓死锁,是指多个进程在运行过程中因争夺资源而照成的一种僵局。当进程处于这种僵持状态时,若无外力作用,它们都将无法再继续执行。产生死锁的原因竞争资源。当系统中供多个进程共享的资源如打印机、公用队列等,其数目不足以满足诸进程的需要时,会引起诸进程对资源的竞争而产生死锁。 进程间推进顺序非法。进程在运行过程中,请求和释放资源的顺序不当,也同样会产生进程死锁。class T...

2019-06-02 23:34:16 497

原创 Java多线程专题-synchronized的使用

为什么有线程安全问题?当多个线程同时共享同一个全局变量或静态变量,做写的操作时,可能会发生数据冲突问题,也就是线程安全问题。但是做读操作是不会发生数据冲突问题。使用同步方式解决线程安全问:如何解决多线程之间线程安全问题?答:使用多线程之间同步synchronized或使用锁(lock)。问:为什么使用线程同步或使用锁能解决线程安全问题呢?答:将可能会发生数据冲突问题(线程不...

2019-06-02 23:24:55 658

原创 Java多线程专题-多线程join方法的作用

Join方法概述join作用是让其他线程变为等待。t1.join(); // 让其他线程变为等待,直到当前t1线程执行完毕,才释放。thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。class JoinThread implements Runn...

2019-06-02 23:13:04 313

原创 Java多线程专题-线程的运行状态

先观察下面这张图线程从创建、运行到结束总是处于下面五个状态之一:新建状态、就绪状态、运行状态、阻塞状态及死亡状态。新建状态当用new操作符创建一个线程时, 例如new Thread(r),线程还没有开始运行,此时线程处在新建状态。 当一个线程处于新生状态时,程序还没有开始运行线程中的代码就绪状态一个新创建的线程并不自动开始运行,要执行线程,必须调用线程的start()方法。...

2019-06-02 23:05:35 153

原创 Java多线程专题-守护线程

什么是守护线程Java中有两种线程,一种是用户线程,另一种是守护线程。 用户线程是指用户自定义创建的线程,主线程停止,用户线程不会停止 守护线程当进程不存在或主线程停止,守护线程也会被停止。 使用setDaemon(true)方法设置为守护线程守护线程案例** * * 什么是守护线程? 守护线程 进程线程(主线程挂了) 守护线程也会被自动销毁. * */public ...

2019-06-02 23:00:38 103

原创 Java多线程专题-Java多线程简介及创建方式

Java多线程简介线程是程序中一个单一的顺序控制流程。进程内有一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指令运行时的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程。多线程指在程序内部同时执行多条任务线,各自同时进行处理不同的任务,从而最大限度利用计算机性能,提高程序效率。进程与线程比较每个正在系统上运行的程序都是一个进程。每个进程...

2019-06-02 22:38:19 124

转载 VMware中linux虚拟机三种网络连接方式及原理

VMware中运行的虚拟机系统通常有三种网络连接方式:Brigde桥接模式(VMnet0) NAT模式(VMnet8) Host-only(VMnet1)1、Brigde——桥接:默认使用VMnet0 原理: Bridge  桥"就是一个主机,这个机器拥有两块网卡,分别处于两个局域网中,同时在"桥"上,运行着程序,让局域网A中的所有数据包原封不动的流入B,反之亦然。这样,局域网A...

2018-09-03 23:12:53 2331

原创 HTTP协议详解、http报文、请求与响应

HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法。HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)简单讲是HTTP的安全版,在HTTP下加入SSL层。SSL(Secure Sockets Layer 安全套接层)主要用于Web的安全传输协议,在传...

2018-08-13 23:33:02 980

原创 Zookeeper详细教程、分布式协调服务原理

Zookeeper分布式服务框架是Apache Hadoop的一个子项目,主要为分布式系统提供协调服务以及一些数据管理问题,如命名服务、集群管理、分布式应用配置等。zookeeper可以将简单易用的接口和高效稳定的系统提供给用户。在大型网站中,zookeeper一直占据着重要地位,主要功能如下:zookeeper是为别的分布式程序服务的 Zookeeper本身就是一个分布式程序(只要有半...

2018-08-11 13:18:39 865

原创 Linux简介及最常用命令(简单易学,但能解决95%以上的问题)

Linux是目前应用最广泛的服务器操作系统,基于Unix,开源免费,由于系统的稳定性和安全性,市场占有率很高,几乎成为程序代码运行的最佳系统环境。linux不仅可以长时间的运行我们编写的程序代码,还可以安装在各种计算机硬件设备中,如手机、路由器等,Android程序最底层就是运行在linux系统上的。一、linux的目录结构/ 下级目录结构bin  (binaries)存放二进制可执...

2018-08-08 20:11:31 10690 4

原创 03-一遍文章读懂大型网站的架构演进——分布式系统常用解决方案(二)

继续我们关于大型分布式网站解决方案的讨论。上一章节中,我们一起研究了应用与数据库分离、集群、读写分离、缓存这几种大型网站的解决方案,地址:https://blog.csdn.net/xulong_08/article/details/81359364。经过上一章节的讨论,我们已经能够了解随着网站访问量的增加,如何逐步改造网站架构。 对于单机系统的处理能力无法满足需求时,需要多台服务器将应...

2018-08-05 23:19:40 285

原创 02-一遍文章读懂大型网站的架构演进——分布式系统常用解决方案(一)

        在上一章节中我们了解了分布式系统的相关内容,对分布式系统有了一个初步认识,但是只停留在理论层面上,这一章节我们将讨论大型网站的演进过程。即随着用户量以及业务量的不断增加,网站规模越来越大,就需要不断更新技术架构,是网站能够满足日益增长的业务需求。        我们将根据一个网站的发展来展开今天对大型网站架构的讨论,下面我们将重点讨论大型分布式网站需要哪些技术的支撑,才能应对日...

2018-08-02 23:07:29 400 1

原创 六种负载均衡算法介绍

几乎所有的大型网站都会用到负载均衡,主要解决集群服务器中将大量请求分发至不同机器上去处理,突破单机处理极限,从而提升了网站整体的处理能力。目前常用的负载均衡解决方案有硬件负载和软件负载,几种软件负载主要有Nginx、Apache、HAProxy等,但是负载策略基本上有以下几种:1、轮询法  将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数...

2018-08-02 15:48:02 683

原创 01-分布式系统简介

最近一直在研究《大型网站系统与Java中间件实践》这本书,对我帮助很大,所以在这里想把我对这本书的理解以及这本书的部分内容分享给大家。这里对这本书的内容会做一个梳理,将我认为重点的内容,以及在平时工作中遇到的问题写下来,一方面是为了加强记忆,另一方面是为了对这本书内容感兴趣的同学能够少走弯路,更快的接受书本的内容。我会将从分布式说起,一直到分布式系统中用到的各种技术、中间件的使用等,全方位的介...

2018-08-01 17:35:53 215

原创 Java常用设计模式——代理模式

一、简介        代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用和访问。可以对该对象访问前、访问后、发生异常等情况的处理。可理解为对类增强的一种手段(继承、装饰、代理)。二、作用中介隔离作用:在某些情况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的作用,其特征是代理类和委托类实现相同的接口。 开闭原则,增加...

2018-07-23 15:31:05 157

原创 Java常用设计模式——策略模式

Java中有很多设计模式,在网上也有很多设计模式的教程和资料,讲解的也比较详细,对我在学习中产生的问题提供了很大的帮助,但是经常有一些问题查了很多博客也无法再找到答案,所以我希望能填补一些这方面的空白,将我在日常学习过程的理解和想法写下来,并能和关心此类问题同学和朋友一起讨论一下。设计模式是一套被反复使用,高效率、安全稳定且能解耦合,能够进行高效开发,降低代码冗余易于维护的一种编码习惯。本文将...

2018-07-23 15:11:08 176

原创 Java常用设计模式——工厂模式

Java中有很多设计模式,在网上也有很多设计模式的教程和资料,讲解的也比较详细,对我在学习中产生的问题提供了很大的帮助,但是经常有一些问题查了很多博客也无法再找到答案,所以我希望能填补一些这方面的空白,将我在日常学习过程的理解和想法写下来,并能和关心此类问题同学和朋友一起讨论一下。设计模式是一套被反复使用,高效率、安全稳定且能解耦合,能够进行高效开发,降低代码冗余易于维护的一种编码习惯。本文将...

2018-07-23 14:32:50 155

原创 Java常用设计模式——单例模式

Java中有很多设计模式,在网上也有很多设计模式的教程和资料,讲解的也比较详细,对我在学习中产生的问题提供了很大的帮助,但是经常有一些问题查了很多博客也无法再找到答案,所以我希望能填补一些这方面的空白,将我在日常学习过程的理解和想法写下来,并能和关心此类问题同学和朋友一起讨论一下。设计模式是前辈们在多年开发工作中经验的总结,可以提高代码的可重用性、可靠性和规范性,让代码更容易理解,而单例模式是...

2018-07-23 14:13:13 122

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除