[Java性能剖析]JVM Management API

JVM本身提供了一组管理的API,通过该API,我们可以获取得到JVM内部主要运行信息,包括内存各代的数据、JVM当前所有线程及其栈相关信息等等。各种JDK自带的剖析工具,包括jps、jstack、jinfo、jstat、jmap、jconsole等,都是基于此API开发的。本篇对这部分内容进行一个详细的说明。       参考:http://java.sun.com/javase/6/docs/...
阅读(39) 评论(0)

Tomcat源码学习--WebAppClassLoader类加载机制

上一篇博客JVM-类加载机制 中我们已经对JVM的类加载机制有所了解, 这篇博客我们了解一下Tomcat的类加载机制。Tomcat的类加载器可以分为两部分,第一个是Tomcat自身所使用的类加载器,会加载jre的lib包及tomcat的lib包的类,遵循类加载的双亲委派机制;第二个是每个Web应用程序用的,每个web应用程序都有自己专用的WebappClassLoader,优先加载/web-inf...
阅读(96) 评论(0)

JVM-类加载机制

类加载过程    类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。它们开始的顺序如下图所示:    其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持Java语言的运行时绑...
阅读(78) 评论(0)

Tomcat源码学习--Cookie创建和销毁

上一篇博客Tomcat源码学习--Session创建销毁中我们学习了Session创建、使用和销毁的操作,接下来我们看看Tomcat中对Cookie是如何做处理的。首先我们要了解Cookie是由浏览器创建、管理和销毁操作的,Tomcat只能获取浏览器请求过来的cookie值,或者创建cookie。一、获取Cookie1、通过request获取cookie Cookie [] cookies = r...
阅读(59) 评论(0)

Tomcat源码学习--Session创建销毁

每个web后台开发人员肯定对Session有所接触和了解,简单来说就是后台服务器维护了一个存在有效时间和范围限制的缓存数据。 接下来我们通过这篇博客来分析一下tomcat创建、使用和销毁Session的相关过程。首先我们需要看一下tomcat中与session相关的所有类,如下:HttpSession:是javax.servlet包中提供的session接口StandardSessionFacad...
阅读(67) 评论(0)

Spring boot 内置tomcat禁止不安全HTTP方法

