自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

转载 JIT 编译器及性能调优

JIT 简介JIT 是 just in time 的缩写, 也就是即时编译编译器。使用即时编译器技术,能够加速 Java 程序的执行速度。下面,就对该编译器技术做个简单的讲解。首先,我们大家都知道,通常通过 javac 将程序源代码编译,转换成 java 字节码,JVM 通过解释字节码将其翻译成对应的机器指令,逐条读入,逐条解释翻译。很显然,经过解释执行,其执行速度必然会比可执行的二进制字...

2019-06-14 09:15:26 1288

转载 Full GC (Ergonomics) 产生的原因

发生Full GC,有很多种原因,不仅仅是只有Allocation Failure。还有以下这么多:#include "precompiled.hpp"#include "gc/shared/gcCause.hpp"const char* GCCause::to_string(GCCause::Cause cause) { switch (cause) { c...

2019-06-12 14:49:24 21290 1

转载 JVM新生代为什么要有Survivor区

1 为什么要有Survivor区先不去想为什么有两个Survivor区,第一个问题是,设置Survivor区的意义在哪里?堆内存分类如果没有Survivor,Eden区每进行一次Minor GC,存活的对象就会被送到老年代。老年代很快被填满,触发Major GC(因为Major GC一般伴随着Minor GC,也可以看做触发了Full GC)。老年代的内存空间远大于新生代,进行一次Ful...

2019-06-12 12:47:02 492

原创 nginx与服务器建立长连接的工作总结

一、 问题发现在公司服务端到上发现上万的TIME_WAIT链接。而在Nginx的服务器上也发现了类似的大量TIME_WAIT。也就是与Nginx服务器主动断开了与客户端的链接。问题产生的主要原因服务器产生大量TIME_WAIT的原因,猜测是其主动断开链接的次数太多,需要在TIME_WAIT状态等待2ML的时间。所以猜测问题是Nginx服务器到公司服务端的链接是短连接。据了解,...

2019-06-05 14:45:55 1378

转载 nginx优化——包括https、keepalive等

一、nginx之tcp_nopush、tcp_nodelay、sendfile1、TCP_NODELAY你怎么可以强制 socket 在它的缓冲区里发送数据?一个解决方案是 TCP 堆栈的 TCP_NODELAY选项。这样就可以使缓冲区中的数据立即发送出去。Nginx的 TCP_NODELAY 选项使得在打开一个新的 socket 时增加了TCP_NODELAY选项。但这时会造成一种情...

2019-06-05 13:29:12 163

原创 Nginx配置详解

一、Nginx是什么?Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。二、Nginx的重要配置日志access.log具体每项代表的意思:$remote_addr 客户端地址 211.28.65.25...

2019-06-03 23:44:35 99

原创 面对大量的实时数据传输代替HTTP采用的TCP长连接的方案

一、为什么要采用长连接要弄清楚这个问题,我们先来看一看TCP连接建立的一些过程。建立连接三次握手,断开连接四次挥手,如图:慢启动最初的TCP的实现方式是,在连接建立成功后便会向网络中发送大尺寸的数据包,假如网络出现问题,很多这样的大包会积攒在路由器上,很容易导致网络中路由器缓存空间耗尽,从而发生拥塞。因此现在的TCP协议规定了,新建立的连接不能够一开始就发送大尺寸的数据包,而只能从一个...

2019-05-30 23:13:55 4110

原创 Akka 框架的主要角色和常用方法

一、Akka基础参考:https://doc.yonyoucloud.com/doc/akka-doc-cn/2.3.6/scala/book/chapter3/05_mailboxes.html二、主要类和方法的介绍Props类Props是用于创建对象的配置对象,它是不可变的对象,所以它是线程安全的,完全可共享的。RoundRobinPool类使用循环选择法的路由池,建议使用...

2019-05-30 18:15:08 288

原创 spring-boot中内嵌jetty9配置连接超时时延

