
Java
文章平均质量分 76
unix21
这个作者很懒,什么都没留下…
展开
-
Java字节码研究
本文在本人2个博客https://blog.youkuaiyun.com/21aspnet和https://blog.youkuaiyun.com/unix21unix21同步发布1.String和常连池先上代码:public class TestApp { public static void main(String[] args) { String s1 = ...原创 2019-03-05 18:49:39 · 743 阅读 · 0 评论 -
Spring源码分析【8】-分布式环境SpringSecurity保持用户会话
1.SpringSecurity的权限控制流程是这样的:用户登录,基础信息UserInfo存在SpringSecurity的ThreadLocal里。下面是contextHolder对象:final class ThreadLocalSecurityContextHolderStrategy implements SecurityContextHolderStrat原创 2016-10-14 17:49:19 · 4807 阅读 · 0 评论 -
Java飞行记录器 JRockit Flight Recorder JFR诊断JVM的历史性能和操作
需要展开子树,复制堆栈跟踪,就可以查看到代码调用链,看到自己的业务代码,从而定位到最耗时的代码位置:原创 2016-10-13 10:47:42 · 4285 阅读 · 0 评论 -
Map和List静态初始化
public final static Map ServerIPMap = new HashMap() { { put("redis", "127.0.0.1"); put("solr", "127.0.0.1"); } };public final static List ComIPList =原创 2016-10-13 10:20:24 · 11477 阅读 · 3 评论 -
Spring源码分析【6】-ThreadLocal的使用和源码分析
Spring代码使用到了ThreadLocal原创 2016-08-11 17:31:42 · 1386 阅读 · 0 评论 -
Spring源码分析【0】-框架的基础:继承和接口调用链
Spring源码大量的使用继承和接口调用,现举个例子,不搞清楚这个无法看代码。public class A extends B{ public void f1() { System.out.println("f1 in a"); }}public abstract class B extends C { protected abstract v原创 2016-08-02 10:01:02 · 877 阅读 · 1 评论 -
Spring源码分析【9】-SpringSecurity密码Remove原理
很明显代码已经说了认证完成移除credentials和其他某些安全数据// Authentication is complete. Remove credentials and other secret data// from authenticationorg.springframework.security.authentication.ProviderManager.auth原创 2016-08-29 18:36:00 · 939 阅读 · 0 评论 -
在jsp调试后端绑定对象
在jsp调试后端绑定对象,这个调用层次非常深原创 2016-09-09 12:00:55 · 943 阅读 · 0 评论 -
Spring4实战学习笔记
《Spring4实战 第4版》2016年4月新出版的,之前的第三版看起来还是不错的,所以看到新版就直接买下来。1.装配Bean参考【2.2】1.1接口只有一个现实类可以自动装配public interface CompactDisc { void play();}import org.springframework.stereotype.Co原创 2016-05-04 19:14:16 · 7600 阅读 · 1 评论 -
调试Tomcat源码
需要调试Tomcat源码其实很简单,1.保持你的Tomcat安装文件和源码是版本一致http://tomcat.apache.org/download-80.cgi下载安装版和源码2个版本2.建立Java自由格式项目先在IDE里配置好Tomcat,这个不复杂。然后新建一个项目,这个需要注意了,以NetBeans为例需要建一个Java自由格式项目原创 2016-07-27 10:53:43 · 736 阅读 · 0 评论 -
EL表达式
1.EL获取单值${title}2.EL获取HashMap后端绑定Map m=new HashMap(); m.put("1", "111"); m.put("2", "222"); ModelAndView mv = new ModelAndView(); mv.addObject("title",原创 2016-07-15 13:52:38 · 461 阅读 · 0 评论 -
SpringMVC集成Tiles布局引擎框架
Tiles布局框架, http://tiles.apache.org/ Spring已经对Tiles进行了集成。页头页尾公共模板页要靠这个,不然重复代码太多。 org.apache.tiles tiles-servlet 3.0.5 org.apache.原创 2016-07-12 18:23:48 · 3729 阅读 · 1 评论 -
FAIL - Deployed application at context path / but context failed to start
IDE报错:FAIL - Deployed application at context path / but context failed to start编译通过,这个错误原因是很多地方被误用,导致Spring运行时不能解析某些Class导致,例如:ModelAndView用错public ModelAndView GetIndex(ModelAndView mav原创 2016-07-13 16:11:47 · 6949 阅读 · 0 评论 -
Java开发环境的搭建以及使用eclipse创建项目
一、Java 开发环境的搭建这里主要说windows环境下怎么配置Java环境。如果是Linux环境参考本博客另一篇文章即可:Linux环境安装卸载JDK1.首先安装JDKjava的SDK简称JDK。去官网下载最新的JDK即可:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downl原创 2014-01-27 14:33:32 · 13838 阅读 · 2 评论 -
String和常量池
String s1 = "abc";// 放在常量池中 String s2 = "abc";// 从常量池中查找 String s3 = new String("abc");//new放在堆中 String s4 = new String("abc"); String s5 = s1.intern(); String原创 2016-12-02 13:15:17 · 514 阅读 · 0 评论 -
JVM内存溢出的几种情形
java虚拟机规范定义了两种异常与栈空间有关:StackOverflowError和OutOfMemoryError线程计算过程中 栈深度>最大可用栈深度 抛出StackOverflowError如果栈可以动态扩展,如果扩展过程中没有足够内存空间支持会抛出OutOfMemoryError-Xss设置栈大小,栈大小决定了函数调用的可达深度public class Test原创 2016-12-02 11:09:22 · 779 阅读 · 0 评论 -
Java字节码instrument研究
MyAgent项目<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocatio...原创 2018-08-21 15:54:36 · 977 阅读 · 0 评论 -
JVM虚拟机参数配置官方文档
JDK8 https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.htmlJDK7 https://docs.oracle.com/javase/7/docs/technotes/tools/solaris/java.html官方博客 https://blogs.oracle.com/poonam/==============...原创 2018-04-08 11:23:51 · 1548 阅读 · 0 评论 -
Linux kernel futex.c的bug导致JVM不可用
JVM死锁导致线程不可用,然后会瞬间起N个线程,当然也是不可用的,因为需要的对象死锁,然后耗尽文件句柄导致外部TCP无法建议拒绝服务,jstack之后就会恢复。解决办法:替换中间件类库 ,比如httpclient的。原因大致是:某个switch分支缺少memory barrier的正确处理,导致外部应用如JVM的lock被错误锁住;一般jstack连后就恢复。https://github.com/...原创 2018-04-08 09:54:01 · 1468 阅读 · 0 评论 -
Java堆外内存泄露分析
查看堆内存占用正常,jvm垃圾回收也没有异常。而top出来显示java占用内存是几个G,那么可能想到了是堆外内存泄漏。需要安装google-perftools工具进行分析1.先安装g++不然编译会报错:g++: command not found# yum -y install gcc gcc-c++----2.安装libunwind不建议版本>0.99据说有问题,原创 2018-01-25 14:18:29 · 15664 阅读 · 2 评论 -
Linux环境安装卸载JDK以及安装Tomcat和发布Java的web程序
Linux环境:CentOS7.2一.安装JDK安装好的CentOS会自带OpenJdk,最好还是先卸载系统自带的JDK,然后自己重新去Oracle网站下载最新的JDK安装。1.卸载系统自带的JDK查看java信息# java -version查看JDK# rpm -qa | grep java或者还有一些其他的命令# rpm -原创 2014-01-25 21:10:44 · 7504 阅读 · 0 评论 -
线上java问题排查
0.jps这个输出java进程pid#jps查看java的线程#top -Hp 25448如图25757这个线程比较耗时,看看他在做什么注意需要折算出线程pid的16进制值,然后jstack。可以打印更多信息#jstack pid | grep -A 20 649d参考:JVM调优之jstack找出最耗cpu的线程并定位代码原创 2018-01-18 11:24:38 · 909 阅读 · 0 评论 -
用“逐步排除”的方法定位Java服务线上“系统性”故障
说明:原文地址已经不可访问,其他地方有转载,不过很多丢失图片,所以,找到一处有图的重新配好图。用“逐步排除”的方法定位Java服务线上“系统性”故障Posted on 2014/08/25李斯宁(高级测试开发工程师)一、摘要由于硬件问题、系统资源紧缺或者程序本身的BUG,Java服务在线上不可避免地会出现一些“系统性”故障,比如:服务性能明显下降、部分(转载 2018-01-05 14:12:34 · 462 阅读 · 0 评论 -
Java常用命令及Java Dump
线程Dump,包含所有线程的运行状态。纯文本格式。堆Dump,包含线程Dump,幵包含所有堆对象的状态。二进制格式。Java Dump方法1.使用Java虚拟机制作Dump指示虚拟机在发生内存不足错误时,自动生成堆Dump-XX:+HeapDumpOnOutOfMemoryError2.使用图形化工具制作Dump使用JDK(1.6)自带的工具:Java Vi原创 2017-12-20 14:19:59 · 2225 阅读 · 0 评论 -
Java的SPI机制
Dubbo等框架使用到必须掌握。package org.hadoop.java;public interface IService { public String sayHello(); public String getScheme();}package org.hadoop.java;public class HDFSService impleme原创 2017-03-27 20:45:34 · 2640 阅读 · 0 评论 -
常用Maven收集以及Maven技巧
完整的Maven的pom.xml 4.0.0 org.me ... 2.0.0 jar UTF-8 1.8 1.8 junit junit 4.12原创 2016-03-12 09:02:51 · 623 阅读 · 0 评论 -
匿名内部类和传接口
匿名内部类也就是没有名字的内部类正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口参考:http://www.cnblogs.com/nerxious/archive/2013/01/25/2876489.htmlpublic interface MyInterface { public原创 2017-03-27 17:45:40 · 614 阅读 · 0 评论 -
Tomcat定时任务
原文:The load-on-startup element indicates that this servlet should be loaded (instantiated and have its init() called) on the startup of the web applicatio原创 2016-12-15 13:13:18 · 1981 阅读 · 0 评论 -
Java的JSON操作存储List到Redis
使用jackson和json-lib都可以 org.codehaus.jackson jackson-mapper-asl 1.9.13 net.sf.json-lib json-lib 2.4 jd原创 2016-06-27 17:40:49 · 6934 阅读 · 1 评论 -
Java的Redis连接池代码性能不错
其实这个是引用自网友http://blog.youkuaiyun.com/tuposky/article/details/45340183,有2个版本,差别就是ReentrantLock和synchronizedReentrantLock版import java.util.concurrent.locks.ReentrantLock;import org.apache.commons.lang原创 2016-05-09 17:52:19 · 18971 阅读 · 5 评论 -
JAX-WS Web 服务开发调用和数据传输分析
增加一个add的服务import javax.jws.WebService;import javax.jws.WebMethod;import javax.jws.WebParam;/** * * @author Administrator */@WebService(serviceName = "CalculatorWS")public class CalculatorWS原创 2016-03-08 16:26:47 · 1150 阅读 · 0 评论 -
Netbeans使用maven下载源码
如果需要研究源码,自然需要下载源码,其实Netbeans使用maven构建项目下载源码非常简单。原创 2016-03-04 19:39:40 · 1427 阅读 · 0 评论 -
调试JDK源码-ConcurrentHashMap实现原理
Map cm = new ConcurrentHashMap(); for (int i = 0; i < 20; i++) { cm.put((char) (i + 65) + (char) (i + 66) + (char) (i + 67) + "", i + ">>>http://blog.youkuaiyun.com/unix21/"); }原创 2016-03-18 10:56:46 · 1482 阅读 · 0 评论 -
调试JDK源码-一步一步看HashMap怎么Hash和扩容
还是调试源码最好。开发环境 JDK1.8+NetBeans8.1说明:调试HashMap的 public V put(K key, V value) 方法并查看key的值时不能显示变量的值,原因在于oracle提供的jre中rt.jar不带debug信息。orcale在编译src时使用了 javac -g:none,意思是不带任何调试信息,这样可以减小rt.jar的大小。若想正常调试原创 2016-03-17 10:54:15 · 9337 阅读 · 5 评论 -
HashMap和ConcurrentHashMap研究
public class ConcurrentHashMap extends AbstractMap{...public V putIfAbsent(K key, V value) { return putVal(key, value, true); }final V putVal(K key, V value, boolean onlyIfAbsent原创 2016-03-16 14:02:51 · 621 阅读 · 0 评论 -
Linux环境编译安装OpenJDK
Centos6.5 AMD64位机器Java的源码是C,C++和Java实现的,所以还需要有一个安装好的java建议选OracleJDK参考文末安装OracleJDKLinux环境安装卸载JDK以及安装Tomcat和发布Java的web程序安装依赖 | Install dependence# yum -y install gcc gcc-c++ alsa-lib als原创 2016-03-16 23:05:01 · 4179 阅读 · 0 评论 -
Shiro源码学习之二
3.subject.logintry { subject.login(token); } catch (AuthenticationException ae) { logger.info("登录失败!"); return; }login方法public void lo原创 2016-03-15 12:37:10 · 2510 阅读 · 1 评论 -
使用Netbeans创建java Web项目
使用Netbeans创建java Web项目需要先搭建JDK参考:Java开发环境的搭建以及使用eclipse创建项目Linux环境安装卸载JDK1.安装Tomcat去官网下载最新的Tomcat:http://tomcat.apache.org/目前最新的windows环境的Tomcat是http://mirrors.hust.edu.cn/ap原创 2014-02-11 08:57:25 · 5638 阅读 · 0 评论 -
jca分析java dump日志
可以使用jca分析java dump的日志jca:https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=2245aa39-fa5c-4475-b891-14c205f7333c运维报说是某机房突然全部都线程阻塞了其中锁住了tcp的原创 2015-01-28 19:47:23 · 2230 阅读 · 0 评论 -
Thift安装
thrift官网http://thrift.apache.org/#wget http://mirror.bit.edu.cn/apache/thrift/0.9.2/thrift-0.9.2.tar.gz#tar -zvxf thrift-0.9.2.tar.gz# ./configure --prefix=/usr/local/thrift#make && make原创 2014-12-03 20:46:49 · 3536 阅读 · 0 评论