java
文章平均质量分 76
yueyemaitian
这个作者很懒,什么都没留下…
展开
-
springboot程序错误排查
2.0.0版本的springboot程序,在eclipse中报错:org.codehaus.plexus.archiver.jar.Manifest.write(java.io.PrintWriter) pom.xml line 1 Maven Configuration Problempom.xml配置:<build> <plugins> <...原创 2016-12-12 10:37:10 · 433 阅读 · 0 评论 -
cache line对内存访问的影响
cache line对内存访问的影响很早就看到了,但是没有写过例子跑过,突然兴起就写了下,对这里第一个例子稍微做了改造。要注意jvm参数设置,新生代+老生代分配了2.4xG内存,新生代分了2G,eden区分了1.6g,从实际内存占用看,数组eden区使用了近1.1G的内存,剩下区域基本都是空的。另,demo是在mac上跑的。/** * -Xms2500m -Xmx250...原创 2014-03-12 20:48:37 · 386 阅读 · 0 评论 -
Fastjson反序列化泛型类型时候的一个问题
import static org.junit.Assert.assertFalse;import static org.junit.Assert.assertTrue;import java.util.ArrayList;import java.util.List;import org.junit.Test;import com.alibaba.fastjso...原创 2015-01-21 15:34:59 · 854 阅读 · 0 评论 -
一次线上问题的排查过程——时钟精度变化导致的cpu占用率高的问题
最近升级了一次tair(缓存系统)的client jar包——一个完全被重写了的版本,发布到线上的时候,发现某个新上线机房机器cpu占用率比较高,一般50%—100%之间(5核的虚拟机),而另外两个机房机器的cpu使用率却比较低。 1、用top查看是java进程的占用的绝大多数cpu 2、用top H或者top -p PID H查看发现是只有...原创 2013-09-16 21:14:41 · 1061 阅读 · 0 评论 -
Java Web应用Web层异步化应该考虑的问题
之前做了一个项目,要用到web层的异步化技术,在实际实现中,遇到了很多问题,作为教训简单罗列下。 1、app 容器/J2EE框架对异步的支持 在tomcat5、jboss4的时候,每一个请求都用了一个app容器线程来执行,app线程必须一直处理完或者等待别的线程处理完,才能拿着请求的链接把结果写回到客户端。如果你想这个时候释放掉app容器线程...原创 2014-01-25 17:45:04 · 203 阅读 · 0 评论 -
JDK中反序列化对象的过程(ObjectInputStream#readObject)
此处,对象描述信息即ObjectStreamClass的实例1、java ObjectInputStream#readObject的时候,先从输入流读入对象,读取对象信息,如果在读取过程中出现异常,则通过markDependency处理;处理完后还会调用注册进来的callback 2、读取对象的过程,先读取对象,然后再java.io.ObjectInputStre...原创 2014-06-10 20:10:24 · 1461 阅读 · 0 评论 -
A Simple Server3.0 Example
因为好多年没做web开发,所以也一直木有关注JEE新版本的特性了。虽然老早听说Servet3.0可以异步化了,但是一直米有写过例子来跑过。最近思考异步化问题偏向于jvm层面如何保存执行中的栈和恢复栈,对异步化整体缺乏整理的考虑。现在想来,天天面对的系统主要是接受请求,处理,发起一堆远程调用,接受远程调用结果,处理,构造响应结果,输出,没有太多深层次的业务处理。细化下去就要考虑接受请求、发起远程...原创 2012-11-07 20:11:42 · 100 阅读 · 0 评论 -
Kilim源码分析之五 ---- 织入之变量活跃性分析
/** * In live var analysis a BB asks its successor (in essence) about which * vars are live, mixes it with its own uses and defs and passes on a * new list of live vars to i...原创 2013-03-20 21:00:28 · 198 阅读 · 0 评论 -
Kilim源码分析之四 ---- 织入之内联subroutine
小于1.5编译级别时,如果不显示inline try/catch/finally块,try/catch和any会产生的jsr指令跳转到finally。此处分析kilim如何对这种情况下的jsr指令进行内联:finally块中有pausable则会被拷贝一份;finally块中有pausable则会把jsr/ret指令都替换为goto指令,但是并没有像1.5及以后编译级别那样,拷...原创 2013-03-20 20:00:50 · 181 阅读 · 0 评论 -
比反射更高效的修改字段值的方法
开发过程中,不少情况下都会遇到需要通过反射修改对象字段值的情况,但是很多情况下,直接反射效率比较低,而你如果读过jdk代码,可能多少会发现jdk里边经常闪现这UNSAFE的的身影,比如ConcurrentLinkedQueue里边到处都是。 为啥jdk里边到处都用这个东西呢?YY下,一方面是因为效率高,另一方面是因为它提供了很强大底层操作的功能,比如不用Ato...原创 2014-03-13 20:49:05 · 351 阅读 · 0 评论 -
cpu字长、操作系统字长和jvm中各数据类型占用的字节数关系
cpu字长是指cpu同时参与运算的二进制位数,现在主流的pc的机器字长都是64位的。机器字长直接决定着机器可寻址的虚拟空间地址大小。 The word size of a computer generally indicates the largest integer it can process in a single instruction, and the siz...原创 2014-03-16 02:05:27 · 526 阅读 · 0 评论 -
maven使用技巧
1、pom打jar包的时候设置MANIFEST.MF的key/value,可以通过在pom.xml文件中添加plugin的方式来实现,这些plugin都在<project><build><plugins>下边: <plugin> <artifactId>maven-jar-plugin</artifactId&g...原创 2014-03-18 15:34:19 · 122 阅读 · 0 评论 -
debug Java进程的debug参数
前几天给java应用设置debug参数,发现有两个参数:-agentlib:jdwp 和 -Xrunjdwp,根据官方文档记录,区别如下: Sun's VM implementations require command line options to load the JDWP agent for debugging. From 5.0 onwards the -agentli...原创 2016-08-25 21:13:52 · 1022 阅读 · 0 评论 -
Mac OSX 10.9 上build openjdk8和openjdk7
先分享下自己build出来的fastdebug版本的openjdk: openjdk7(24.80-b04), openjdk8(25.0-b70)===================================================================================== 由于想看下cms gc的debug日志...2014-03-29 18:29:50 · 240 阅读 · 0 评论 -
netty3.6.2中写数据的过程,以及写数据写不出去后怎么处理
netty写数据的时候,会先放到一个缓存队列AbstractNioChannel.writeBufferQueue中,这个队列是WriteRequestQueuepublic void eventSunk( ChannelPipeline pipeline, ChannelEvent e) throws Exception { if (e ins...原创 2014-08-11 17:37:21 · 870 阅读 · 0 评论 -
在用Netty 3.6.2发数据,发现内核缓冲区满的时候.....
用nettys收发网络数据的时候,一般不会注册SelectionKey.OP_WRITE事件。但是,如果在netty写数据的时候AbstractNioWorker.write0,发现写不进去了buf.finished()==false,可能是操作系统内核缓冲区满了,这个时候会把SelectionKey关联的Channel注册上OP_WRITE事件。 protected ...原创 2014-08-11 16:06:20 · 1195 阅读 · 0 评论 -
jvisualvm jmx方式远程监控tomcat
1、如果用jmx方式监控,不需运行服务器上的jstatd进程2、直接修改CATALIN_HOME/bin/catalina.sh:JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=[远程机器ip]-Dcom.sun.management.jmxremote.port=[自己设置个端口号] -Dcom.sun.management...原创 2013-10-10 20:38:25 · 235 阅读 · 0 评论 -
一些数据切分、缓存、rpc框架、nosql方案资料
1、数据切分 1.1、mysql中间件研究(Atlas,cobar,TDDL) 1.2、利用 MySQL Proxy 实现数据切分及整合 1.3、基于MySQL分库分表方案简介 1.4、tddl和diamond 2、缓存 2.1、java客户端三种方式操作 2.2、myib...原创 2013-10-07 23:48:21 · 120 阅读 · 0 评论 -
查看java对象在内存中的布局
接着上篇《一个对象占用多少字节?》中遇到的问题: UseCompressOops开启和关闭,对对象头大小是有影响的,开启压缩,对象头是4+8=12byte;关闭压缩,对象头是8+8=16bytes。这个如何观察验证呢? 基于上述事实,通过new A()和new B()占用字节推断,基本类型int在开启、关闭压缩情况下都是占用4个bytes的,这个没...2014-03-20 22:39:39 · 1060 阅读 · 0 评论 -
一个对象占用多少字节?
老早之前写过一篇博客,是关于一个Integer对象到底占用多少字节的,现在看来,那篇文章竟然计算错了。这次再去计算,是因为之前写的一篇关于字长的文章里,看到了hotspot jvm里,对象占用空间是8字节对齐的,再加上之前关于字节那文章里带着一点-XX:+UseCompressedOops压缩指针参数的疑问,重新探究了下一个对象到底占用多少字节,以及如何计算它占用空间的方法。主...原创 2014-03-18 21:56:21 · 599 阅读 · 0 评论 -
Kilim源码分析之三 ---- 织入之构造/合并BasicBlock
上一篇分析了可织入判断的代码,本篇继续分析织入部分的构造/合并BasicBlock。 首先看下分析方法kilim.analysis.MethodFlow.analyze()包含的功能: //织入逻辑 public void analyze() throws KilimException { buildBasicBlock...原创 2013-03-20 19:50:17 · 302 阅读 · 0 评论 -
Kilim源码分析之二 ---- 织入入口及可织入判断
1、织入入口,配置 1.1、织入入口 kilim.tools.Weaver是织入的主类,通过程序参数设置要织入的代码路径,可以是class文件、jar包、其他(是什么)、目录(目录中可以是jar包、class文件)。 如果传入的是class文件,会直接织入;调用kilim.tools.Weaver.weaveFile(String, InputS...原创 2013-03-20 19:33:52 · 224 阅读 · 0 评论 -
在编译级别1.4时jvm编译try/catch/finally块的方式
先上一段很简单,且不考虑健壮性的源码:import java.io.FileInputStream;import java.io.IOException;public class TryCatchFinallyTest { /** * @param args * @throws IOException */ public static v...原创 2013-03-12 21:22:25 · 134 阅读 · 0 评论 -
Java代码运行可执行文件
先写个例子,用Java启动tomcatpackage com.yymt.pf.rpc.loadbalance;import java.io.File;import java.io.IOException;public class ExecFileUtil { public static void main(String[] args) throws IOExcep...2011-08-15 00:33:28 · 211 阅读 · 0 评论 -
JVM中Integer实例占用多少个字节?
上篇文章后半部分提到,我们在估算1亿条整数放到内存中,会占用多大的内存的时候,仅仅按照每个Integer 32bit算了,即按照原始类型int来估算的,结果严重超出预料。仔细想想,对象在jvm中是怎么存的呢?首先,java对象要包含的基本数据至少要有两部分: 1、类以及超类的实例声明的实例变量; 2、指向类数据的引用,jvm需要通过此引用找到该对象的(可能存在的)方法表、类型信...原创 2011-09-27 01:22:45 · 6540 阅读 · 0 评论 -
Java里操蛋的泛型
BT的#java泛型#,我只想创建个泛型实例!悲惨的是就连ArrayList<T>里边的elementData都是Object[]...不是T[]...更悲惨的是,Collections.sort<T>处的T还是extends Comparable呢等到实现代码里头调用到Arrays.sort的时候,传进去的就只是Object[]了public ...原创 2011-09-25 00:07:08 · 88 阅读 · 0 评论 -
为big project虚拟盘,并构造eclipse里的user libraries
[size=large][b]1、虚拟盘[/b][/size] 如果做java开发的时候,开发环境、产品jar包、产品代码有好几个G,目录也比较多的时候,似乎把整个环境虚拟成一个虚拟盘是个不错的选择。如下,把我一个project虚拟成了X盘(setX.bat):[code="java"]@echo offrem 如果存在X盘,则先删除if exist X: subst /...原创 2010-06-30 22:31:32 · 202 阅读 · 0 评论 -
jdk编译接口
javac命令对应的代码是com.sun.tools.javac.Main类(jdk lib下的tools.jar)可以调用Main.compile编译源文件,但是这个java文件名好像必须是绝对路径,例如:[code="java"]Main.compile(new String[]{"-d","E:\\","E:\\java_exercise\\src\\compile\\com...原创 2010-01-09 16:51:57 · 81 阅读 · 0 评论 -
用字符串做锁
有些无聊,只是为了从侧面说明“XXX”字符串被intern后之后,所有具有相同值的“XXX”都指向堆中同一个对象。[code="java"]public class CPByStringTest { public static class Consumer extends Thread { @Override public void run() { lo...2009-09-25 23:25:28 · 401 阅读 · 0 评论 -
jvm编译时自动生成的局部变量
每个方法调用都会产生一个新的栈帧,每个java栈帧存储三部分内容:1、局部变量区,主要是存储方法参数和方法内部声明局部变量。jvm编译成的class文件中,Code属性的max_locals指出一共有多少个局部变量。局部变量的详细信息都在code属性的local attribute table有列出。2、操作数栈,压栈出栈就是操作的这个栈。一般情况下,这个栈的最大深度都不是很大,可以随便找...2009-09-21 22:18:28 · 197 阅读 · 0 评论 -
自定义ClassLoader从erlang服务器读class内容
自定义了个ClassLoader,用socket从一个server上获取class文件内容,然后创建一个类。tcp server是用erlang写的,只负责从硬盘读数据,然后传到自定义ClassLoader。特别注意的是,要想erlang socket跟java socket通信,gen_tcp:listen(Port,[binary,{packet,0}]),这里packet一定要为0,这个是e...2009-09-14 22:32:37 · 85 阅读 · 0 评论 -
由一个小程序引发的思考 — 关于字段和方法的分派
面向对象三大特征封装、继承和多态,此处我们一般都知道方法的多态性,覆盖和重载。但是字段呢?当然根据定义,跟字段无关,也就是不能覆盖?先看一个小程序:package com.yymt.jvm.method.dispatch;public class DispatchTest { public static void main(String[] args) { Base b =...2011-11-05 14:32:04 · 103 阅读 · 0 评论 -
阿里B2B北京专场java开发面试题(2011.10.29)
笔试(只记下来了几道)1、写出以下代码的输出结果: public class DispatchTest { public static void main(String[] args) { Base b = new Sub(); System.out.println(b.x); } } class Base ...原创 2012-01-31 21:06:25 · 158 阅读 · 0 评论 -
腾讯java web开发面试题(2011-11-17)
笔试:1、文件拷贝,把一个文件的内容拷贝到另外一个文件里2、jsp里边的对象,以及常用的方法3、HashMap遍历的几种方法4、写一个类,连接数据库并执行一条sql 面试:1、JVM性能调优,都做了什么?2、forward和sendRedirect的区别3、<jsp:include page=''> 和 <%@include file='...原创 2012-01-31 21:09:36 · 253 阅读 · 0 评论 -
ASM4.0源码走读之三 readCode方法分析方法代码
继第一篇,我们来看看readCode的代码: private void readCode(final MethodVisitor mv, final Context context, int u) { // reads the header byte[] b = this.b; char[] c = context...原创 2013-03-09 00:19:29 · 512 阅读 · 0 评论 -
ASM4.0源码走读之二 指令的类型
在深入分析ClassReader.readCode()方法之前,我们需要大概了解下ASM把jvm的指令分的类型,这在readCode会用到。先看ClassReader的代码: static { int i; byte[] b = new byte[220]; String s = "AAAAAAAAAAAAAAAA...原创 2013-03-08 23:51:13 · 246 阅读 · 0 评论 -
ASM4.0源码走读之一
了解java class文件格式是读懂asm代码的前提,所以在此之前请找Java虚拟机规范里边class文件格式章节细读一下。 不过在详解读入过程之前,先简单看下jvm规范中对class文件格式的定义,其中一个u代表一个byte,u1、u2、u4分别代表1、2、4个字节:ClassFile { u4 magic; u2 minor_versi...原创 2013-03-08 23:18:27 · 349 阅读 · 0 评论 -
Eclipse 4.2 Old Gen严重的内存泄露?
eclipse内存设置了很大,使用一段时间之后Old Gen频繁GC,CPU使用率很高,Eclipse反应非常慢。网上搜了下竟然没搜到内存泄露的问题,对面哥们儿的也是反应慢。难道是我这里设置有问题?...原创 2012-07-21 15:09:27 · 467 阅读 · 0 评论 -
java协程框架----kilim实现机制解析
java语言处理多任务的模式是基于多线程,java语言级别原生并不支持协程,我们想要java语言支持协程,就需要在线程和协程之间架起一道桥梁。在某个事件点(我们成为挂起点)上,我们在应用级别备份当前任务在线程上的调用栈信息(包括局部变量和操作栈上的数据),释放线程,让它去执行下一个任务;等某些事件被触发的时候,重新执行刚才的任务,用之前备份的调用栈信息恢复线程的调用栈,从挂起点开始执行。...原创 2013-03-08 16:14:32 · 555 阅读 · 0 评论 -
淘宝北京专场java面试题(2011-12-31)
第一面1、说说项目由于我几年一直做一个产品,从后台做到前台,从业务开发做到技术平台,所以就画了整个产品部署架构图,b/s & c/s的,然后一层层的讲解。B/S现有Web框架改造、浏览器缓存、c/s补丁下载各种方式、cdn、c/s通信协议、rpc集群、http集群、负载均衡、集群前置机调度、后端服务器主从实例、后端服务器各种优化(异步、性能隔离)、数据库服务器各种优化(索...2012-01-31 21:58:13 · 260 阅读 · 0 评论