一、准备工作。spring版本:1.5.4jetty版本:1.9二、配置方式通过配置Spring Bean的方式配置。三、具体操作通过查找eclispe 全局搜索发现在org.eclipse.jetty.server包中有个AbstractConnector类,官方解释是提供ConnectionFactory机制的Connector抽象实现,用于创建{org.eclipse.je...

2019-05-30 13:47:49 6936

转载 HTTP、TCP、UDP以及SOCKET之间的区别/联系

HTTP、TCP、UDP以及SOCKET之间的区别/联系一.TCP/IP代表传输控制协议/网际协议,指的是一系列协组。可分为四个层次:数据链路层、网络层、传输层和应用层。在网络层:有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。在传输层:中有TCP协议与UDP协议。在应用层:有FTP、HTTP、TELNET、SMTP、DNS等协议。  TCP和UDP使用IP协议从一...

2019-05-22 10:33:44 126

转载 对于骨架类(AbstractInterface)的理解

在effective Java上看到,这样做的好处:痛过对你导出的每个重要接口都提供一个抽象的骨架实现类(skeletal implementation)类,把接口和抽象类的优点结合起来。接口的作用仍然是定义类型,但是骨架实现类接管了所有与接口实现相关的工作。通过对Java源码的学习我们会发现,AbstractCollection实现了Collection接口,List接口继承自Collecti...

2019-04-16 21:12:21 267

原创 effective java 使类和成员的可访问性最小化

一、信息隐藏的好处一个设计良好的组件1、隐藏了它的所有实现细节;2、干净地将它的API与它的实现分离开来。然后,组件只通过它们的API进行通信,并且对彼此的内部工作一无所知。这一概念,被称为信息隐藏或封装,是软件设计的基本原则1、减轻了维护的负担:可以优化处理这些组件,而不会影响别人的正确的组件。2、增加了软件重用性:因为松耦合的组件通常在除开发它们之外的其他环境中证明是有用的。3、降...

2019-04-08 12:26:10 155

转载 Safepoint

为什么需要safepoint很明显safepoint是个让人不开心的东西, 线程都干不了活了, 怎么搞生产? 存在是因为需要, 我们知道java在语言级别提供了线程支持, 每个线程都是独立的执行单元. 堆里对象的引用关系抽象出来就是一副有向图(Directed graph), 图中的节点就是对象, 该对象被其他对象引用可以用该对象的入度(indegree)表示, 而对象的出度(outdegree...

2019-04-01 19:38:49 198

转载 GC回收对象算法(GC Root和引用链)

可达性分析算法在主流的商用程序语言(Java、C#,甚至包括前面提到的古老的Lisp)的主流实现中,都是称通过可达性分析(Reachability Analysis)来判定对象是否存活的。这个算法的基本思路就是通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相...

2019-03-31 11:40:55 2063

原创 Java中final修饰的字符串和常量池之间的联系

一、final修饰符1、被final修饰的常量,在编译阶段会存入调用类的常量池中。2、被final修饰的方法,JVM会尝试为之寻求内联,这对于提升Java的效率是非常重要的。因此,假如能确定方法不会被继承,那么尽量将方法定义为final的。3、final变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销。二、用final来修饰字符串先看一段代码String a = "123...

2019-03-29 15:43:34 2233

转载 GC日志参数详解

一、输出GC简要信息-verbose:gc 或-XX:+PrintGC[GC (Allocation Failure) 7987K->5378K(19456K), 0.0133927 secs][GC (Allocation Failure) 13570K->11246K(19456K), 0.0220739 secs][Full GC (Ergonomics) 11...

2019-03-29 13:36:01 1201

原创 java中对象的访问定位

java中对象的访问定位建立对象是为了使用对象,我们java程序员需要通过虚拟机栈中的reference来访问对象,但是虚拟机的规范中只规定了一个指向对象的指针,并没有规定以哪种方式去定位、访问对象在堆中的具体位置。所以对象访问方式也是取决于虚拟机实现而定的。目前主流的访问方式有使用句柄和直接指针两种。如果使用句柄访问的话,那么Java堆中将会划分出一块内存来作为句柄池,reference中...

2019-03-28 19:23:43 165

转载 final修饰的变量就是常量?final修饰局部变量在栈还是堆还是常量池中?

概念什么是常量?对于这个问题,可能很多人都可以脱口而出 : 用final修饰的变量是常量 ,或者是在编译时期定义好的字符串。(字符串常量)但是这种说法是不严谨的,因为准确来说 : 常量是用final修饰的成员变量!常量在类编译时期载入类的常量池中。即final修饰的成员变量(实例变量)和静态变量(静态变量也只能是用static修饰的成员变量),那么用final修饰的局部变量(方法内)我们也...

2019-03-28 09:58:56 2088

原创 eclipse关联github

一、在GitHub中创建一个项目二、选中项目文件,点击右键 进入Team->Share Project三、选择选项1、选中Use or create re…2、点击Create Repository3、点击Finish四、点击右键 进入Team->Share Project->Commit加入index , 点击Commit and Push五、填好Git...

2019-03-26 10:32:24 110

原创 Java虚拟机运行时数据区

一、运行时数据区总览Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。二、程序计数器程序计数器是一快较小的内存空间,它可以看做是当前栈所执行字节码的行指示器。在虚拟机的概念模型中,字节码解释器的工作就是通过改变这个计数器的...

2019-03-25 13:36:37 157

原创 StackOverflowError与OutOfMemoryError异常

一、StackOverflowError抛出这个错误是因为线程请求的栈深度大于虚拟机所允许的深度,因为Java线程操作是基于栈的,当调用方法内部方法也就是进行一次递归的时候,就会把当前方法压入栈直到方法内部的方法执行完全之后,就会返回上一个方法,也就是出栈操作执行上一个方法。比如如下代码会抛出StackOverflowError异常public class StackOverflowTest...

2019-03-25 11:24:59 197

原创 Criteria类源码解读

Criteria类源码解读1、Criteria类中的私有成员 private static final Object NOT_SET = new Object(); private @Nullable String key; //规则链 private List<Criteria> criteriaChain; //条件查询的字符拼接Map private LinkedH...

2019-03-22 17:21:57 2575

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除