`
文章列表
介绍:www.javassist.org/ javassist、ASM 对比 1、javassist是基于源码级别的API比基于字节码的ASM简单。 2、基于javassist开发,不需要了解字节码的一些知识,而且其封装的一些工具类可以简单实现一些高级功能。比如HotSwaper。 3、ASM比javassist性能更快,灵活行也较高。 4、javassist提供者动态代理接口最慢,比JDK自带的还慢 性能对比  Framework        First time       ...
下面是在利用JDK的Instrument来编写调试工具的时候出现的一些问题总结   1、java.io.Console 类的读取操作将会阻塞掉写入操作,造成写入操作不能异步进行。 原因是该类中加入了读写锁。代码如下: public String readLine(String fmt, Object ... args) { String line = null; synchronized (writeLock) { synchronized(readLock) { if (fmt ...
前言      在看Btrace源码的时候,了解到一些陌生的启动命令参数,例如-Xbootclasspath等,之前也曾遇到过,但并没有去进一步全面了解,在此则进行介绍。 简介      Java 的启动参数包括标准的参数(运行环境参数)和非标准的参数(JVM实现支持的参数)。 标准的参数 参数 描述                                                                   -client client模式启动 -server Service模式启动 ...
  前言      在看Btrace相关源代码的时,才认识到MANIFEST.MF是有很大用途的,以前对jar文件没多大了解,现在有空也整理下相关的资料。   Jar文件简介          Jar文件的本质是zip 文件,其中包含了META-INFO文件夹。Jar文件可以用jar工具或者java.util.jar API 来创建。Jar的文件名没有任何限制。      Jar文件不单仅仅用来压缩class文件或者资源文件,还可以用来限制或者扩展应用程序。如果jar文件中含有META-INFO文件夹,它常常用来存储包或者配置文件,包括安全、版本、扩展、组件。     ...
mysqld程序--目录和文件   basedir = path #使用给定目录作为根目录(安装目录)。 character-sets-dir = path #给出存放着字符集的目录。 datadir = path #从给定目录读取数据库文件。 pid-file = filename #为mysqld程序指定一个存放 ...
    多线程设计的目的是为了更多的榨取服务器硬件的性能,但是线程仍然会给运行时带来一定程度的开销。上下文切换——当调度程序临时挂起当前运行的线程时,另 外一个线程开始运行——这在多个线程组成的应用程序中是很频繁的,并且带来巨大的系统开销:保存和恢复线程执行的上下文,离开执行现场,并且 CPU  的时间会花费在对线程的调度而不是运行上。当线程共享数据的时候,它们必须使用的同步机制,这个机制会限制编译器的优化,能够清空或锁定内存和高速缓存,并在共享内存的总线上创建同步通信。       无论何时,只要有多余一个的线程访问给定的状态变量,而且其中某个线程会写入该变量,此时必须使用同 ...
   在项目中用到了memcached 做缓存,在实际应用中发现spymemcached 客户端在网络状态比较差是(大概延迟60ms左右)时的读取超时现象比较严重,而且造成应用的内存被消耗尽了(用jmap 查看过,发现memcache 的客户端用到的异步线程类占用很大的内存,估计是由于超时不断创建的缘故)。于是便换了http://www.whalin.com/memcached 这个的客户端。。在更换过程中也出现了一些问题,由于是晚上才发现,害得我晚上因为这事睡都睡不着。。。想好一些调试的办法,然后在明早进行测试。。   问题一:当key 为中文的时候,value取错了。    遇到这 ...
   LinkedBlockingQueue类 一个基于已链接节点的、范围任意的 blocking queue。此队列按 FIFO(先进先出)排序元素。队列的头部 是在队列中时间最长的元素。队列的尾部 是在队列中时间最短的元素。新元素插入到队列的尾部,并且队列获取操作会获得位于队列头部的元素。链接队列的吞吐量通常要高于基于数组的队列,但是在大多数并发应用程序中,其可预知的性能要低。 可选的容量范围构造方法参数作为防止队列过度扩展的一种方法。如果未指定容量,则它等于 Integer.MAX_VALUE。除非插入节点会使队列超出容量,否则每次插入后会动态地创建链接节点。   ...
      最近有点想研究下java.util.concurrent 包下的一些类中的实现,在现实中也对这包里的类应用不少,但都没怎么去深入理解,只是听说里面的实现在高并发中有不错的性能。。接下将对里面的几个比较常用的类的源码进行分析。。      ConcurrentHashMap类    研究源码时,我一般喜欢从实际的应用中去一步步调试分析。。这样理解起来容易很多。      实际应用:   ConcurrentMap<String, String> map = new ConcurrentHashMap<String, String>() ...
一、创建模式 1、工厂模式 工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪个类。   工厂模式有以下几种形态:   (1)简单工厂(Simple Factory) ...
  第二部分 面向对象的设计原则   如何同时提高一个软件系统的可维护性(Maintainability)和可复用性(Reuseability)是面向对象的设计要解决的核心问题。 一个好的系统设计应该有如下的性质:可扩展性(Extensibility)、灵 ...
  1.Mysql 的逻辑架构 每个客户端连接在服务器进程中都拥有自己的线程 , 每个连接所属的查询都会在指定的某个单独线程中完成,这些线程轮流运行在某个 CPU 核心或者 CPU 上。服务器负载缓存线程,因此不需要为每个新的连接重建或撤销线程。   Mysql 会解析查询,并创建一个内部数据结构(解析树),然后对其进行各种优化。其中包括重写查询,决定查询的读表顺序,以及选择须使用的索引等。用户可以通过特殊的关键字给优化器传递各种提示( Hint ),影响它的决策过程。 ...
    很久没写博客了,最近也看了不少书,看完了好像印象不深,还是回头写写记录下吧。。   1.TCP机制     TCP提供了可靠性 ,当TCP向另外一端发送数据时,它要求对端返回一个确认。如果没有收到确认,TCP就自动重传数据并等待更长的时间。在数次重传失败后,TCP才放弃,如此在尝试发送数据上所花的总时间一般为4-8分钟(依赖具体实现)。     TCP含有用于动态估算客户和服务器之间的往返时间(round-trip time,RTT)的算法 ,以便它知道等待一个确认需要多少时间。     TCP通过给其中每个字节关联一个序列号对所发送的数据进行排序。 接受端TCP将先根据它 ...
1. 配置文件    Log4J配置文件的基本格式如下: #配置根Logger log4j.rootLogger = [ level ] , appenderName1 , appenderName2 , … #配置日志信息输出目的地Appender log4j.appender.appenderName = fully.qualified.name.of.appender.class log4j.appender.appenderName.option1 = value1 … log4j.appender.appenderName.optionN = valueN #配置日 ...
   由于项目以后可能会用到关于数据库备份,主要是用主从复制,来实现数据库的读写分离等功能。在这几天对mysql 的主从配置研究了下,我在电脑上配置了两个mysql 数据,配置还真有点麻烦。。关键还是对mysql 的数据库的了 ...
Global site tag (gtag.js) - Google Analytics