`
benx
  • 浏览: 273325 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
volatile, 用更低的代价替代同步 为什么 使用volatile比同步代价更低? 同步的代价, 主要由其覆盖范围决定, 如果可以降低同步的覆盖范围, 则可以大幅提升程序性能. 而volatile的覆盖范围仅仅变量级别的. 因此它的同步代价很低. volatile原理是什么?volatile的语义, 其实是告诉处理器, 不要将我放入工作内存, 请直接在主存操作我.(工作内存详见java内存模型) 因此, 当多核或多线程在访问该变量时, 都将直接 操作 主存, 这从本质上, 做到了变量共享. volatile的有什么优势? 1, 更大的程序吞吐量2, 更少的代码实现多线程3, 程 ...
内存模型 (memory model) 内存模型描述的是程序中各变量(实例域、静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存和从内存取出变量这样的低层细节. 不同平台间的处理器架构将直接影响内存模型 ...
首先我们先看看token源代码 package org.apache.struts.util; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; public class TokenProcessor { private static TokenProcessor instance = ...
一、对象缓存 1、Cache操作类 import java.util.Date; import com.opensymphony.oscache.base.NeedsRefreshException; import com.opensymphony.oscache.general.GeneralCacheAdministrator; public class BaseCache extends GeneralCacheAdministrator { private int refreshPeriod; //过期时间(单位为秒); priv ...
      Oscache的集群功能没有完全实现,只是实现了flush的接口,需要用户自己去实现它的其它集群接口(不知道他是出于什么考虑). 如果采用Jgroups组件,则需要继承自JavaGroupsBroadcastingListener抽象类,继承它的handleClusterNotification方法,完成集群其它功能的实现: 注意:集群中传递的对象必须实现Serializable接口。 public class JavaGroupsBroadcastingListenerImpl extends JavaGroupsBroadcastingListen ...
OSCache标记库由OpenSymphony设计,它是一种开创性的JSP定制标记应用,提供了在现有JSP页面之内实现快速内存缓冲的功能。OSCache是个一个广泛采用的高性能的J2EE缓存框架,OSCache能用于任何Java应用程序的普通的 缓存解决方案。OSCache有以下特点:缓存任何对象,你可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存。 拥有全面的API--OSCache API给你全面的程序来控制所有的OSCache特性。 永久缓存--缓存能随意的写入硬盘,因此允许昂贵的创建(expensive-to-create)数据来保持缓存,甚至能让应用重启。 支 ...

模拟拦截器

    博客分类:
  • java
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.List; //方式一 利用递归 public abstract class ActionInvocation { private static List<In ...
  ORACLE 中 SQL语句优化总结     (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表. 
  Head First中的设计原则总结: 一、封装变化二、多用组合,少用继承三、针对接口编程,不针对实现编程四、为交互对象之间的松耦合设计而努力五、类应该对扩展开放,对修改关闭六、依赖抽象,不要依赖具体类七、只和朋友交谈八、别找我,我会找你九、类应该只有一个改变的理由   开-闭原则(open-closed principle或OCP) 所谓开-闭原则:就是在设计模块时,应当使这个模块可以在不被修改的前提下被扩展,也就是说对扩展开放,对修改关闭 那么如何实现开-闭原则呢?
import java.io.File; import java.io.PrintStream; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; import java.util.List; import sun.misc.Launcher; public class ClassLoaderUtil { ...
  PRE_PAGE_SGA      oracle实例启动时,会只载入各个内存区最小的大小。而其他 SGA内存只作为虚拟内存分配,只有当进程 touch 到相应的页时,才会置换到物理内存中。但我们也许希望实例一启动后,所有 SGA都分配到物理内存。这时就可以通过设置 PRE_PAGE_SGA参数来达到目的了。     这个参数的默认值为FALSE,即不将全部SGA置入物理内存中。当设置为TRUE时,实例启动会将全部SGA置入物理内存中。它可以使实例启动达到它的最大性能状态,但是,启动时间也会更长(因为为了使所有SGA都置入物理内存中,oracle进程需要touch所有的SGA页)。 ...
  这是网上提供的方法:   .Tar.gz   解压:Tar zxvf FileName.Tar.gz   压缩:Tar zcvf FileName.Tar.gz DirName       大致总结了一下
Linux安装JDK步骤   1. 先从网上下载jdk(jdk-1_5_0_02-linux-i586.rpm) ,推荐SUN的官方网站www.sun.com,下载后放在/home目录中,当然其它地方也行。 进入安装›
RPM 的介绍和应用 作者:北南南北来自:LinuxSir.Org提要:RPM 是 Red Hat Package Manager 的缩写,原意是Red Hat 软件包管理;本文介绍RPM,并结合实例来解说RPM手工安装、查询等应用; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++正文:++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++RPM 是 Red Hat Package Manager 的缩写,本意是Red Ha ...
1、基本的数据库信息 版本信息: select * from v$version; 数据库信息: Select * from v$database; 2、自动工作量仓库自动工作量(AWR)的基本信息 AWR 使用多少空间? Select occupant_name, occupant_desc, space_usage_kbytes from v$sysaux_occupants where occupant_name like '%AWR%'; 系统上最原始的 AWR 信息是什么? select dbms_stats.get_stats_histor ...
Global site tag (gtag.js) - Google Analytics