
Java
文章平均质量分 68
编码小农
浙江大学软件学院
展开
-
Java 传值和传引用的区别
首先对传值和传引用要有个基本的概念* 传值:传递的是值的副本。方法中对副本的修改,不会影响到调用方。* 传引用:传递的是引用的副本,共用一个内存,会影响到调用方。此时,形参和实参指向同一个内存地址。对引用副本本身(对象地址)的修改,如设置为null,重新指向其他对象,不会影响到调用方。原创 2018-09-18 21:16:52 · 13335 阅读 · 6 评论 -
Synchronized 关键字原理
众所周知synchronized关键字是解决并发问题常用解决方案,有以下四种使用方式:修饰代码块,即同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象。修饰方法,即同步方法,其作用的范围是整个方法,作用的对象是调...转载 2018-10-13 00:07:04 · 67325 阅读 · 9 评论 -
Java 中的原子操作
写这篇博客起源于一道面试题 i++ 是不是原子操作?那到底什么是原子操作?所谓原子操作,就是“不可中断的一个或一系列操作”。在确认一个操作是原子的情况下,在多线程环境里,我们可以避免仅仅为保护这个操作在外围加上性能昂贵的锁,甚至借助于原子操作,我们可以实现互斥锁。Java中有哪些原子操作呢?查询资料后我总结出了以下几个:原始类型:原始类型(long 和 double 的赋值操作在32位操...原创 2018-10-13 19:54:17 · 4188 阅读 · 0 评论 -
Java 类加载的过程和双亲委派机制
1. 类加载机制的层次结构加载:加载阶段会在内存中生成一个代表该类的Class对象,作为访问方法区该类各种数据的入口。加载阶段,虚拟机完成以下工作:通过一个类的全限定名来获取其定义的二进制字节流。将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。在Java堆中生成一个代表这个类的java.lang.Class对象,作为对方法区中这些数据的访问入口。注意:虚拟机规范...原创 2018-09-28 23:56:43 · 5519 阅读 · 0 评论 -
Spring Cloud构建微服务架构(一):服务注册与发现(Eureka)
1. Spring Cloud简介Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。Spring Cloud 全家桶:-Spring Cloud服务注册中心Spring Cloud...原创 2018-09-29 17:10:15 · 6067 阅读 · 0 评论 -
JVM逃逸分析 - JVM优化技术
概念逃逸分析,是一种可以有效减少Java程序中同步负载和内存堆分配压力的跨函数全局数据流分析算法。通过逃逸分析,Java Hotspot编译器能够分析出一个新的对象的引用的使用范围从而决定是否要将这个对象分配到堆上。在计算机语言编译器优化原理中,逃逸分析是指分析指针动态范围的方法,它同编译器优化原理的指针分析和外形分析相关联。当变量(或者对象)在方法中分配后,其指针有可能被返回或者被全局引用,...原创 2018-10-17 09:00:01 · 1913 阅读 · 0 评论 -
浅谈Java内部类
1. 定义内部类的定义十分简单,当我们将一个类的定义放在另一个类的定义内部时,这个类就是内部类。2. 为什么要使用内部类?利用内部类提供的继承多个具体的或者抽象的类的能力来解决使用接口无法解决的程序设计问题。注意:内部类是个编译时的概念,编译成功后,它就与外围类属于两个完全不同的类(当然它们之间还是有联系的)。对于一个名为OuterClass的外围类和一个名为InnerClass的内部类,...原创 2018-10-26 16:34:06 · 2825 阅读 · 0 评论 -
Java Annotation(注解)
1. 概念Annotation 是 Java5 开始引入的特性。注解相当于是一种嵌入在程序中的元数据,可以使用注解解析工具或编译器对其进行解析,也可以指定注解在编译期或运行期有效。这些元数据与程序业务逻辑无关,并且是供指定的工具或框架使用的。元注解 Meta Annotation元注解的作用就是负责注解其他注解。Java5定义了4个标准的 Meta Annotation 类型,它们被用来提供...原创 2018-10-29 19:51:01 · 2884 阅读 · 0 评论 -
List 循环遍历中删除元素问题二
问题一可以看我之前写的博客 List 循环遍历中删除元素问题一。问题二主要讲的是博主在今天的开发中遇到的一个问题。先来看下是什么问题让博主继上次问题后又写了问题二。问题一中讲到通过Iterator的remove方法解决链表中循环删除元素的问题。来看下简单的代码:public class ListTest { public static void main(String[] args...原创 2018-11-09 23:03:21 · 2792 阅读 · 0 评论 -
Java 中创建对象的方式
1. 使用new关键字创建对象Student stu = new Student();2. 使用Class类的newInstance方法(反射机制)// 调用无参的构造器创建对象Student stu = (Student) Class.forName("Student类全限定名").newInstance(); Student stu = Student.class.newInst...原创 2018-11-16 23:37:16 · 1834 阅读 · 0 评论 -
深入浅出Java并发包(会持续整理、更新)
Java 5添加了并发编程java.util.concurrent包。JUC大体结构:1. J.U.C.collections首先介绍并发工具包,这个包包含了一系列能够让 Java 并发编程变得更加简单轻松的类。阻塞队列 BlockingQueueBlockingQueue接口表示一个线程存放和提取实例的队列,通常用于一个线程生产对象,而另外一个线程消费这些对象的场景。下图是对这个原理的...原创 2018-10-12 00:10:46 · 4103 阅读 · 0 评论 -
Java 并发:volatile 内存可见性和指令重排
1. 正确认识 volatilevolatile变量具有synchronized的可见性特性,但是不具备原子特性。volatile变量可用于提供线程安全,但是只能应用于非常有限的一组用例:多个变量之间或者某个变量的当前值与修改后值之间没有约束。因此,单独使用volatile还不足以实现计数器、互斥锁或任何具有与多个变量相关的不变式(Invariants)的类(例如 “start <=end...原创 2018-09-26 19:09:16 · 2993 阅读 · 0 评论 -
Java 的四种引用类型
本篇主要介绍Java强软弱虚引用的区别以及GC对他们执行怎样的操作。首先介绍下为什么要有引用类型?我们对于一个对象的坚挺程度的要求是不一样的,这通常表现为我们希望的垃圾回收器对它的回收时机的不同。对于一些比较重要的对象,我们希望垃圾回收器永远不去回收它(即使是内存不足的情况)。其次介绍Java的四种引用类型强引用(Strong Reference)强引用就是我们平时写的新建对象的用...原创 2018-09-23 18:02:42 · 5332 阅读 · 0 评论 -
List 循环遍历中删除元素问题一
一个ArrayList在循环过程中删除,会不会出问题,为什么?ArrayList中的remove方法(注意ArrayList中的remove有两个同名方法,只是输入参数不同,这里看的是输入参数是Object的remove方法)是怎么实现的:public boolean remove(Object o) { if (o == null) { for (int ...原创 2018-09-19 09:36:25 · 3987 阅读 · 1 评论 -
Java 线程池全面解析
转载自 https://mp.weixin.qq.com/s/fFZfEe10bdVKBndrEFH4fA1. 什么是线程池?很简单,简单看名字就知道是装有线程的池子,我们可以把要执行的多线程交给线程池来处理,和连接池的概念一样,通过维护一定数量的线程池来达到多个线程的复用。2. 线程池的好处我们知道不用线程池的话,每个线程都要通过new Thread(xxRunnable).start(...转载 2018-09-23 22:42:55 · 33531 阅读 · 1 评论 -
动态代理的两种方式以及区别
动态代理的两种方式,以及区别。JDK动态代理:利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。CGlib动态代理:利用ASM(开源的Java字节码编辑库,操作字节码)开源包,将代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。区别JDK代理只能对实现接口的类生成代理;CGlib是针对类实现代理,对指定的类生成一个子类,并覆...原创 2018-09-19 12:37:09 · 58587 阅读 · 10 评论 -
接口和抽象类的区别(特别注意JDK8的接口可以有实现)
接口和抽象类的区别。先来张图大致了解一下两者的区别:注:接口中只能有static、final变量,不能有其他变量。表格中的一处错误:抽象类不能有default修饰符。Java 8新特性–接口默认方法默认方法是在接口中的方法签名前加上default关键字的实现方法。/** * 简单例子 */interface InterfaceA { default void foo(...原创 2018-09-19 16:45:39 · 16343 阅读 · 5 评论 -
JVM 内存结构
JVM 内存结构JVM内存划分/运行时数据区根据线程私有共享来划分jvm内存区程序计数器(Program Counter Register)当前线程所执行的字节码的行号指示器,在虚拟机的模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、异常处理、线程恢复等基础功能都需要依赖计数器完成。虚拟机栈(Vm Stack)描述Ja...原创 2018-09-19 20:29:22 · 4965 阅读 · 0 评论 -
JVM 内存溢出
JVM 内存溢出1. 堆内存溢出对象所占空间超过最大堆容量时,就会产生OutOfMemoryError的异常。堆内存异常示例如下:/** * 设置最大堆最小堆:-Xms20m -Xmx20m * 运行时,不断在堆中创建OOMObject类的实例对象,且while执行结束之前,GC Roots(代码中的oomObjectList)到对象(每一个OOMObject对象)之间有可达路径,...转载 2018-09-19 23:05:05 · 4508 阅读 · 0 评论 -
线程生命周期以及线程创建的三种方式
1. 线程生命周期线程生命周期图新建状态(New)当线程对象创建后,即进入新建状态,如:Thread t = new MyThread();就绪状态(Runnable)当调用线程对象的start()方法时,线程即进入就绪状态。处于就绪状态的线程只是说明此线程已经做好准备,随时等待CPU调度执行,并不是说执行了start()方法就立即执行。运行状态(Running)当CP...原创 2018-09-25 18:54:31 · 4776 阅读 · 0 评论 -
详解Object类中的方法
Object类中的方法。public final native Class<?> getClass()public native int hashCode()public boolean equals(Object obj)protected native Object clone() throws CloneNotSupportedExceptionpublic Str...原创 2018-09-20 12:46:00 · 2565 阅读 · 0 评论 -
String、StringBuffer、StringBuilder的区别(最好能自己读源码)
String、StringBuffer、StringBuilder区别。1. String首先要明确一点,String不属于Java的八大基本数据类型。String是不可变对象,因此每次在对String类进行改变的都会生成一个新的String对象,然后将指针指向新的String对象。String.intern方法(Native方法)会在运行时常量池中查找是否存在内容相同的字符串。pu...原创 2018-09-20 16:12:05 · 1870 阅读 · 0 评论 -
Spring Cloud构建微服务架构(二):路由网关(Zuul)
上一篇博客简单介绍了Spring Cloud,微服务的架构,如何解决服务治理中服务统一管理的问题,以及搭建基础的Spring Cloud的教程 。今天则主要介绍Spring Cloud的另一个服务治理组件——服务网关,或者说路由网关。1. Zuul简介Zuul的主要功能是路由转发和过滤器。路由功能是微服务的一部分,比如/api/user转发到user服务,/api/shop转发到shop服务。...原创 2018-10-01 23:31:11 · 2966 阅读 · 0 评论 -
深入剖析Java中的装箱和拆箱
转载自 http://www.cnblogs.com/dolphin0520/自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题。本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱、拆箱相关的问题。一、什么是装箱?什么是拆箱?Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不...转载 2018-09-20 23:34:50 · 2473 阅读 · 0 评论 -
Spring 中使用到哪些设计模式
转载自itxxz.com/a/javashili/tuozhan/2014/0601/7.html1. 简单工厂模式简单工厂模式又叫做静态工厂方法(StaticFactory Method)模式,它不属于23种GOF设计模式之一。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识...转载 2019-02-21 12:48:42 · 1743 阅读 · 0 评论