Java虚拟机垃圾收集算法简介
一 标记-清除算法(Mark-Sweep)
首先标记出所有需要回收的对象,标记完成后统一回收。
主要缺点: 1. 标记和清除效率都很低 2. 产生大量不连续的内存碎片,导致后面分配大内存空间失败
二 复制算法
将可用内存划分为大小相等的两块, 每次只使用其中一块。 当这块用完后,就将还存活对象复制到另外一块上面,再把已经使用的内存空间一次清理掉。
主要缺点: 代价太高,至少一半的内存不能使用。
三 标记-整理算法
标记过程和标记-清除算法一致,但是后续步骤是让所有存活的对象都向一端移动,然后清理掉边界以外的内存。
四 分代收集算法
当前商业虚拟机都采用此算法,分为不同对象代,去进行不同管理。【相关阅读】
什么是java位运算
位运算允许对整数中的单个比特进行操作。位运算会对连个操作数中对应的比特执行布尔代数运算,并产生一个结果。
java中有3种位运算符:&(与) |(或) ^(异或) ~(非)
看例子说明位运算的过程:
public class test{
public static void main(String[] args){
int a=12|2; //1100|0010
tln(a);
}
}
结果是14(1110)
位移运算操作的目标也是数字的二进制的位。用来操作位数的向左向右移动。
java种有3种基本的位移操作:
>>(右移) <<(左移)>>>(无符号右移)
<<:将操作符左边的整数按位向左边移动运算符右边整数指定的位数,在右边添加0;
看例子:
public class test{
public static void main(String[] args){
int a=8<<1;
tln(a);
}
}
8的二进制表示:00000000 00000000 00000000 00001000
左移1位后二进制:00000000 00000000 00000000 00010000 -> 14
结果为14
tip:左移相当于num*(2^n) 其中num为被移数,n为移动的位数
>>:右移的道理也是一样的.,注意的是:若最高位为1,移动后最高位用1来填充,否则用0来填充。
例子:
int a=-8>>1;
tln(a);
-8的二进制:11111111 11111111 11111111 11111000
右移后的二进制:11111111 11111111 11111111 11111100 -> -4
结果为-4
tip:右移相当于num/(2^n) 其中num为被移数,n为移动的位数
>>>:无符号右移跟右移原理是一样的,只是覆盖位的覆盖规则不同:不管最高位是0还是1,全部用0来填充。
例子:
int a=-8>>>1;
tln(a);
-8的二进制:11111111 11111111 11111111 11111000
无符号右移后的二进制:01111111 11111111 11111111 11111100 -> 2147483644
tip:用无符号右移的时候要注意,绝对值很小的负数移动后都可能成为绝对值很大的正数,这在大多数情况下没意义。
奇葩的例外:
那代码:
int a=11>>32;
long b=12<<64;
tln(a);
tln(b);
int类型占32位,long类型占64位,这样子的话,上面的例子输出应该都是0才对,因为刚好将有效位都移走了,但结果并不是这样的。
输出的结果是:11 12
这跟java对位移的底层操作机制有关:
从结果可以看出两个数都没有变化,这是因为,在进行移位前,java首先将要移动的位数跟被移数的位数求余,然后去移动余数个位数。上面例子中,32对32求余,64对64求余,结果都是0,java系统对被移数进行0个位的移动,也就是没
移动啦。
这样子的话,看下下面的代码:
int c=8>>33;
tln(c);
因为int有32位,那么8实际上被移动的位数是:332=1;
就相当于:int c=8>>1;
结果自然是:4
-
Java Class文件是什么
Class类是在Java语言中定义一个特定类的实现。一个类的定义包含成员变量,成员方法,还有这个类实现的接口,以及这个类的父类。Class类的对象用于表示当前运行的Java应用程序中的类和接口。比如:每个数组均属于一个Class类对象,所有具有相同元素类型和维数的数组共享...
-
Java测试题及答案
Java测试题及答案学习是把知识能力思维方法等转化为你的私有产权的重要手段,是公有转私的重要途径。以下是本站小编整理的Java测试题及答案,欢迎学习!试题1指出下面语句没有编译错误的是()。A.longn=999999999999;n=999999999999L;C.longn=999999999999L;D.doubl...
-
计算机二级JAVA考试强化训练题(单选)
为帮助考生们更快第掌握二级JAVA相应知识点,以下是本站小编搜索整理的一份计算机二级JAVA考试强化训练题(单选),供参考练习,预祝考生们考出自己理想的成绩!想了解更多相关信息请持续关注我们应届毕业生考试网!单选题1).下列关于Applet的安全限制的叙述中,错误的是(...
-
新手学习Java最高效的10个计划
对于新手来说学习Java如同堵天书,下面是本站小编收集的关于新手学习Java最高效的10个计划,希望可以为您的学习带来帮助!计划一:了解未来技术发展方向两耳不闻窗外事,在如今是不合适的,尤其是在瞬息万变的互联网时代,作为一个开发者技术跟不上可以去专研,思想要跟不上,...