详解 Java 中的自动装箱与拆箱,5000+字,看了不懂你打我!
什么是自动装箱拆箱?很简单,下面两句代码就可以看到装箱和拆箱过程//自动装箱 Integer total = 99;//自动拆箱 int totalprim = total;简单一点说,装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型。下面我们来看看需要装箱拆箱的类型有哪些:这个过程是自动执行的,那么我们需要看看它的执行过程:反编译 class 文件之后得到如
有了 for (;;) 为什么还需要 while (true) ? 到底哪个更快?
在JDK8u的jdk项目下做个很粗略的搜索:mymbp:/Users/me/workspace/jdk8u/jdk/src$ egrep -nr "for \\(\\s?;\\s?;" . | wc -l 369mymbp:/Users/me/workspace/jdk8u/jdk/src$ egrep -nr "while \\(true
看一遍就理解:IO模型详解
前言什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll跟IO模型有什么关系?有几种经典IO模型呢?BIO、NIO、AIO到底有什么区别的?如果这些问题,你都能很好答上的话,那恭喜你,你对IO的掌握已经很棒啦!如果你对这些问题模棱两可的话,那也没关系,看完这篇文章,就理解啦!什么是IO呢?IO,英文全称是Input/Output,翻译过来就是输入/输
ActiveMQ 生产者和消费者demo
生产者代码package org.mule.util.ansyLog; import java.util.Map; import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;
Java线程(一):线程安全与不安全
作为一个Java web开发人员,很少也不需要去处理线程,因为服务器已经帮我们处理好了。记得大一刚学Java的时候,老师带着我们做了一个局域网聊天室,用到了AWT、Socket、多线程、I/O,编写的客户端和服务器,当时做出来很兴奋,回学校给同学们演示,感觉自己好NB,呵呵,扯远了。上次在百度开发者大会上看到一个提示语,自己写的代码,6个月不看也是别人的代码,自己学的知识也同样如此,学完的知识如果
Java线程(九):Condition-线程通信更高效的方式
接近一周没更新《Java线程》专栏了,主要是这周工作上比较忙,生活上也比较忙,呵呵,进入正题,上一篇讲述了并发包下的Lock,Lock可以更好的解决线程同步问题,使之更面向对象,并且ReadWriteLock在处理同步时更强大,那么同样,线程间仅仅互斥是不够的,还需要通信,本篇的内容是基于上篇之上,使用Lock如何处理线程通信。 &n
死磕java底层(二)—消息服务
这一节作为上一节多线程的延续,先说一下java原生的阻塞队列(Blocking Queue),之后再说一下JMS(Java Messaging Service,java消息服务)以及它的实现之一ActiveMQ消息队列,所以都归并到消息服务中讨论。1.阻塞队列(Blocking Queue)BlockingQueue也是java.util.concurrent下的接口,它解决了多线程中如何高效传输
死磕java底层(一)—多线程
1.线程和进程1.1线程和进程的区别进程 它是内存中的一段独立的空间,可以负责当前应用程序的运行。当前这个进程负责调度当前程序中的所有运行细节(操作系统为进程分配一块独立的运行空间);线程 它是位于进程中,负责当前进程中的某个具备独立运行资格的空间(进程为线程分配一块独立运行的空间); 进程是负责某个程序的执行,线程是负责进程中某个独立功能的运行,一个进程至少要包含一个线程。多线程 在一个进程中可
死磕java底层(三)—反射、动态代理和注解
1.反射介绍1.1反射反射是指程序可以访问,检测,修改它本身状态或行为的一种能力。1.2java的反射机制java的反射机制是指在程序运行状态中,给定任意一个类,都可以获取到这个类的属性和方法;给定任意一个对象都可以调用这个对象的属性和方法,这种动态的获取类的信息和调用对象的方法的功能称之为java的反射机制。 一言以蔽之:反射机制可以让你在程序运行时,拿到任意一个类的属性和方法并调用它。1.3j
学会反射后,我被录取了(干货)
反射的思想及作用有反必有正,就像世间的阴和阳,计算机的0和1一样。天道有轮回,苍天...(净会在这瞎bibi)在学习反射之前,先来了解正射是什么。我们平常用的最多的 new 方式实例化对象的方式就是一种正射的体现。假如我需要实例化一个HashMap,代码就会是这样子。Map<Integer, Integer> map = new HashMap<>();
从JDK 8到JDK 17,GC都有哪些进步?
JDK17 发布已经几个月了,其中不仅包含很多新语言功能,而且与旧版 JDK 相比,性能提升也非常明显。与之前 LTS 版本的 JDK 8 和 JDK 11 相比,JDK17 的性能提升尤为明显。此次性能的提升大部分来自 JVM 的新功能和优化,在本文中我们就来重点谈一谈垃圾收集的改进。最近,我发表过一个演讲,重点介绍了自 JDK 8 以来 G1 中的新特性,本文将在此基础之上进一步扩展,以涵盖
阿里一面:说说你对索引的理解
什么是索引?索引是辅助存储引擎高效获取数据的一种数据结构。很多人形象的说索引就是数据的目录,便于存储引擎快速的定位数据。索引的分类我们经常从以下几个方面对索引进行分类从数据结构的角度对索引进行分类B+treeHashFull-texts索引从物理存储的角度对索引进行分类聚簇索引二级索引(辅助索引)从索引字段特性角度分类主键索引唯一索引普通索引前缀索引从组成索引的字段个数角度分类单列索引联合索引(复
卧槽!Java 中的 xx ≠ null 是什么新语法?
奇怪的不等于(≠)最近,栈长用 IntelliJ IDEA 看源码时发现:咦~这是什么鬼?Java 不等于的写法不是一直都是 != 么?什么时候可以写 ≠ 了??不科学啊~以为我是老花眼了,认真看了几遍,觉得应该是 IDEA 的特效吧,然后去点那个符号,发现也还原不了原样。。。然后互联网网冲浪了一翻,终于被我找到了这个开关:Preferences >
别再到处 new 对象了,试试 3 大工厂模式,真香!!
你还在到处 new 对象吗?单身狗:我没对象,new 怎么了?new 对象本身是没问题的,但也不能全部 new 关键字走天下,其实有更好的方式,合适的时候可以试试工厂模式,代码会更优雅。什么是工厂模式?顾名思义,工厂模式中的 "工厂" 指的是创建对象的工厂,它提供了一种创建对象的最佳方式,也就是工厂模式。工厂模式的好处是这些对象不需要暴露自身的创建过程,统一由工厂模式进行创建和
编写 if 时不带 else,你的代码会更好!
设计更好的软件,替换 If-Else 的 5 种方法。入门到高级示例让我直接说这句话:If-Else 通常是一个糟糕的选择。它导致设计复杂,代码可读性差,并且可能导致重构困难。但是,If-Else 已成为事实上的代码分支解决方案,这确实是有道理的。这是向所有有抱负的开发人员讲授的第一件事。不幸的是,许多开发人员从来没有前进到更合适的分支策略。有些人的口头禅是:If-Else 是一把锤子
Java NIO系列教程(八) SocketChannel
Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道。可以通过以下2种方式创建SocketChannel:打开一个SocketChannel并连接到互联网上的某台服务器。一个新连接到达ServerSocketChannel时,会创建一个SocketChannel。打开 SocketChannel下面是SocketChannel的打开方式:SocketChannel so
Java 中的 clone( ) 和 new,哪个效率更高?
对象创建的几种方法:使用new关键字使用clone方法反射机制反序列化以上四种都可以产生java对象1,3都会明确的显式的调用构造函数2是在内存上对已有对象的影印 所以不会调用构造函数4是从文件中还原类的对象 也不会调用构造函数何为clone()?拷贝对象返回的是一个新的对象,而不是一个对象的引用地址;拷贝对象已经包含原来对象的信息,而不是对象的初始信息,即每次拷贝动作不是针对一个全新对象的创建。
Java NIO系列教程(七) FileChannel
Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。打开FileChannel在使用FileChannel之前,必须先打开它。但是,我们无法直接打开一个FileChannel,需要通过使用一个InputStream、OutputStream或RandomAccessFile来获取一个File
Java NIO系列教程(五) 通道之间的数据传输
在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel。transferFrom()FileChannel的transferFrom()方法可以将数据从源通道传输到FileChannel中(译者注:这个方法在JDK文档中的解释为将字节从给定的可读取字节通道传输到此通道的文件中)。
Java NIO系列教程(二) Channel
Java NIO的通道类似流,但又有些不同:既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。通道可以异步地读写。通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示:Channel的实现这些是Java NIO中最重要的通道的实现:FileChannelDatagramChannel