移位操作符

  移位操作符只可用来处理整数类型。

  <<:左移位操作符,按照操作符右侧指定的位数将操作符左边的操作数向左移动,在低位补0。

  >>:“有符号”右移位操作符,按照操作符右侧指定的位数将操作符左边的操作数向右移动,若符号为正,在高位插入0,符号为负,在高位插入1。

  >>>:“无符号”右移位操作符,无论正负,都在高位插入0。

 Java中没有sizeof

  在c中,sizeof()操作符可以告诉你为数据项分配的字节数,在c中,需要使用sizeof的最大原因是为了“移植”,不同的数据类型在不同的机器上可能有不同的大小。

  Java不需要来满足这方面的要求,因为所有数据类型在所有机器中的大小都是相同的。我们不必考虑移植问题----它已经被设计在语言中了。

注意点:

  对char,byte和short类型进行运算时,会自动转换为int类型计算,必须将运算结果显式的转换为其原本类型。

涉及基本类型的重载

  基本类型的重载能从一个“较小”的类型自动提升至一个“较大”的类型。

static void f(long l) {
		    System.out.println("long: " + l);
	   }

	  public static void main(String[] args) {
		    f('z');             //long: 122    f(5);         //long: 5
	  }

使用Callable实现多线程Demo

java 无符号右移运算有什么作用 java为什么没有无符号左移_Java

cpu飙高处理步骤

1. top查找出哪个进程消耗的CPU高(top -c)

2. top -h -p查找出哪个线程消耗的cpu高(top -h -p pid)

这个命令就能显示刚刚找到的进程的所有线程的资源消耗情况。

3. printf%x进行pid的进制转换

找到CPU负载高的线程pid 8627, 把这个数字转换成16进制,21B3(10进制转16进制,用linux命令: printf %x 8627)

4. jstack记录进程的堆栈信息

执行jstack -l pid,拿到进程的线程dump文件。这个命令会打出这个进程的所有线程的运行堆栈。

5. 找出消耗CPU最高的线程信息

搜索“21B3”,就是搜一下16进制显示的线程id。搜到后,下面的堆栈就是这个线程打出来的

 

JDK自带工具使用

jmap -heap pid

 

显示Java堆详细信息,包括使用的GC算法、堆配置信息和各内存区域内存使用信息

 

jmap -histo:live pid

 

显示堆中对象的统计信息

 

其中包括每个Java类、对象数量、内存大小(单位:字节)、完全限定的类名。如果指定了live子选项,则只计算活动的对象。

 

jmap -dump:format=b,file=heapdump.phrof pid

 

生成堆转储快照dump文件。

 

jstat -gc

 

主要查看FGC、YGC的总次数和累计耗时

 

- S0C : survivor0区的总容量

- S1C : survivor1区的总容量

- S0U : survivor0区已使用的容量

- S1C : survivor1区已使用的容量

- EC : Eden区的总容量

- EU : Eden区已使用的容量

- OC : Old区的总容量

- OU : Old区已使用的容量

- PC 当前perm的容量 (KB)

- PU perm的使用 (KB)

- YGC : 新生代垃圾回收次数

- YGCT : 新生代垃圾回收时间

- FGC : 老年代垃圾回收次数

- FGCT : 老年代垃圾回收时间

- GCT : 垃圾回收总消耗时间

 

 

jstack -l pid

 

线程监控(问题排查)

 

jstack -l pid >> stackLog.log