- 博客(9)
- 资源 (1)
- 收藏
- 关注
原创 如何拯救濒临死亡的对象?
问题 : 当对象经过可达性分析算法,判定对象将要被回收,对象一定就非死不可吗? 解答: 这里引用《深入理解java虚拟机》当中的原话,“即使在可达性分析算法中不可达的对象,也并非是“非死不可”的,这时候它们暂时处 于“缓刑”阶段,要真正宣告一个对象死亡,至少要经历两次标记过程:如果对象在进行可达 性分析后发现没有与GC Roots相连接的引用链,那它将会被第一次标记并且进行一次...
2019-12-26 15:32:48
309
原创 m个整数,任意组合(整数不可拆分),找到最大的组合结果 2,23,结果是232
解题思路:要保证89,8这种谁大,首先需要比较第一位的两个8,显然一样大,继续比较89的第二位9和8谁大,显然9更大,这样组合就是898,而不是889。可以抽象成A1,A2,...,Am。 对于A1和A2,A1放在前面的条件是第一位大于A2第一位,如果等于,则继续比较,例如89 87 ,第二位9大于第二位的8,满足条件,以此类推,但是对于89 8这种,比较第一位是相等的,接下来比较第二位,但是8...
2019-12-08 20:03:32
271
原创 记一个单链表面试问题的解法
问题描述 给定一个单链表的头节点 head,实现一个调整单链表的函数,使得每K个节点之间为一组进行逆序,并且从链表的尾部开始组起,头部剩余节点数量不够一组的不需要逆序。(不能使用队列或者栈作为辅助) 例如:链表:1->2->3->4->5->6->7->8->null, K = 3。那么 6->7->8,3->4-&...
2019-11-20 14:17:58
189
原创 synchronized 方法和块的区别(JVM)
"如果应用场景需要一个更大范围的原子性保证(经常会遇到),Java内存模型还提供了lock和unlock操作来满足这种需求,尽管虚拟机未把lock和unlock操作直接开放给用户使用,但是却提供了更高层次的字节码指令monitorenter和monitorexit来隐式地使用这两个操作,这两个字节码指令反映到Java代码中就是同步块——synchronized关键字,因此在synchron...
2019-08-31 11:46:00
466
原创 java 对象结构笔记
一、概述 java对象结构主要分为对象头,数据和填充字节 二、对象头 对象头包括两部分信息,第一部分用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等,这部分数据的长度在32位和64位的虚拟机(未开启压缩指针)中分别为32bit和64bit,官方称它为“Mark Word”。对象需要存储的...
2019-07-26 18:19:21
242
原创 ArrayList与LinkedList循环删除元素浅谈
一、List删除元素方式 List接口当中主要提供了下列两种方法删除元素 //索引删除 E remove(int index); //直接元素删除 boolean remove(Object o); 继承 Iterable<T> 中Iterator<T> iterator() 接口提供删除方法,remove方法需要子类实现 default vo...
2019-07-26 17:48:48
2884
2
原创 代码优化-避免内存泄漏的一次浅谈
1.代码场景 当我们写java程序的时候,不可避免的需要一些集合操作,有时候使用不当,导致GC不能够回收释放被集合占用的内存,例如下面代码 protected List<Map<String, Object>> findListBySql(String sql) { List<Map<String, Object>> list = t...
2018-12-07 14:23:35
523
2
原创 JAVA synchronized与lock的区别及多线程的同步和通信
1.synchronized与lock的区别 synchronized是java内置的关键字,Lock是jdk1.5提供的java.util.concurrent包中提供的锁机制。 synchronized在代码执行完成之后会自动释放锁,lock机制需要手动调用unLock方法释放锁。高并发环境下synchronized会导致性能严重下降,这个时候推荐使用Lock( 实现类 Reentra...
2018-11-28 21:46:33
576
原创 NIO和IO复制速度测试(文件大小450M)
1.测试传统的IO FileInputStream FileOutputStream @Test public void testIOIs() throws IOException { File f = new File("D:\\2.exe"); if (f.exists()) { f.delete(); } ...
2018-03-06 15:26:04
593
1
rabbitmq的封装
2019-05-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人