“~”
计算机中以补码存储。
正数的补码是他本身,复数的补码是等于其对应的正数的反码加一
10的存储为00000000 00000000 00000000 00001010
~10的原码为11111111 11111111 11111111 11110101(10取反)
~10的反码为10000000 00000000 00000000 00001010(最高位符号位,不变,其余位取反)
~10的补码为10000000 00000000 00000000 00001011(负数的补码=反码+1)
有个公式,~n = -n -1 , ~10 = -11
GC
Java中,堆划分为老年代(Old)和新生代(Young)。Young又分为:Eden、From Survivor、To Survivor。
所有创建的对象都创建在Eden区,当Eden区满了触发新生代的Minor GC,将Eden区和非空闲区Survivor区存活的对象直接复制到另一个空闲的Survivor。新生代的Minor GC就是在Form Survivor和To Survivor之间相互复制存活的对象,知道Survivor满为止。
当Survivor满了之后就通过Minor GC复制到老年代,如果老年代也满了就会触发Full GC,针对整个栈区进行垃圾回收。
如果持久代满了也会触发 Full GC
多线程和多进程
子进程会获得父进程的所有堆和栈的数据;
线程与同进程的其它线程共享数据,拥有自己的栈空间。
线程在同一个地址空间内。