JVM内存模型来解释多线程并发常见问题和volilate,final,ThreadLocal

多核CPU运行时,每个CPU都会有自己的Cache,同样jvm运行时,每个线程的私有栈在使用共享数据时,都会现将共享数据拷贝进栈顶进行运算,这份数据其实是副本,因此也同样存在多个线程修改一个内存单元的一致性问题。 JVM有自己的一套内存模型(Java memory model,JMM)。JDK1....

2016-04-08 11:35:17

阅读数 1647

评论数 0

JAVA通信的三种I/O模型

BIO(阻塞IO),也就是传统的IO,在进行数据读取时,在数据准备好之前,线程一直挂起,而数据从准备好,需经过硬盘,OS内核(Kernel),JVM,这时一个漫长的过程,但是每一个SOCKET连接,都需要一个线程来监听,对于传输小数据的短连接问题还不大,如果是传输大数据的长连接,那就会有大量线程在...

2016-04-06 15:36:13

阅读数 859

评论数 0

jvm内存划分与GC工作机制

heap堆里的minor GC和full gc 在不断创建对象过程中Eden区会满,然后开始Young GC(minor GC),Young 空间第一次GC就是在Eden区找”活着的对象“,将这些对象拷贝到S0或S1其中一个区域,然后将Eden清空。 第一次如果选了S0,第二次就会把Eden和S...

2016-04-05 17:07:37

阅读数 295

评论数 0

字节码增强和AOP

字节码增强技术:AOP技术其实就是字节码增强技术,JVM提供的动态代理追根究底也是字节码增强技术。 应用场景:某一天系统出现OOM,通过工具分析,是莫各类的对象占用了很大空间,但是这个对象被许多程序访问,那么就很难找到,工程的全文匹配也只能找到自己的业务代码调用的地方,深入的反射,三方包调用无...

2016-04-05 14:58:57

阅读数 3319

评论数 0

CAS机制

CAS,Compare and Swap, 翻译成比较并交换:有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。 现代的CPU提供了特殊的指令,可以自动更新共享数据,而且能够检测到其他线程的干扰,而 compareAndS...

2016-04-20 15:43:31

阅读数 384

评论数 0

集合

java集合架构支持3种类型的集合:规则集(Set),线性表(List),和图(Map),分别定义在Set,List,Map中。Set实例存储一组互不相同的元素(集合),List实例存储一组顺序排列的元素(表),Map存储一组 对象—关键值的映射总的架构如下,非常重要,包含继承关系,实现的分类,一...

2016-04-19 14:55:45

阅读数 243

评论数 0

乐观锁和悲观锁

悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。 ...

2016-04-14 16:57:36

阅读数 349

评论数 1

基于nginx tomcat redis分布式web应用的session共享配置

一、前言 nginx 作为目前最流行的开源反向代理HTTP Server,用于实现资源缓存、web server负载均衡等功能,由于其轻量级、高性能、高可靠等特点在互联网项目中有着非常普遍的应用,相关概念网上有丰富的介绍。分布式web server集群部署后需要实现session共享,针对 ...

2016-04-14 15:51:43

阅读数 400

评论数 0

java深拷贝和浅拷贝

因为每个类直接或间接的父类都是Object,因此它们都含有clone()方法,但是因为该方法是protected,所以都不能在类外进行访问。要想对一个对象进行复制,就需要对clone方法覆盖。 一般步骤是(浅复制):被复制的类需要实现Clonenable接口(不实现的话在调用clone方法会抛出...

2016-04-14 14:43:09

阅读数 298

评论数 0

线程基础

线程和进程的区别:线程是进程的执行单位,多线程之间可以共享一个进程资源,线程占用过多资源会使整个进程宕机,由于资源共享,现场之间会互相影响,进程之间通常不会。 线程的的创建,都要通过java.lang.Thread类的start()方法,通常可以通过继承并扩展Thread原本的run()方法,或者...

2016-04-07 11:12:54

阅读数 254

评论数 0

JAVA和计算机原理

计算机由CPU,DDR缓存,内存,硬盘组成。计算机的工作原理与编程语言的原理都是相通的。 线程是进程(如JVM就是一个进程)的单位,进程间相互独立,进程可申请系统资源,同一进程的各线程间共享资源。某进程内的线程在其它进程不可见。 目前CPU的基本单位是线程,JAVA也是基于多线程模式,当JAVA程...

2016-03-30 16:01:48

阅读数 412

评论数 0

数字游戏和JAVA的一些坑

面试题,如何不用临时变量,让整型变量A和B的值互换。 一般有两种方式: 第一种用数据叠加后减回来 A=A+B; B=A-B; A=A-B; 第二中是异或运算,异或运算是按照二进制进行“异或”的,对于A.B两个数字,如果某个二进制位上都是0,或都是1,则返回0...

2016-03-29 17:38:32

阅读数 339

评论数 0

一些简单的算法

入门算法冒泡排序时间复杂度o(n²),空间复杂度o(1),最差的排序。 快速排序,快速排序(Quicksort)是对冒泡排序的一种改进,排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想—-分治法也确实实用,方法的基本思想是: 1.先从数列中取出一个数作...

2016-03-29 11:41:23

阅读数 1444

评论数 0

从jvm编译优化角度解读String的赋值比较

下面是String对象赋值比较的例子:public class StringTest { static String a = "a"; static String b = "b"; static final String c = &q...

2016-03-28 16:27:10

阅读数 862

评论数 2

Interceptor 拦截器 与 <mvc:annotation-driven />的冲突

最近在学习拦截器,没想到刚开始就碰到难题了。我明明配置好了拦截器,但是丝毫没有起作用,百思不得其解。 这是起初的配置: ? 1 2 3 4 5 6 7 8 9 10 11 12 1...

2016-03-25 17:21:32

阅读数 2885

评论数 2

AOP

AOP:面向切面编程,通过预编译方式和运行期动态代理实现程序功能统一维护的一种技术

2016-03-14 10:17:08

阅读数 290

评论数 0

IOC

接口:接口即声明,声明了那些方法是对外公开提供的,JAVA8中接口可以有方法体 面向接口编程:结构设计中,分清楚层次及调用关系,每层只向外提供一组功能接口,各层间仅依赖接口而非实现类 IOC在:控制反转,控制权的转移,应用程序本身不负责依赖对象的创建和维护,而是由外部容器负责创建和维护 DI依赖注...

2016-03-14 09:55:01

阅读数 224

评论数 0

spring

spring 是一个开源框架,为解决企业应用开发的复杂性而创建的,现在已经不止应用于企业应用 是一个轻量级的控制反转IOC和面向切面AOP 的容器框架 从大小与开销两方面而言Spring都是轻量的 通过控制反转的技术达到松耦合目的 提供面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系...

2016-03-14 09:44:29

阅读数 224

评论数 0

工厂模式

1.什么情况下适合工厂模式 有一组类似的对象需要创建 在编码时不能预见需要创建哪种类的实例 系统需要考虑扩展性,不依赖于产品实例如何被创建组合和表达的细节 2.工厂模式的动机 在软件系统中经常面临着对象的创建工作,由于需求的变化,这个对象可能随之也会变化,但它拥有比较文档的接口 为...

2016-03-11 17:27:49

阅读数 255

评论数 0

springMvc

拦截器和过滤器的区别 1.过滤器Filter依赖于Servlet容器,基于回调函数 2.拦截器Interceptor依赖于框架容器,基于反射机制 springMVC图示: mvc的核心思想是业务数据抽取同业务数据呈现相分离,程序分层,分工合作,相互独立又协同工作

2016-03-09 17:05:48

阅读数 236

评论数 0

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