1、在tomcat的web.xml中可以配置如下内容,让tomcat禁止不安全的HTTP方法 /* PUT DELETE HEAD OPTIONS TRACE BASIC 2、Spring boot使用内置tomcat,没有web.xml配置文件,可以通过...
阅读(256) 评论(0)

Java虚拟机--对象回收

从这篇开始我们开始探讨一些jvm调优的问题。在jvm调优中一个离不开的重点是垃圾回收,当垃圾回收成为系统达到更高并发量的瓶颈时,我们就需要对jvm中如果进行“自动化”垃圾回收技术实施必要的监控和调节。对于调优之前,我们必须要了解其运行原理,java 的垃圾收集Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了...
阅读(79) 评论(0)

从零开始玩转JMX——简介和Standard MBean

MX的全称为Java Management Extensions. 顾名思义,是管理Java的一种扩展。这种机制可以方便的管理、监控正在运行中的Java程序。常用于管理线程,内存,日志Level,服务重启,系统环境等。简介基本术语MBean:是Managed Bean的简称,可以翻译为“管理构件”。在JMX中MBean代表一个被管理的资源实例,通过MBean中暴露的方法和属性,外界可以获取被管理的...
阅读(143) 评论(0)

Tomcat学习--tomcat配置使用log4j

tomcat自身提供了日志收集及打印功能,但对日志文件的大小及日志文件生成个数没法控制,因此tomcat提供了一个扩展日志的功能。1、首先去tomcat官网下载两个jar:tomcat-juli-adapters.jar和tomcat-juli.jar2、下载log4j的jar包:log4j-1.2.17.jar 及配置log4j的配置文件log4j.properties#log4j.rootLo...
阅读(154) 评论(1)

Tomcat学习--禁止tomcat日志中stderr和stdout日志打印

最近在使用tomcat时,由于代码问题导致logbac日志打印过多,由于logback可以控制日志文件的个数和日志文件大小,不会产生过多日志问题,但是发现tomcat由于是每天生成一个日志文件,导致一天所有的日志都打印到同一个文件中,导致日志文件过大,并且日志文件中的内容包括很多东西,如下图,直接导致磁盘被占满。1、解决方法首先考虑是禁止tomcat打印stderr和stdout日志修改tomca...
阅读(378) 评论(0)

Dubbo入门学习--动态代码编译器Compiler

在之前一篇博客中Dubbo入门学习--SPI实现@SPI和@Adaptive,我们已经了解到Dubbo通过生成动态代码来实现动态代理的,Dubbo提供了动态代码编译器接口Compiler。Compiler接口:@SPI("javassist") public interface Compiler { /** * Compile java source code. * * @par...
阅读(212) 评论(1)

Dubbo入门学习--SPI实现@SPI和@Adaptive

上一篇博客 Dubbo入门学习--Dubbo服务提供接口SPI机制我们已经简单介绍了Dubbo的SPI机制,这篇博客来剖析一下Dubbo是如何使用SPI机制的,在接口中使用@SPI("值")使用默认的实现类,如果我们不想使用默认的实现类是如何处理的,...
阅读(183) 评论(0)

Dubbo入门学习--Dubbo服务提供接口SPI机制

Dubbo采用微内核+插件体系,使得设计优雅,扩展性强。那所谓的微内核+插件体系是如何实现的呢!大家是否熟悉spi(service providerinterface)机制,即我们定义了服务接口标准,让厂商去实现(如果不了解spi的请谷歌百度下), jdk通过ServiceLoader类实现spi机制的服务查找功能。可以参考博客 Java spi机制浅谈  接下来我们来了解一下Dubbo是如何实...
阅读(191) 评论(0)

Dubbo入门学习--Dubbo总体架构的设计介绍

背景:随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。 单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。 此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。垂直应用架构``当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相...
阅读(178) 评论(0)

SpringMVC--配置FastJSON为JSON处理器

springMVC使用fastJson很简单,在springMVC的配置文件中作如下配置: text/html;charset=UTF-8 appl...
阅读(561) 评论(0)

并发编程--线程池拒绝策略RejectedExecutionHandler(三)

线程池的拒绝策略,是指当任务添加到线程池中被拒绝,而采取的处理措施。当任务添加到线程池中之所以被拒绝,可能是由于:第一,线程池异常关闭。第二,任务数量超过线程池的最大限制。线程池共包括4种拒绝策略,它们分别是:AbortPolicy, CallerRunsPolicy, DiscardOldestPolicy和DiscardPolicy。ThreadPoolExecutor默认的拒绝策略是Abor...
阅读(482) 评论(0)

并发编程--线程池ThreadPoolExecutor实现原理(二)

ThreadPoolExecutor是线程池类。对于线程池,可以通俗的将它理解为"存放一定数量线程的一个线程集合。线程池允许若个线程同时允许,允许同时运行的线程数量就是线程池的容量;当添加的到线程池中的线程超过它的容量时,会有一部分线程阻塞等待。线程池会通过相应的调度策略和拒绝策略,对添加到线程池中的线程进行管理。"1. workersworkers是HashSet类型,即它是一个Worker集合...
阅读(395) 评论(0)

并发编程--线程池Executor(一)

合理利用线程池能够带来三个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。但是要做到合理的利用线程池,必须对其原理了如指掌。线程池的架构图如下:1....
阅读(568) 评论(0)

Java集合--ArrayBlockingQueue

ArrayBlockingQueue是数组实现的线程安全的有界的阻塞队列。线程安全是指,ArrayBlockingQueue内部通过“互斥锁”保护竞争资源,实现了多线程对竞争资源的互斥访问。而有界,则是指ArrayBlockingQueue对应的数组是有界限的。 阻塞队列,是指多线程访问竞争资源时,当竞争资源已被某线程获取时,其它要获取该资源的线程需要阻塞等待;而且,ArrayBlockingQu...
阅读(393) 评论(0)

Java集合--CopyOnWriteArraySet

它是线程安全的无序的集合,可以将它理解成线程安全的HashSet。有意思的是,CopyOnWriteArraySet和HashSet虽然都继承于共同的父类AbstractSet;但是,HashSet是通过“散列表(HashMap)”实现的,而CopyOnWriteArraySet则是通过“动态数组(CopyOnWriteArrayList)”实现的,并不是散列表。和CopyOnWriteArray...
阅读(420) 评论(0)
324条 共17页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:465235次
    • 积分:7747
    • 等级:
    • 排名:第3040名
    • 原创:308篇
    • 转载:16篇
    • 译文:0篇
    • 评论:98条
    Github
    访问:https://github.com/IAMTJW
    博客专栏
    最新评论