`
geeksun
  • 浏览: 952890 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
1.  需求背景 性能调优阶段,需要找出执行时间比较长的方法,针对这些方法进行调优。   2.  可行方案 一种是传统的在每个方法前后获取System.currentMis(),然后得到方法的执行时间。 这种方式的缺点是方法多会写很多耦合代码,而且不可重用,测试完需要删掉。   另一种使用AOP监控方法的前后点,监控方法的执行时间,比较优雅且无侵入。 可行的方案之一是使用 Around Advice, 环绕通知可在方法执行前后做一些操作。   AOP,面向切面编程,Aspect Oriented Programming, 可以通过预编译方式和运行期动态代理实现在不修 ...
Thread.join(): 用来让主线程等待子线程执行完毕再执行下面的操作。 顾名思义,join会让子线程加入MainThread.   适用场景: 主线程需要等子线程执行完毕后,再执行下一步操作。 比如:主线程需要统计子线程的执行时间,或需要统计子线程的执行结果等。   join() 的作用是等待该线程终止,即该线程存活的时候一直等待,等待线程死亡,好残忍 。。 JDK的源码 join()方法在线程isAlive()为true的时候一直轮询,直到变为die状态。   所以
1.  找出占内存比较大的内存的PID(使用top命令) 比如找出PID为8763   2.  查看当前Java进程创建的活跃对象数目和占用内存大小 jmap -histo:live $pid > jmap.log   比如查看24102进程的存活对象: jmap -histo:live 24102 | more 例如: ...
类的初始化,包括生成对象的初始化和类的静态块的实例化。   初始化触发的时机: 类被直接引用(主动引用)的时候。   主动引用 主动引用的情形有: 1. 使用new关健字实例化对象 2. 使用类的静态变量 3. 使用类的静态方法 4. 使用反射机制调用上述操作 5. 程序入口 (调用main方法)     初始化顺序是: 静态块 ---> 非静态块 ---> 构造函数。   如果有超类,则初始化顺序是: 父类静态块--->子类静态块--->父类非静态块--->父类构造函数--->子类非静态块--->子类构造函数   ...
类的加载属于Java中的JVM的底层工作。   类加载包括类的生命周期中加载、连接、初始化三个阶段。 在加载阶段,JVM在做什么工作? 简单地说,就是找到需要加载的类并把类的信息加载到jvm的方法区,然后在堆区实例化一个java.lang.Class对象,作为方法区中这个类的信息的入口。   当执行Class中的下列代码的时候,会做下面的事情: User user = new User();   1. 在方法区(Method Area)中找User的class信息,如果方法区存在User的class信息,则根据User的class信息构造出User对象,存入heap中,并把 ...
Java中的类对象也属于基本部分,类对象即是Class信息对象,当类加载器(ClassLoader)加载类信息的时候,生成Class对象,Class对象是Java对象的模板,每个Java对象都是基于Class信息生成新的对象。   众所周知,Class信息存在方法区(Method Area),或者称为永久代(Perm区),Class对象生成后和其他Java对象一样,也存放在堆(Heap)里。   获取Class对象的几路方式: 1. Class类的静态方法: Class.forName("${className}"), className应该是全称,即包括Cla ...
反射机制是Java语言中很重要的特性,是在运行时获知对象信息,并可在运行时操作对象的机制。 反射(Reflect), 顾名思义,通过Java对象的Class信息,可以逆向生成对象、探知运行时的对象信息、调用对象方法,一种可以反向作用的机制。   反射的用途: 1. 在运行时获取任意对象所属的类对象  Class<?> clazz = Class.forName(String className);   2. 在运行时构造任意类的对象  Object obj = clazz.newInstance();   3. 在运行时获取任意类所具有的成员变量和方法  f ...
策略模式,顾名思义,是使用不同的策略解决问题的模式,孙悟空有七十二变,孙子兵法有三十六计,这里的七十二变和三十六计里的每一个变法和计谋,都是一种策略。需要当事者根据具体的情形,去做选择变成什么和使用哪一个计谋。   1. 策略模式类图   2. 策略模式的组成: 抽象策略基类、策略实现类、调用者。 基类中有抽象的算法,实现类实现具体和算法行为,调用者类持有策略接口的引用,可以灵活调用不同实现类的策略。     3. design example 以外出旅行为例,有各种不同的旅行方式。 策略抽象基类 /** * 策略抽象基类, 具有抽象行为接口 */ publ ...
ThreadLocal字段意义为线程本地,其实表达不够准确,应该为线程本地变量或线程局部变量更合适一些。 ThreadLocal 常用来存储每个线程的私有信息,相当于是线程组的私有变量容器,每个变量值为单一线程私有,不被其他线程共享。 ThreadLocal类的方法解析:   protected T initialValue() { return null; } initialValue方法用来初始化线程变量容器的数据,相当于调用了set方法设置线程实例与变量的关联关系,此方法在需要初始化时可以被覆盖, 实现具体的初始化数据逻辑。   ...
前言 数据库都是有事务的,事务的不同级别,对应数据操作的不同级别安全性。本文以MySql为例介绍一下数据库的事务隔离级别。   事务定义 事务是将数据从一种状态改变到另一种状态。 事务隔离级别是事务看别的事务修改的数据的可见程度。   事务的可见性 脏读 (Dirty read): 一个事务读取到另一个事务还没有提交的数据,又叫无效数据读取。 Example: 事务一对数据进行了增删改等写操作,但还未提交,事务二可以读取到事务一还未提交的数据。这时候事务一Rollback了,事务二读到的就是脏数据。   不可重复读 (Non-repeatable read):在同一个事 ...

聊聊缓存

缓存在应用中经常可以遇到,大的可以表现为分布式缓存服务和外部的缓存服务应用,小的可以使用应用级的缓存。 缓存的主要作用,一是可以加快热点数据访问速度,二是保护后端的数据库不被突然增长的压力压垮,三是减少计算,是以空间换时间的典型应用。   从分类上来说,缓存可以分为外部缓存服务和应用缓存。 外部缓存服务可以表现为MemCache、Redis、MongoDB等。 应用缓存可以使用HashMap自实现,也可以使用Guava的缓存Cache。   缓存的失效策略: 1. Timeout算法,设置有效期,超时失效。 2. LRU(Least Recently Used)算法,最近最 ...
       使用MyBatis做数据处理框架时,操作大量数据的插入、更新等耗时的工作时,可以使用批量处理来提高效率,MyBatis的批量处理主要使用foreach标签来实现。           foreach 元素的功能是非常强大的,它允许你指定一个集合,声明可以用在元素体内的集合项和索引变量。它也允许你指定开闭匹配的字符串以及在迭代中间放置分隔符。这个元素是很智能的,因此它不会偶然地附加多余的分隔符。           注意: 你可以将任何可迭代对象(如列表、集合等)和任何的字典或者数组对象传递给foreach作为集合参数。当使用可迭代对象或者数组时,index是 ...
       前言        在软件的设计架构中,心跳检测很重要,像在dubbo service、web api invoke中,需要consumer端感知provider端是否存活,不存活则切换调用另一个provider。          一、什么是心跳检测        判断对方(设备,进程或其它网元)是否正常动行,一般采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经当掉。用于检测TCP的异常断开。        基本原因是服务器端不能有效的判断客户端是否在线也就是说,服务器无法区分客户端是长时间在空闲,还是已经掉线的情况。所谓的心跳包就是客 ...
Dubbo是一个服务治理框架,对分布式服务的管理和治理、监控有较好的实现。   本案举例说明Dubbo与Spring的配合使用: 1.  Maven引入dubbo的配置 <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> </dependency& ...
logback支持异步记录日志,这样可加快程序的主流程处理速度,提高接口的qps。 logback异步记录日志的原理,也是使用一个缓冲队列,当缓冲数量到一定阀值时,才把日志写到文件里。   下面是配置示例: <?xml version="1.0" encoding="utf-8"?> <configuration scan="false"> <property name="outPattern" value="[%p] %d{yyyy-MM-dd H ...
Global site tag (gtag.js) - Google Analytics