摘要: 示例: GCEasy的使用 阅读全文
posted @ 2018-04-20 22:43 Emyin 阅读(1588) 评论(0) 推荐(0) 编辑
摘要: 常见的垃圾回收算法: 1. 引用计数法 : 无法解决循环引用的问题 2.标记清除算法:从根节点开始标记引用的对象,未被标记引用标记的对象可以被清除。 解决了循环引用的问题。但是效率较低,标记和清除都要遍历所有对象。GC时,需要停止应用程序(否则可能导致标记不准确)。碎片化严重。 3.标记压缩算法:标 阅读全文
posted @ 2018-04-20 22:18 Emyin 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 内存溢出定位与分析 1. 模拟内存溢出,向集合中添加极大数量的字符串 2. 运行参数: -Xms8m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError 结果: 定位死锁问题 将dump文件导入到MAT中分析 发现服务器的CPU的负载突然增 高了、出现了死锁、死循环等,我们 阅读全文
posted @ 2018-04-20 21:43 Emyin 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 面向对象六大设计原则 开闭原则(Open Closed Principle) 核心思想是:对扩展开放,对修改关闭。 也就是说,对已经使用的类的改动是通过增加代码进行的,而不是修改现有代码。 单一职责原则(Single Responsiblity Principle) 其实就是开发人员经常说的”高内聚 阅读全文
posted @ 2018-04-20 18:46 Emyin 阅读(291) 评论(0) 推荐(0) 编辑
摘要: ./rabbitmqctl add_user admin1 admin1 ./rabbitmqctl set_user_tags admin1 administrator ./rabbitmqctl set_permissions -p "/" admin1 ".*" ".*" ".*" 测试用例: 阅读全文
posted @ 2018-04-20 18:32 Emyin 阅读(2725) 评论(0) 推荐(0) 编辑
摘要: @Api:修饰整个类,描述Controller的作用 @ApiOperation:描述一个类的一个方法,或者说一个接口 @ApiParam:单个参数描述 @ApiModel:用对象来接收参数 @ApiModelProperty:用对象接收参数时,描述对象的一个字段 @ApiResponse:HTTP 阅读全文
posted @ 2018-04-20 18:30 Emyin 阅读(543) 评论(0) 推荐(0) 编辑
摘要: 1. nginx是一个轻量级高性能基于http的反向代理服务器和web服务器。 2. 正向代理代理的是客户端,反向代理代理的是服务端 3. 特点: 高并发 : 可以支持5-10万的并发量 低消耗:官方测试,10000个非活跃连接仅消耗2.5M内存 高可用:具有多个工作进程worker,某个出现问题, 阅读全文
posted @ 2018-04-20 18:29 Emyin 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 解析顺序 mysql从左->右执行where条件,oracle相反 Cross Join : 笛卡尔积 Inner Join : 等值连接 Left join 或(left outer join) : 左外连接 right join或(right outer join) : 右外连接 外连接分主从表 阅读全文
posted @ 2018-04-20 18:25 Emyin 阅读(118) 评论(0) 推荐(0) 编辑
摘要: Srping版Dubbo集成中文地址:https://dubbo.gitbooks.io/dubbo-user-book/content/preface/background.html SpringBoot版本Dubbo集成中文地址:https://github.com/alibaba/dubbo- 阅读全文
posted @ 2018-04-20 18:23 Emyin 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 自动装箱与自动拆箱 首先要提到的便是 Java 的自动装箱(auto-boxing)和自动拆箱(auto-unboxing)。 我们知道,Java 语言拥有 8 个基本类型,每个基本类型都有对应的包装(wrapper)类型。 之所以需要包装类型,是因为许多 Java 核心类库的 API 都是面向对象 阅读全文
posted @ 2018-04-20 18:22 Emyin 阅读(351) 评论(0) 推荐(0) 编辑
摘要: 在 Java 程序中,我们可以利用 synchronized 关键字来对程序进行加锁。它既可以用来声明一个 synchronized 代码块,也可以直接标记静态方法或者实例方法。 synchronized是利用锁(对象锁,类锁)的机制来实现同步的。 锁机制有如下两种特性: 互斥性:即在同一时间只允许 阅读全文
posted @ 2018-04-20 17:47 Emyin 阅读(539) 评论(0) 推荐(0) 编辑
摘要: 我们先来看一个反常识的例子。 这里我定义了两个共享变量 a 和 b,以及两个方法。第一个方法将局部变量 r2 赋值为 a,然后将共享变量 b 赋值为 1。第二个方法将局部变量 r1 赋值为 b,然后将共享变量 a 赋值为 2。请问(r1,r2)的可能值都有哪些? 在单线程环境下,我们可以先调用第一个 阅读全文
posted @ 2018-04-20 17:43 Emyin 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 1. 什么是分代,为什么要分代? 如果没有进行分代,新创建的对象和生命周期很长的对象放在一起,每次垃圾回收就需要遍历所有的对象,开销太大,严重影响GC效率。 分代后,新创建的对象会在新生代中分配内存,经过多次回收仍存活的对象放在老年代中。新生代中的对象存活时间短,只需要在新生代中进行频繁GC。老年代 阅读全文
posted @ 2018-04-20 17:31 Emyin 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 为什么要垃圾回收? 程序运行必然要申请内存资源,如果不再使用的对象一直占用内存资源必将导致内存溢出 什么样的对象需要被GC? 判断算法:计数器法,可达性分析算法 引用计数算法 它的做法是为每个对象添加一个引用计数器,用来统计指向该对象的引用个数。一旦某个对象的引用计数器为 0,则说明该对象已经死亡, 阅读全文
posted @ 2018-04-20 17:18 Emyin 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 在运行过程中,每当调用进入一个 Java 方法,Java 虚拟机会在当前线程的 Java 方法栈中生成一个栈帧,用以存放局部变量以及字节码的操作数。这个栈帧的大小是提前计算好的,而且 Java 虚拟机不要求栈帧在内存空间里连续分布。当退出当前执行的方法时,不管是正常返回还是异常返回,Java 虚拟机 阅读全文
posted @ 2018-04-20 13:21 Emyin 阅读(688) 评论(0) 推荐(1) 编辑
摘要: 创建对象的多种方法:new语句,反射,clone, 反序列化 等 其中,Object.clone 方法和反序列化通过直接复制已有的数据,来初始化新建对象的实例字段。,而 new 语句和反射机制,则是通过调用构造器来初始化实例字段。 构造器 1. 如果一个类没有定义任何构造器的话, Java 编译器会 阅读全文
posted @ 2018-04-20 12:25 Emyin 阅读(2087) 评论(0) 推荐(0) 编辑
摘要: 当声明 synchronized 代码块时,编译而成的字节码将包含 monitorenter 和 monitorexit 指令。上面的字节码中包含一个 monitorenter 指令以及多个 monitorexit 指令。这是因为 Java 虚拟机需要确保所获得的锁在正常执行路径,以及异常执行路径上 阅读全文
posted @ 2018-04-20 12:01 Emyin 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 前不久,“虚拟机”赛马俱乐部来了个年轻人,标榜自己是动态语言,是先进分子。 这一天,先进分子牵着一头鹿进来,说要参加赛马。咱部里的老学究 Java 就不同意了呀,鹿又不是马,哪能参加赛马。 当然了,这种墨守成规的调用方式,自然是先进分子所不齿的。现在年轻人里流行的是鸭子类型(duck typing) 阅读全文
posted @ 2018-04-20 11:55 Emyin 阅读(2677) 评论(0) 推荐(0) 编辑