- 浏览: 377490 次
- 性别:
- 来自: 杭州
-
最新评论
-
surpassno:
很不错,学习了
一个对象占用多少字节? -
ysyzww:
你这么牛逼,你父母知道吗
maven使用技巧 -
妖人不要跑:
JDK中反序列化对象的过程(ObjectInputStream#readObject) -
lanhz:
谢楼主,构建成功了
Mac OSX 10.9 上build openjdk8和openjdk7 -
zqb666kkk:
通过了吗 ?????
淘宝北京专场java面试题(2011-12-31)
文章列表
先分享下自己build出来的fastdebug版本的openjdk: openjdk7(24.80-b04), openjdk8(25.0-b70)
=====================================================================================
由于想看下cms gc的debug日志,验证个问题,但是发现jvm的cpp代码里头,要Verbose值为true才能看到debug信息,而这个vm参数只能在debug模式下才能设置,于是就自己动手build出了下jdk。
...
接着上篇《一个对象占用多少字节?》中遇到的问题:
UseCompressOops开启和关闭,对对象头大小是有影响的,开启压缩,对象头是4+8=12byte;关闭压缩,对象头是8+8=16bytes。这个如何观察验证呢? 基于上述事实,通过new A()和new B()占用字节推断,基本类型int在开启、关闭压缩情况下都是占用4个bytes的,这个没有影响。而通过B和B2在开启、关闭指针压缩情况下的对比看,Integer类型分别占了4 bytes和8 bytes,实际上引用类型都是这样。如何验证? new Integer[0]在压缩前 ...
老早之前写过一篇博客,是关于一个Integer对象到底占用多少字节的,现在看来,那篇文章竟然计算错了。这次再去计算,是因为之前写的一篇关于字长的文章里,看到了hotspot jvm里,对象占用空间是8字节对齐的,再加上之前关于字节那文章里带着一点-XX:+UseCompressedOops压缩指针参数的疑问,重新探究了下一个对象到底占用多少字节,以及如何计算它占用空间的方法。主要是参考了这篇很久以前的文章,不过试验了一把,instrumentation这种方法还是靠谱的。
import java.lang.instrument.Instrumentation;
impor ...
1、pom打jar包的时候设置MANIFEST.MF的key/value,可以通过在pom.xml文件中添加plugin的方式来实现,这些plugin都在<project><build><plugins>下边:
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<finalName>test& ...
cpu字长是指cpu同时参与运算的二进制位数,现在主流的pc的机器字长都是64位的。机器字长直接决定着机器可寻址的虚拟空间地址大小。
The word size of a computer generally indicates the largest integer it can process in a single instruction, and the size of a memory address, which is usually, but not necessarily the same as the integer size.
...
开发过程中,不少情况下都会遇到需要通过反射修改对象字段值的情况,但是很多情况下,直接反射效率比较低,而你如果读过jdk代码,可能多少会发现jdk里边经常闪现这UNSAFE的的身影,比如ConcurrentLinkedQueue里边到处都是。
为啥jdk里边到处都用这个东西呢?YY下,一方面是因为效率高,另一方面是因为它提供了很强大底层操作的功能,比如不用AtomicObject就可以直接支持cas操作修改对象字段,可以直接申请释放内存。
调用效率高,到底有多高呢?直接上代码:
import sun.misc.Unsafe;
impo ...
cache line对内存访问的影响很早就看到了,但是没有写过例子跑过,突然兴起就写了下,对这里第一个例子稍微做了改造。要注意jvm参数设置,新生代+老生代分配了2.4xG内存,新生代分了2G,eden区分了1.6g,从实际内存占用看,数组eden区使用了近1.1G的内存,剩下区域基本都是空的。另,demo是在mac上跑的。
/**
* -Xms2500m -Xmx2500m -Xcomp -Xmn2g -XX:NewRatio=10
* @author tianmai.fh
* @date 2014-03-12 16:55
*/
public class ...
之前做了一个项目,要用到web层的异步化技术,在实际实现中,遇到了很多问题,作为教训简单罗列下。
1、app 容器/J2EE框架对异步的支持
在tomcat5、jboss4的时候,每一个请求都用了一个app容器线程 ...
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.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false"
这里不设置密码,如果要设置 ...
1、数据切分
1.1、mysql中间件研究(Atlas,cobar,TDDL)
1.2、利用 MySQL Proxy 实现数据切分及整合
1.3、基于MySQL分库分表方案简介
1.4、tddl和diamond
2、缓存
2.1、java客户端三种 ...
最近升级了一次tair(缓存系统)的client jar包——一个完全被重写了的版本,发布到线上的时候,发现某个新上线机房机器cpu占用率比较高,一般50%—100%之间(5核的虚拟机),而另外两个机房机器的cpu使用率却比较低。
1、用top查看是java进程的占用的绝大多数cpu
2、用top H或者top -p PID H查看发现是只有一个线程占用cpu比较多
3、printf %x tid,拿到线程id的16进制表示后jstack pid | grep 0xtid -A 10拿到占用cpu比较多的线程的堆栈:
...
先看一个简单的汇编程序:
assume cs:code,ss:stack
stack segment
dw 10 dup('a')
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,20
mov ax,1
mov cx,4
call s
mov ax,4c00h
int 21h
s:
add ax,ax
loop s
ret
code ends
end start
自定义一个stack段,然后产生一次方法调用,用 ...
前两天,缓存系统的一哥们儿在帮忙排查他们超时线程在某个机房占用cpu使用率比较高的情况的时候,用到了
sudo sh -c 'echo w > /proc/sysrq-trigger' ; dmesg
不解,查了下:
dmesg 用来显示系统启动时候的系统信息的,这对系统管理员或者排查问题的时候很重要,参考鸟哥的解释和更详细的资料
sh -c是用sh执行命令
当然,最重要的还是echo w > /proc/sysrq-trigger,查了只知道proc/sysrq-trigger是一个神奇的文件,用ec ...
一、
官方文档:http://nginx.org/cn/docs/
参考:http://my.oschina.net/duxuefeng/blog/34880
二、2014-01-14
2.1、查看nginx已安装的模块:
nginx -V
结果(关于配置项的含义):
nginx version: nginx/1.2.7
built by clang 4.1 (tags/Apple/clang-421.11.66) (based on LLVM 3.1svn)
TLS SNI support enabled
configure arguments:
--pref ...
如果想将内存空间2000:0,2000:1,2000:2中的数据分别放入al,bl,cl中,可以通过如下方式:
mov ax,2000h
mov ds,ax
mov al,[0]
mov bl,[1]
mov cl,[2]
如果通过debug工具下a命令在指定地址写入汇编指令,输入后用u查看:
-a
0AF3:0100 mov ax,2000
0AF3:0103 mov ds,ax
0AF3:0105 mov al,[0]
0AF3:0108 mov bl,[1]
0AF3:010C mov cl,[2]
0AF3:0110
-u ...