随笔分类 -  Java基础

摘要:1、Unsafe类的作用 可以直接操作堆外内存,可以随意查看及修改JVM中运行时的数据结构,例如查看和修改对象的成员,Unsafe的操作粒度不是类,而是数据和地址。 另外,还支持一些CAS原子操作 2、获取Unsafe的对象 Unsafe不能直接通过new Unsafe()或者调用Unsafe.ge 阅读全文
posted @ 2019-06-20 15:31 提拉没有米苏 阅读(442) 评论(0) 推荐(0)
摘要:在HotspotJVM中,32位机器下,Integer对象的大小是int的几倍? 我们都知道在java语言规范已经规定了int的大小是4个字节,那么Integer对象的大小是多少呢?要知道一个对象的大小,那么必须需要知道对象在虚拟机中的结构是怎样的,来看看Hotsopt中对象在内存中的结构: 在上面 阅读全文
posted @ 2019-02-20 16:21 提拉没有米苏 阅读(1091) 评论(0) 推荐(1)
摘要:两个引用指向同一个对象的内存图 阅读全文
posted @ 2019-01-16 17:51 提拉没有米苏 阅读(294) 评论(0) 推荐(0)
摘要:1、为什么要使用intern()方法 intern方法设计的初衷是为了重用string对象,节省内存 用代码实例验证下 这个例子,为了证明使用intern比不使用消耗的内存更少。 先定一个长度为10的Integer数组,并随机为其赋值,在通过for循环为长度为10w的String对象依次赋值,这些值 阅读全文
posted @ 2019-01-16 16:30 提拉没有米苏 阅读(1288) 评论(0) 推荐(0)
摘要:字符串常量池也是运行时常量池 jdk1.6中,它是在方法区中,属于“永久代” jdk1.7中,它被移除方法区,放在java堆中 jdk1.8中,取消了“永久代”,将常量池放在元空间,与堆独立了 String.intern()在JDK1.6中,会先判断常量池中是否存在当前字符串,不存在就会将当前字符串 阅读全文
posted @ 2019-01-14 14:52 提拉没有米苏 阅读(1427) 评论(0) 推荐(0)
摘要:一、首先我们讲讲递归 1、递归的本质是,某个方法中调用了自身,本质还是调用了一个方法,只是这个方法正好是自身而已 2、递归因为是在自身中调用自身,所以会带来以下三个显著特点: 1。调用的是同一个方法 2.因为1,所以只需要写一个方法,就可以让你轻松调用无数次(不用一个个写,你定个n就有n个方法),所 阅读全文
posted @ 2018-11-22 15:24 提拉没有米苏 阅读(640) 评论(0) 推荐(0)
摘要:同一进程 重入锁 使用ReentrantLock获取锁的时候回判断当前线程是否为获取锁的线程,如果是则将同步的状态+1,释放锁的时候则将状态-1,只有将同步状态的次数置为0的时候才会是最终释放锁。 读写锁 使用ReentrantReadWriteLock,同时维护一对锁:读锁和写锁。当写线程访问时则 阅读全文
posted @ 2018-09-18 21:00 提拉没有米苏 阅读(138) 评论(0) 推荐(0)
摘要:以下基于 JDK1.7 分析 如图所示,HashMap底层是基于数组和链表实现的,其中有两个重要的参数: 容量 负载因子 容量的默认大小是16,负载因子是0.75,当HashMap的size > 16* 0.75时就会发生扩容(容量和负载因子都可以自由调整) put方法 首先会将传入的key做has 阅读全文
posted @ 2018-09-18 16:04 提拉没有米苏 阅读(173) 评论(0) 推荐(0)
摘要:结论:1、不管有木有出现异常,finally块中代码都会执行;2、当try和catch中有return时,finally仍然会执行;3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任 阅读全文
posted @ 2018-09-03 10:01 提拉没有米苏 阅读(132) 评论(0) 推荐(0)
摘要:Java中的Map如果在遍历过程中要删除元素,除非通过迭代器自己的remove()方法,否则就会导致抛出ConcurrentModificationException异常。JDK文档中是这么描述的: The iterators returned by all of this class's "col 阅读全文
posted @ 2018-06-13 15:33 提拉没有米苏 阅读(1252) 评论(1) 推荐(0)
摘要:1、Windows下用法 在Windows上,可以使用 用法:java your-jar-lib-folder/* your-main-class your-jar-lib-folder为存放一堆jar文件的路径。 your-main-class为要运行的具有main方法的主类。 JDK 1.7及以 阅读全文
posted @ 2018-06-08 17:55 提拉没有米苏 阅读(3284) 评论(0) 推荐(0)
摘要:1、内部和普通类一样,也是可以被继承,这样给本来就十分灵活的内部类增加了更好的灵活性和代码复用性,只是内部类的继承和普通类有一些不同之处,是在使用时要多加注意的,因为内部类的创建需要外部类的引用 所以在内部类的继承上需要外部类的协助。 首先在继承语句extends处,注意命名空间,需要加上外围类名, 阅读全文
posted @ 2018-06-07 17:22 提拉没有米苏 阅读(530) 评论(0) 推荐(0)
摘要:1、使用LockSupport的part/unpark实现 运行结果: before parkbefore unparkBlocker info ParkAndUnparkDemoafter parkBlocker info nullafter unpark说明:本程序先执行park,然后在执行un 阅读全文
posted @ 2018-04-10 16:54 提拉没有米苏 阅读(360) 评论(0) 推荐(0)
摘要:1、使用Object的wait和notify 运行结果:before waitbefore notifyafter notifyafter wait两线程执行图序: 阅读全文
posted @ 2018-04-10 16:35 提拉没有米苏 阅读(173) 评论(0) 推荐(0)
摘要:package java.util; import sun.misc.SharedSecrets; import java.io.IOException; import java.io.InvalidObjectException; import java.io.Serializable; import java.lang.reflect.ParameterizedType; import ... 阅读全文
posted @ 2018-03-26 15:42 提拉没有米苏 阅读(409) 评论(0) 推荐(0)
摘要:1、左移( << ) 运算结果: 1012010100 2、右移(>>) 运算结果: 10111 3、无符号右移( >>> ) 我们知道在Java中int类型占32位,可以表示一个正数,也可以表示一个负数。正数换算成二进制后的最高位为0,负数的二进制最高为为1 例如 -5换算成二进制后为: 1111 阅读全文
posted @ 2018-03-21 16:11 提拉没有米苏 阅读(180) 评论(0) 推荐(0)
摘要:依据:平衡二叉树的左右子树高度差不超过1 阅读全文
posted @ 2018-03-15 17:10 提拉没有米苏 阅读(254) 评论(0) 推荐(0)
摘要:双亲委派模型的工作流程是:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把请求委托给父加载器去完成,依次向上,因此,所有的类加载请求最终都应该被传递到顶层的启动类加载器中,只有当父加载器在它的搜索范围中没有找到所需的类时,即无法完成该加载,子加载器才会尝试自己去加载该类。双 阅读全文
posted @ 2018-03-14 16:28 提拉没有米苏 阅读(440) 评论(0) 推荐(0)
摘要:问题分析:why编译不通过呢,问题定位在String和Person对象 查看String的源码,原来是String自身实现Comparable接口,然而Person类没有实现Comparable接口 public final class String implements java.io.Seria 阅读全文
posted @ 2018-03-13 16:41 提拉没有米苏 阅读(234) 评论(0) 推荐(0)
摘要:在多线程的场景下,有些并发流程需要人为来控制,在JDK的并发包里提供了几个并发工具类:CountDownLatch、CyclicBarrier、Semaphore。 一、CountDownLatch 这个CountDownLatch的构造函数接受一个int类型的参数作为计数器,N表示阻塞的线程必须等 阅读全文
posted @ 2018-03-06 15:35 提拉没有米苏 阅读(156) 评论(0) 推荐(0)