目录
[TOC]
原文地址:http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html#whatismmJeremy Manson and Brian Goetz, February 2004
到底什么是内存模型?在一个多处理器系统中,处理器通常拥有多层缓存。这些多层缓存能够高速获取数据(因为缓存中的数据与处理器更近,cpu—>寄存器—>缓存—>主存)和减少主存的访问频率以降低总线的繁忙程度(因为很多操作可以通过缓存的数据自满足,不需要在主存交互)来提高cpu整体的运行速度。
虽然缓存可以明显的优化性能,但是缓存技术的引入也带来了很多调整。比如:当两个处理器同时访问同一个内存地址时会发生什么?在什么情况下这两个处理器会看到相同的值?缓存的引入会造成数据不一致问题?
在处理器层面,一个内存模型中需要定义必要的、充足的条件限制,这些条件保证了一个处理器写入主存的数据对其他处理器的可见性,并且其他处理器的写入操作也可以对当前处理器可见。
一些处理器设计所展现出的是一个强内存模型 ...
一、题前话本人一直崇尚一个原则,“我思,故我在!”。一直以来忙于编码,但是不甚如人意(写了较多重复性、耦合性太强的代码)。行有行规,面向对象编程的Java语言也不例外,遵循其相关原则,才能高效快速的编写高性能的代码。那么期间过程学习很重要,从一开始的基础知识学习,到大量的编写代码,回过头来再将学习的理论和实践相结合,每一个环节都很重要,这样才能成为高手,特别是最后一环(将理论与实践相结合——重构之前不符合理论原则的代码,反过来加深理论的理解)。
二、正题一般对Java面向对象编程的高度概括是——三大基本特性(封装、继承、多态)和五大基本原则(SOLID)
1)三大特性是:封装,继承,多态所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象 ...
javagc
未读什么是Java垃圾回收器Java垃圾回收器是Java虚拟机(JVM)的三个重要模块(另外两个是解释器和多线程机制)之一,为应用程序提供内存的自动分配(Memory Allocation)、自动回收(Garbage Collect) 功能,这两个操作都发生在Java堆上(一段内存快)。某一个时点,一个对象如果有一个以上的引用(Rreference)指向它,那么该对象就为活着的(Live),否则死亡(Dead),视为垃圾,可被垃圾回收器回收再利用。垃圾回收操作需要消耗CPU、线程、时间等资源,所以容易理解的是垃圾回收操作不是实时的发生(对象死亡马上释放),当内存消耗完或者是达到某一个指标(Threshold,使用内存占总内存的比列,比如0.75)时,触发垃圾回收操作。有一个对象死亡的例外,java.lang.Thread类型的对象即使没有引用,只要线程还在运行,就不会被回收。
回收的机制依据统计分析可知,Java(包括一些其它高级语言)里面大多数对象生命周期都是短暂的,所以把Java内存分代管理。分代的目的无非就是为不同代的内存块运用不同的管理策略(算法),从而最大化性能。相对于年老代,通 ...
一、策略模式(一)策略模式概述
定义与概念
策略模式属于对象行为模型,其核心思想是针对一组算法,将每个算法封装到具有共同接口的独立类中,从而实现它们之间的互相替换。该模式将算法的责任和算法本身分隔开,委派给不同的对象管理,把算法包装到一系列的策略类里面,作为一个抽象策略类的子类。简单来说,就是准备一组算法,并将每一个算法封装起来,使它们可以互换。
模式角色
环境(context):持有一个strategy类的引用,它是策略模式的使用场景,负责调用具体策略类的算法接口来完成特定的任务。例如,在一个游戏中,游戏角色的移动行为可以看作是一个环境,它可能持有不同移动策略(如步行策略、飞行策略等)的引用,根据游戏场景的不同选择合适的移动策略。
抽象策略(strategy):这是一个抽象角色,通常由一个接口或抽象类实现,此角色给出了所有具体策略类所需要的接口。它定义了算法的规范,具体的策略类必须实现这个接口,以保证算法的一致性和可替换性。
具体策略(concrete strategy):包装了相关的算法和行为,实现了抽象策略类定义的接口,提供了具体的算法实现。比如,在上述游戏中,步行策略类和飞 ...
一、装饰器模式概述Decorator设计模式属于典型的结构型模式(在GOF的模式分类中,模式分为创建型模式、结构型模式、行为模式三种)。其核心目的在于动态地为对象添加额外功能,这也是理解装饰器模式的关键所在。正如GOF在《Element of reusable Object - Oriented Software》中所概述的:“Decorator Pattern――Attaches additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality.”
(一)何时需要使用装饰器模式在GOF的相关书籍中,以文本组件与边框的例子阐述装饰器模式,但这里将以一个更具说服力的“三明治”例子来说明。假设要为三明治小店构建程序,设计各种三明治对象。若采用传统继承方式,从简单的Sandwich对象开始,如要创建带蔬菜的三明治就继承原有Sandwich并添加蔬菜成员变量,后续若要添加咸肉、奶油等多 ...
人生思绪
未读从2002开始接触Java学会HelloWorld这么经典的程序到如今不知不觉已经十年啦,十年中
亲耳听到过不少大牛的演讲,见到过项目中的神人在键盘上运指如飞的编程速度,当时就
被震撼了。当编程越来越成体力活,我们还能有自己的思想,还能修炼为Java系统级别的
程序员嘛?学习与修炼以下知识与技能,帮你早日达成愿望。
一:Java语言学习
对线程(thread),串行化,反射,网络编程,JNI技术,容器(Map,List, Iterator), 类加载器
(ClassLoader),输入输出流,垃圾回收机制, 有比较深入的了解,最起码做过项目应用。有
过Java项目的性能优化经验,最起码掌握一种性能监视工具的使用,熟悉JVM参数,最起
码知道可以在JVM启动时指定不同垃圾回收机制,以及不同垃圾回收机制之间的
差别,熟悉JVM参数优化。
二:J2EE方面
最好知道JDBC规范是怎么回事情,面对Oracle数据库如果告诉你JDBC驱动不能用了,你
还知道有OCI驱动可以。掌握常见的SQL语句,熟悉JMS, JNDI等组件,掌握一套web开
发模式,从前台到后台,有能力整合好这样的 ...
缓存概述
正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持;
一级缓存基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该Session中的所有 Cache 就将清空。
二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap存储,不同在于其存储作用域为 Mapper(Namespace),并且可自定义存储源,如 Ehcache、Hazelcast等。
对于缓存数据更新机制,当某一个作用域(一级缓存Session/二级缓存Namespaces)的进行了 C/U/D 操作后,默认该作用域下所有 select 中的缓存将被clear。
MyBatis 的缓存采用了delegate机制 及 装饰器模式设计,当put、get、remove时,其中会经过多层 delegate cache 处理,其Cache类别有:BaseCache(基础缓存)、EvictionCache(排除算法缓存) 、Deco ...
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220 ...
每一个程序员都有改变世界的梦想,他们不甘平凡,他们想要make a difference,他们想要创立世界上最cool的公司,那具体该如何做呢?风靡全球的《rework》将告诉你答案
37signals是一家很特别的公司,他们有很独特的理念。虽然他们的团队只有16人,但他们的几个产品每年都会带来相当可观的利润。他们反对风险投资,反对扩大规模,反对堆砌功能。如果让我用一个词形容他们的话,那就是maverick,在某种程度上他们与乔布斯有相似之处。除了他们的产品外,他们还有一些byproduct: 一个很著名的博客:Signal vs Noise,全世界都为之疯狂的web框架ruby on rails,还有2本书:《getting real》《rework》,今天我就要介绍一下《rework》这本书。
用一个词形容《rework》这本书就是“短小精悍”,只有130页,你只需要3-4个小时就可以读完,而且书中每一个观点都配了一张图,看起来很轻松,一点都不乏味。我们说“字如其人”,同样的道理,这本书很鲜明反映了37signals这家公司的特点。废话不多说了,我把每个观点都通用一句汉语总结出来了 ...
Spring 的骨骼架构Spring 总共有十几个组件,但是真正核心的组件只有几个,下面是 Spring 框架的总体架构图:
图 1 .Spring 框架的总体架构图
从上图中可以看出 Spring 框架中的核心组件只有三个:Core、Context 和 Beans。它们构建起了整个 Spring 的骨骼架构。没有它们就不可能有 AOP、Web 等上层的特性功能。下面也将主要从这三个组件入手分析 Spring。
Spring 的设计理念前面介绍了 Spring 的三个核心组件,如果再在它们三个中选出核心的话,那就非 Beans 组件莫属了,为何这样说,其实 Spring 就是面向 Bean 的编程(BOP,Bean Oriented Programming),Bean 在 Spring 中才是真正的主角。
Bean 在 Spring 中作用就像 Object 对 OOP 的意义一样,没有对象的概念就像没有面向对象编程,Spring 中没有 Bean 也就没有 Spring 存在的意义。就像一次演出舞台都准备好了但是却没有演员一样。为什么要 Bean 这种角色 Bean 或者为何在 Sp ...


