![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
乐活青年
这个作者很懒,什么都没留下…
展开
-
ArrayBlockingQueue和LinkedBlockingQueue
ArrayBlockingQueue用数组实现的有界阻塞队列。此队列按照先进先出(FIFO)的原则对元素进行排序。默认情况下不保证访问者公平的访问队列,所谓公平访问队列是指阻塞的所有生产者线程或消费者线程,当队列可用时,可以按照阻塞的先后顺序访问队列,即先阻塞的生产者线程,可以先往队列里插入元素,先阻塞的消费者线程,可以先从队列里获取元素。通常情况下为了保证公平性会降低吞吐量。LinkedBlockingQueue基于链表的阻塞队列,同ArrayListBlockingQueue类似,此队列按照原创 2020-11-30 12:11:29 · 8026 阅读 · 0 评论 -
Java虚拟机内存分配与回收策略
1、大多情况下,对象在新生代eden区分配,当eden区内存不足时,虚拟机触发一次minor GC。2、大对象直接进入老年代。避免在eden区和两个survivor区之间发生大量内存复制。3、长期存活的对象进入老年代。虚拟机为每一个对象定义了年龄计数器。如果对象在eden区出生并经历第一次minor GC后仍然存活,并且能被survivor容纳,将被复制到survivor区,并将年龄设为1。对象在survivor区每熬过一次minor GC,对象的年龄就加1。当对象的年龄增加到15(默认)时,就会晋原创 2020-08-13 12:32:53 · 123 阅读 · 0 评论 -
Java虚拟机的内存模型总结
Java虚拟机运行时数据区分为五大区域:程序计数器、Java虚拟机栈、本地方法栈、堆内存、方法区。程序计数器:1、当前线程执行的字节码行号指示器。2、java虚拟机的多线程通过线程轮流切换并分配处理器执行时间片实现,在任何确定的时间点,CPU只会执行一条线程指令。因此,为了切换后能恢复到正确的执行位置,每个线程需要有独立的程序计数器,各线程间互不影响。3、对于Java方法,程序计数器记录虚拟机执行的字节码指令地址。4、对于Native方法,程序计数器为空。5、程序计数器不会发生OOM。原创 2020-08-06 12:26:14 · 136 阅读 · 0 评论 -
关于两道java面试题
1、 public static void main(String[] args) { Thread t = new Thread(){ @Override public void run() { System.out.println("aaa"); } }; t.run(); System.out.println("bbb"); }以上的输出...原创 2018-11-23 14:27:00 · 293 阅读 · 0 评论 -
实现单例模式的最佳实践
单例的枚举实现在《Effective Java》中有提到,因为其功能完整、使用简洁、无偿地提供了序列化机制、在面对复杂的序列化或者反射攻击时仍然可以绝对防止多次实例化等优点,单元素的枚举类型被作者认为是实现Singleton的最佳方法。其实现非常简单,如下:public enum Singleton { INSTANCE; private Singleton() {}}...转载 2018-11-23 15:44:49 · 264 阅读 · 0 评论 -
Android中的清除数据和清除缓存有什么区别,它们分别清除了哪些文件
清除数据和清除缓存的区别反射调用系统隐藏接口,需要准备的东西:一、在AndroidManifest.xml中的manifest标签下添加声明android:sharedUserId="android.uid.system"二、添加如下权限 <uses-permission android:name="android.permission.DELETE_CACHE_FI...原创 2019-01-11 16:11:49 · 10861 阅读 · 1 评论