
Java语言特性
Java语言的相关干货
全菜工程师小辉
微信公众号:全菜工程师小辉。欢迎关注~
展开
-
基于蚁群算法求解求解TSP问题(JAVA)
原文地址:http://blog.youkuaiyun.com/wangqiuyun/article/details/8878298 一、TSP问题 TSP问题(Travelling Salesman Problem)即旅行商问题,又译为旅行推销员问题、货郎担问题,是数学领域中著名问题之一。假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,转载 2017-09-12 10:47:41 · 2919 阅读 · 0 评论 -
JDK8函数式编程快速入门干货
Java8引入函数式编程,极大地提高了编码效率,对于习惯了原有Java代码风格的coder,确实需要好好熟悉一番才能熟练地coding。 本文每一条讲解都配置了最简短的代码,适合快速入门或者字典使用,但阅读之后还是需要多看函数原型多看源码,灵活使用为好。 本文目录: 文章目录函数式编程语法常见的Java函数式接口ConsumerSupplierFunctionPredicateBinaryOper...原创 2019-05-03 06:33:27 · 6038 阅读 · 0 评论 -
SpringIoC和SpringMVC的快速入门
Spring的优势? 降低了组件之间的耦合性 ,实现了软件各层之间的解耦 可以使用容易提供的众多服务,如事务管理,消息服务等 容器提供单例模式支持 容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 Spring的IoC机制降低了业务对象替换的复杂性 容器提供了众多的辅助类,能加快应用的开发 Spring对于主流的应用框架提供了集成支持,如Hibernate,JPA,Mybati...原创 2019-05-12 21:05:01 · 5940 阅读 · 0 评论 -
Java多线程之原子操作类
本文目录: 文章目录CAS原理与问题CAS的操作过程CAS的问题Atomic包的使用原子更新基本类型LongAdder原子更新数组类型原子更新引用类型原子更新字段类型解决CAS的ABA问题AtomicStampedReference踩过的坑 在并发编程中很容易出现并发安全问题,最简单的例子就是多线程更新变量i=1,多个线程执行i++操作,就有可能获取不到正确的值,而这个问题,最常用的方法是通过Sy...原创 2019-06-03 22:11:29 · 5896 阅读 · 0 评论 -
Java中容易被遗忘的default关键字
default关键字 default关键字在JDK8中有两个用处。 1.在switch语句的时候使用default int day = 8; String dayString; switch (day) { case 1: dayString = "Monday"; break; case 2: dayString = "Tuesday"; ...原创 2019-07-10 08:00:00 · 6208 阅读 · 0 评论 -
JVM内存模型和垃圾回收机制
JVM内存模型 根据Java虚拟机规范,Java数据区域分为五大数据区域。 其中方法区和堆是所有线程共享的,虚拟机栈、本地方法栈和程序计数器则为线程私有的。 有的博客称方法区是永久代,那是因为前者是JVM的规范,而后者则是JVM规范的一种实现,并且只有HotSpot才有永久代, JDK8中已经彻底移除了方法区,JDK8中引入了一个新的内存区域叫metaspace(元空间),后边详细介绍...原创 2019-06-26 08:00:00 · 7074 阅读 · 0 评论 -
Java类加载及对象创建过程详解
类加载过程 类加载的五个过程:加载、验证、准备、解析、初始化。 加载 在加载阶段,虚拟机主要完成三件事: 通过一个类的全限定名来获取定义此类的二进制字节流。 将这个字节流所代表的静态存储结构转化为方法区域的运行时数据结构。 在Java堆中生成一个代表这个类的java.lang.Class对象,作为方法区域数据的访问入口。 验证 验证阶段作用是保证Class...原创 2019-06-27 08:00:00 · 10600 阅读 · 2 评论 -
Java多线程的可见性与有序性
多线程的可见性 一个线程对共享变量值的修改,能够及时的被其他线程看到。 共享变量 如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量。 Java内存模型 JMM(Java Memory Model,简称JMM)描述了Java程序中各种变量(线程共享变量)的访问规则,以及在JVM中将变量存储到内存和从内存中读取出变量这样的底层细节。它遵循四个原则: 所...原创 2019-06-19 08:00:00 · 6350 阅读 · 0 评论 -
Java异常处理扫盲贴
Throwable类是Java语言所有错误或异常的超类(两个直接子类:Error和Exception) Error vs Exception Java程序在执行过程中所发生的异常事件可分为两类: Error:Error类对象由Java虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关。例如,Java虚拟机运行错误(Virtual MachineError),当JVM不再有继续执行操...原创 2019-06-18 08:00:00 · 5941 阅读 · 0 评论 -
快速了解Java线程池
之所以要使用线程池,是因为使用new Thread在大型项目中是有弊端的: 每次new Thread新建对象,性能差 线程缺乏统一管理,可能无限制的新建线程,相互竞争,有可能会造成过多占用系统资源而导致OOM 缺少更多功能,如定期执行等 而线程池的好处: 重用存在的线程,减少对象创建、消亡的开销,性能佳 可有效控制最大并发线程数,提高系统资源利用率,同...原创 2019-06-17 08:00:00 · 5961 阅读 · 0 评论 -
有关JIT你需要知道的
JVM对代码执行的优化可分为运行时(runtime)优化和即时编译器(JIT)优化。 运行时优化主要是解释执行和动态编译通用的一些机制。比如说锁机制(如偏斜锁)、内存分配机制(如TLAB)等。除此之外,还有一些专门用于优化解释执行效率的,比如说模版解释器、内联缓存(inline cache,用于优化虚方法调用的动态绑定) 什么是 JIT? 在部分的商用虚拟机(Sun HotSpot、IBM J...原创 2019-06-16 08:00:00 · 6819 阅读 · 0 评论 -
一网打尽Java中锁的分类
来一段很常见的死锁代码,当个开胃菜: class Deadlock { public static String str1 = "str1"; public static String str2 = "str2"; public static void main(String[] args) { Thread thread1 = n...原创 2019-06-15 08:00:00 · 6124 阅读 · 0 评论 -
详解Java多线程锁之Lock和ReadWriteLock
Lock接口的实现类 ReentrantLock是实现了Lock接口的类,属于独享锁,独享锁在同一时刻仅有一个线程可以进行访问。Lock接口很简单,实现了如下: public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException; boole...原创 2019-06-14 08:00:00 · 6804 阅读 · 0 评论 -
详解Java多线程锁之synchronized
synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法。 synchronized的四种使用方式 修饰代码块:被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用于调用对象 修饰方法:被修饰的方法称为同步方法,其作用的范围是整个方法,作用于调用对象 注意:synchronized修饰方法时必须是显式调用,如果没有显式调用...原创 2019-06-13 08:36:27 · 6268 阅读 · 0 评论 -
彻底搞懂java程序的初始化顺序
使用场景 在java程序中,当实例化对象时,对象的所在类的所有成员变量首先要进行初始化,只有当所有类成员完成初始化后,才会调用对象所在类的构造函数创建对象。 原则 变量优先于块、静态优先于非静态。 父类优先于派生类初始化。 按照成员变量定义的顺序来进行初始化,即使变量定义散布于方法定义之中,它们仍然在任何方法(包括构造器)被调用前初始化。 初始化顺序 父类...原创 2019-08-09 08:00:00 · 3042 阅读 · 0 评论 -
一文搞定Java热更新
Java热更新 在持续交付的时代,重新部署一个新的版本只需要点击一下按钮。但在有的情况下,重新部署过程可能比较复杂,停机是不被允许的。所以JVM提供了另外一种选择:在不重启应用的前提下进行小幅改动,又称热更新。 对于某些大型的应用来说,每次的重启都需要花费大量的时间成本,所以,如果能在不重启虚拟机的情况下更新一个类,在某些业务场景下变得十分重要。比如很多脚本语言就支持热替换,例如服务器端...原创 2019-09-25 08:00:00 · 3775 阅读 · 3 评论