- 浏览: 22898 次
最新评论
文章列表
jvm GC日志详解
- 博客分类:
- jvm
首先我们来介绍什么事GC:
Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露和溢出的问题,也不需要像C程序员那样战战兢兢。这是因为在Java虚拟机中,存在自动内存管理和垃圾清扫机制。概括地说,该机制对JVM(Java Virtual Machine)中的内存进行标记,并确定哪些内存需要回收,根据一定的回收策略,自动的回收内存,永不停息(Nerver Stop)的保证JVM中的内存空间,防止出现内存泄露和溢出问题。
在Java语言出现之前,就有 ...
Java模板入口:
Window->Preference->Java->Code Style->Code Template
然后展开Comments节点就是所有需设置注释的元素。
现就每一个元素逐一介绍:
文件(Files)注释标签:
/** * @Title::${file_name} * @Package :${package_name} * @Description: ${todo}* @author: 例如(shiziqiu) * @date: ${date} ${time} * @version : 1.0 ...
java 之 for
常用的几种for循环删除添加数据的几种方案比较:
List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3);
第一种:并发操作,需要对 Iterator 对象加锁。
Iterator<Integer> iterator = list.iterator(); while (iterator.hasNext()) { Integer i = it ...
一、spring cloud简介
spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等。
二、创建服务注册中心
在这里,我们需要用的的组件上Spring Cloud Netflix的Eureka ,eureka是一个服务注册和发现模块。
2.1 首先创建一个maven主工程。
2.2 然后创建2个model工程:一个model工程作为服务注册中心,即Eureka Server,另一个作为Eureka Client。
下面以创建server为例子,详细说 ...
Activate:可以被框架中自动激活加载扩展,此Annotation用于配置扩展被自动激活加载条件。
Activate,看起来有点不好理解,它的意思是条件激活,用户通过group和value配置激活条件。被activate注解的扩展点在满足某种条件时会被激活,它一般用来配合filter和Invokelistener,声明他们的使用场景。我们先来看看源码
首先你对的dubbo的 SPI机制有一定的了解和研究,
我们看看他的用法,来看一个测试例子的流程:
对应的配置文件:
接口
@SPI("order1")public interface Activ ...
TpsLimitFilter:
我们这里以TpsLimitFilter为例来说明Filter的实现。TpsLimitFilter用于限制远程调用的TPS,即每秒可以执行多少次远程调用。其源码如下: 首先,根据Activate注解可以看到,该Filter的激活条件是服务提供方,并且URL中配置了名为Constants.TPS_LIMIT_RATE_KEY的参数。该Filter持有一个TPSLimiter的实例,然后调用其isAllowable方法判断一次调用是否被允许。
TPSLimiter是一个接口,只有一个isAllowable方法,参数是URL和调用上下文。
代码如下
...
springboot 简介:
spring boot 它的设计目的就是为例简化开发,开启了各种自动装配,你不需要在写各种配置文件,引入相关 的依赖就能迅速搭建起一个web工程。它采用的是建立生产就绪的应用程序观点,优先于配置的惯例。
why:
可能你的项目还在使用ssm或者ssh 架构的项目,当你使用了springboot 搭建项目时,你会觉得一切变得简单了,例如配置变的简单了、coding变的简单了,部署变的简单了,开发速度大大提高了。本系列教程全部用spring sts作为开发工具。
搭建工程:
jdk1.8、maven3.0+、s ...
git clone
获取一个url对应的远程Git 仓库,
一般的格式是git clone [url].
git pull 拉取仓库文件
git pull origin repo 拉取repo分支文件
git status
查询状态
git add
提交新文件或者修改到缓冲区
git add file[file...] 单个或者多个文件
git add -u:将文件的修改、文件的删除,添加到暂存区。
git add .:将文件的修改,文件的新建,添加到暂存区。
git add -A:将文件的修改,文件的删除,文件的新建,添加到暂存区。
第一次提交需要配 ...
首先来介绍下Adaptive注解:
@Adaptive:为生成Adaptive实例提供参数,作用域在类或方法上;
Adatpive,字面意思是个适配,但其实是个代理,它的意思是适配合适的对象处理请求。类似jdk的动态代理,因为dubbo底层会大量使用反射,出于性能考虑会默认使用javassist字节码编译生成一个adaptive拦截所有请求,然后由它基于策略动态委派合适的provider进行处理。 SPI接口会动态编译出一个adaptive,用于适配provider处理请求。用户可以自己实现一个adaptive,只需要对某个provider打上@adaptive即可,例如Dubb ...
7、 Dubbo与spring融合
- 博客分类:
- dubbo
spring中bean的定义可以通过编程,可以定义在properties文件,也可以定义在通过xml文件中,用的最多的是通过xml形式,由于xml格式具有很好的自说明便于编写及维护。对于xml的文档结构、数据定义及格式验证可以通过DTD和Schema, 在spring2.0之前采用的是DTD,在spring2.0之后采用Schema。使用Schema方式使得spring更加便于与第三方进行集成以及第三方可以提供更简单更便于使用的个性化配置方式。对于XmlSchema具体知识这里不做介绍,但是Schema中有个重要的概念命名空间(namespace)必须要提一下,spring就是利用它来做第三 ...
下面我就介绍下每个目录:
agent--->主要是Serviceability Agent的实现。
make--->用来build出HotSpot的各种配置文件。
src------>HotSpot VM的源代码。
|
|
cpu---->CPU相关代码。
os----->操作系统相关的代码。
os_cpu--->操作系统 + CPU组合的相关代码。
share ---->平台无关的共通代码。
...
JavassistProxyFactory:利用字节码技术来创建对象
public <T> T getProxy(Invoker<T> invoker,Class<?>[] interfaces) {
return (T) Proxy.getProxy(interfaces).newInstance(newInvokerInvocationHndler(invoker));
}
看似跟jdk生成代理一样, 其实这里的Proxy类不是jdk中自带那个生成代理对象的类是com.alibaba.dubbo.common.bytecode ...
4、 Dubb代理之接口定义
- 博客分类:
- dubbo
代理模式这里不再这里介绍,dubbo中使用这种模式,如: dubbo服务的消费端获取的就是对远程服务的一个代理。Dubbo由代理工厂ProxyFactory对象创建代理对象。
ProxyFactory 接口定义
@SPI("javassist")
public interface ProxyFactory {
@Adaptive({Constants.PROXY_KEY})
<T> T getProxy(Invoker<T>invoker) throws RpcException;
@Adaptive({Consta ...
3、Dubbo之动态编译
- 博客分类:
- dubbo
我们运行的Java代码,一般都是编译之后的字节码。Dubbo为了实现基于spi思想的扩展特性,特别是能够灵活添加额外功能,对于扩展或者说是策略的选择这个叫做控制类也好设配类也好的类要能够动态生成。当然对应已知需求如Protocol, ProxyFactory他们的策略选择的设配类代码dubbo直接提供也无妨,但是dubbo作为一个高扩展性的框架,使得用户能够添加自己的需求,根据配置动态生成自己的设配类代码,这样就需要在运行的时候去编译加载这个设配类的代码。下面我们就是来了解下Dubbo的动态编译。
编译接口定义:
@SPI("javassist")
public ...
dubbo
SPI接口定义
dubbo如何定义SPI
@Documented@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.TYPE})
public @interface SPI {
/** * 缺省扩展点名。 */
String value() default ""; //指定默认的扩展点 ...