JVM 在进行 GC 时,并非每次都对堆内存(新生代、老年代;方法区)区域一起回收的,大部分时候回收的都是指新生代。针对 HotSpot VM 的实现,它里面的 GC 按照回收区域又分为两大类:部分收集(Partial GC),整堆收集(Full GC)
方案1:采用2-Bitmap(每个数分配2bit,00表示不存在,01表示出现一次,10表示多次,11无意义)进行,共需内存2^32 * 2 bit=1 GB内存,还可以接受。所描完事后,查看bitmap,把对应位是01的整数输出即可。然后在小文件中找出不重复的整数,并排序。
采用局部淘汰法。选取前100个元素,并排序,记为序列L。然后一次扫描剩余的元素x,与排好序的100个元素中最小的元素比,如果比这个最小的要大,那么把这个最小的元素删除,并把x利用插入排序的思想,插入到序列L中。依次循环,知道扫描了所有的元素。复杂度为O(100w*100)。
AQS是一个用来构建锁和同步器的框架,使用AQS能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的ReentrantLock,Semaphore,其他的诸如ReentrantReadWriteLock,SynchronousQueue,FutureTask等等皆是基于AQS的。
Thread.sleep()不会释放占有的锁,Object.wait()会释放占有的锁;Thread.sleep()必须传入时间,Object.wait()可传可不传,不传表示一直阻塞下去;Thread.sleep()到时间了会自动唤醒,然后继续执行;Object.wait()不带时间的,需要另一个线程使用Object.notify()唤醒; Object.wait()带时间的,假如没有被notify,到时间了会自动唤醒