Java后端技术实践
文章平均质量分 90
深入学习Java集合、IO、多线程、网络编程等
吃果冻不吐果冻皮
坚持输入+输出学习模式,并让其变成一种习惯。
展开
-
浅述Java虚拟机(HotSpot)的内存回收细节
之前介绍了如何进行 JVM 内存自动回收以及常见的垃圾收集算法。现在Java应用越做越庞大,光是方法区的大小就常有数百上千兆, 里面的类、 常量等更是恒河沙数。因此,Java虚拟机实现这些算法时,必须对算法的执行效率有严格的考量, 才能保证虚拟机高效运行。今天我们一起来探讨下HotSpot虚拟机如何发起内存回收、 如何加速内存回收, 以及如何保证回收正确性等问题?如何发起内存回收?当前主流的JVM都是采用可达性分析算法通过根节点枚举来找到已经死去的对象。固定可作为GC Roots的节点主要在全局性原创 2022-03-27 15:29:38 · 274 阅读 · 0 评论 -
浅析JVM中常见的垃圾收集算法
从如何判定对象消亡的角度出发, 垃圾收集算法可以划分为“引用计数式垃圾收集”(ReferenceCounting GC) 和“追踪式垃圾收集”(Tracing GC) 两大类, 这两类也常被称作“直接垃圾收集”和“间接垃圾收集”。由于主流Java虚拟机中均未涉及引用计数式垃圾收集算法,因此,本文所有算法均属于追踪式垃圾收集的范畴。对于JAVA虚拟机来说,不同的垃圾收集器采用了不同的垃圾收集算法。同样,不同的虚拟机,操作内存的方法也各不相同,下面介绍几种常见垃圾收集算法的思想。常见GC的含义部分收原创 2022-03-26 20:08:38 · 985 阅读 · 0 评论 -
浅谈JVM中如何自动回收内存
对于从事C、 C++程序开发的开发人员来说, 在内存管理领域, 他们既是拥有最高权力的“皇帝”,又是从事最基础工作的劳动人民——既拥有每一个对象的“所有权”, 又担负着每一个对象生命从开始到终结的维护责任。而对于Java程序员来说, 在虚拟机自动内存管理机制的帮助下,不再需要为每一个new操作去写配对的delete/free代码, 因此,不容易出现内存泄漏和内存溢出问题。今天,我们来聊聊JVM垃圾收集器是如何来回收死去(不可能再被任何途径使用)的对象。通常,垃圾收集需要完成的三件事情:哪些内存原创 2022-03-26 17:05:25 · 2545 阅读 · 0 评论 -
浅析JVM几种常见OOM异常原因及解决方案
在《Java虚拟机规范》的规定里,除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError(下文称OOM) 异常的可能。下面我们来谈谈实际工作中出现内存溢出异常时, 我们应该如何根据异常的提示信息迅速得知是哪个区域的内存溢出,以及怎样的代码可能会导致这些区域内存溢出,当出现这些异常后该如何处理?Java堆溢出异常原因Java堆用于储存对象实例,我们只要不断地创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么随着对象数量的增加,总原创 2022-03-24 21:17:10 · 4781 阅读 · 0 评论 -
探索HotSpot虚拟机对象的奥秘
之前探讨了Java虚拟机内存模型的概况,了解了内存中到底都放了些什么数据,那它们是如何创建、如何布局以及如何访问的呢,下面来探讨一下HotSpot虚拟机在Java堆中对象分配、 布局和访问的全过程。对象的创建在语言层面上, 创建对象通常(例外: 复制、 反序列化) 仅仅是一个new关键字而已, 而在虚拟机中, 对象(这里讨论的对象限于普通Java对象,不包括数组和Class对象等) 的创建又是怎样一个过程呢?首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的原创 2022-03-23 20:49:02 · 1691 阅读 · 0 评论 -
浅析Java虚拟机运行时数据区
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途, 它们创建和销毁的时间不同, 有的区域随着虚拟机进程的启动而一直存在, 有些区域则是依赖用户线程的启动和结束而建立和销毁。 根据《Java虚拟机规范》 的规定, Java虚拟机所管理的内存将会包括以下几个运行时数据区域,如下图所示。程序计数器在Java虚拟机的概念模型里,字节码解释器工作时就是通过改变这个程序计数器的值来选取下一条需要执行的字节码指令,它是程序控制流的指示器,分支、循环、跳转、异原创 2022-03-22 19:58:43 · 1274 阅读 · 0 评论 -
浅析经典JVM垃圾收集器-Serial/ParNew/Parallel Scavenge/Serial Old/Parallel Old/CMS/G1
在讲述垃圾收集器之前,我们得先知道JVM中常见的垃圾收集算法有什么,具体请参考我的这篇博文。如果说收集算法是内存回收的方法论, 那垃圾收集器就是内存回收的实践者。下面就来详细概述下Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1这七款垃圾收集器的特点及使用场景。基本概念不同的 GC 各自代表的含义Partial GC:表示并不收集整个GC堆。Young GC:只收集年轻代的GC。Old GC:只收集老年代的GC。Mix原创 2022-03-15 12:37:51 · 7652 阅读 · 0 评论 -
浅析Easy Rules规则引擎
什么是Easy Rules?Easy Rules是一个简单而强大的Java规则引擎,提供以下功能:轻量级框架和易于学习的API基于POJO的开发与注解的编程模型定义抽象的业务规则并轻松应用它们支持从简单规则创建组合规则的能力支持使用表达式语言(如MVEL和SpEL)定义规则的能力在一篇非常有趣的规则引擎的文章中,Martin Fowler说:您可以自己构建一个简单的规则引擎。您只需要创建一组具有条件和操作的对象,将它们存储在一个集合中,并运行它们来评估conditions和执行acti原创 2021-09-27 13:33:09 · 548 阅读 · 0 评论 -
内部类
内部类Nested Class 静态内部类非静态内部类 普通内部类 匿名内部类 方法内部类原创 2014-12-22 20:39:41 · 690 阅读 · 0 评论 -
设计模式学习笔记---观察者模式Observer pattern(Java版)
一、场景网站上,很多人订阅了“NBA主题”新闻,,当有这个主题新闻时,就会将这些新闻发给所有订阅的人。(我们可以把多个订阅者、客户称之为观察者;需要同步给多个订阅者的数据封装到对象中,称之为目标。)二、实质广播机制 观察者主要用于1:N的通知。当一个对象(目标对象Subject或Objservable)<消息发布>的状态变化时,他需要及时告知一系列对象(观察者对象Observer)<消息订阅>,令原创 2015-03-14 16:30:03 · 979 阅读 · 0 评论 -
设计模式学习笔记---状态模式state pattern(Java版)
一、场景 红绿灯 红灯、黄灯、绿灯 网上购物,订单的状态 下单、已付款、已发货、送货中、已收货 电梯运行 维修、正常、自动开关、自动开门、消防状态、向上运动、向下运动 酒店系统,房间的状态变化 已预订 已入住 空闲二、实质 用于解决复杂对象的状态转换以及不同状态下行为的封装问题 三、结构 Contex环境类(维护一个state对象,它定义了当前的状态) State抽象状态原创 2015-03-14 10:46:58 · 1053 阅读 · 0 评论 -
常见的字节码操作类库 Javassist
Java动态性常见的两种方式反射、字节码操作Java常见的字节码操作类库BCEL、ASM、CGLIB(Code Generation Library)、Javassist Javassist– 是 一个开源的分析、编辑和创建 Java 字节码 的类库 。性能较 ASM 差,跟 cglib 差不多,但是使用简单。很多开源框架都在使用它 。– 主页: http://ww原创 2015-01-10 09:44:57 · 1942 阅读 · 0 评论 -
JVM类加载过程及主动引用与被动引用
了解类加载全过程,有助于了解JVM运行过程,以及更深入了解java动态性(解热部署,动态加载),提高程序灵活性。类加载全过程:JVM将class文件字节码文件加载到内存中,并对数据进行校验解析和初始化,最终形成可以直接使用的java类型的过程。 加载将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区中的运行时数据结构,在堆中生成一个代表这个类的java.lang.Class对象,原创 2015-07-16 15:33:11 · 2263 阅读 · 0 评论 -
设计模式学习笔记---模板方法模式template method pattern(Java版)
一、场景 客服到银行办理业务: 1、取号排队 2、办理具体现金/陷阱/转账/企业/个人/理财业务 3、给银行工作人员评分二、实质 它定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现。这样,新的子类可以在不改变一个算法结构的前提下重新定义该算法的某些特定步骤。(处理步骤父类中定义好,具体实现延迟到子类中定义。) 三、示例 package com.lg原创 2015-03-14 09:46:37 · 1001 阅读 · 0 评论 -
设计模式学习笔记---单例模式(Java版)
GOF23(Group of four)创建型模式单例模式,工厂模式,抽象工厂模式,建造者模式,原型模式。结构型模式适配器模式,桥接模式,装饰模式,组合模式,外观模式,享元模式,代理模式。行为型模式模板方法模式,命令模式,迭代器模式,观察者模式,中介者模式,备忘录模式,解释器模式,状态模式,策略模式,职责链模式,访问者模式。单例模式核心原创 2015-01-09 09:30:26 · 1803 阅读 · 0 评论 -
JVM类加载器原理与自定义类加载器
一、类加载器原理JVM将class文件字节码文件加载到内存中, 并将这些静态数据转换成方法区中的运行时数据结构,在堆中生成一个代表这个类的java.lang.Class 对象,作为方法区类数据的访问入口。二、类缓存标准的Java SE类加载器可以按要求查找类,但一旦某个类被加载到类加载器中,它将维持加载(缓存)一段时间。不过,JVM垃圾收集器可以回收这些Class过象。三原创 2015-07-17 16:35:07 · 3651 阅读 · 0 评论 -
设计模式学习笔记---策略模式strategy pattern(Java版)
一、场景 市场人员接到单之后的报价策略,比如普通用户或老客户,还是小批量或大批量。 二、实质 策略模式对应于解决某一个问题的一个算法族,允许用户从该算法族中任选一个算法解决某一问题,同时可以方便的更换算法或者增加新的算法。并且由客户端决定调用那个算法。(分离算法,选择实现。) 三、示例1、未使用策略模式package com.lgd.strategy;/** * 实现容易,原创 2015-03-13 22:51:19 · 1033 阅读 · 0 评论 -
Windows命令行下面编译一个Java文件需要引用另一个class文件解决办法
首先,有两个.java文件hello.java和main.java,如图所示。打开cmd,到F:/java/com/lgd 下面 运行hello.java,正常,当运行main.java时,报错。解决方法一:直接一起编译然后返回到包名父目录,运行程序。解决方法二:如果单个编译,需要设置环境变量。查看帮助原创 2014-12-08 15:53:44 · 10703 阅读 · 0 评论 -
线程上下文类加载器与服务器类加载原理
双亲委派机制以及类加载器的问题一般情况下.保证同一个类中所关联的其他类都是由当前类的类加载器所加载的。 比如,class A本身在Ext下找到.那么他里面new出来的一些类也就只能用Ext去查找了(不会低一个级别)。所以有些明明App可以找到的,却找不到了。JDBC API他有实现的driver部分(mysql,sql server)。我们的JDBC APl都是由Boot或者Ext来载入的。但是J原创 2015-07-17 17:35:45 · 2384 阅读 · 0 评论 -
Ubuntu14.04 安装 JDK6 及 eclipse3.7
安装jdk1.将jdk复制到/usr/local目录下2.执行命令授予执行权限ls -lchmod u+x jdk-6u24-linux-i586.bin3.进行解压缩操作 ./jdk-6u24-linux-i586.bin4.重命名成JDKmv jdk 1.6.0-24 jdk65.配置环境变量执行命令 vi /e原创 2015-01-04 10:55:29 · 1080 阅读 · 0 评论 -
Windows下IDEA,Git,SBT整合详解
IDEA,Git,SBT,Java,Scala的相关安装不做过多累述。 版本: jdk7 sbt-0.13.5.zip scala-2.11.7.tgz IDEA2016 Git-1.9.0本文采用GitHub作为远程仓库。 首先创建一个远程仓库。 然后Clone远程仓库到本地。在IDEA中创建一个SBT项目,如下图所示。 创建完成之后,进行相关配置。然后等待下载所需的jar包。完原创 2016-08-18 19:30:01 · 1491 阅读 · 0 评论 -
Windows平台下sbt的安装设置
首先到http://www.scala-sbt.org/release/docs/Getting-Started/Setup.html下载windows的sbt包,zip,tar.gz都行。将下载的包解压到你指定的目录,我一般是解压到d:\dev\sbt目录,d:\dev下是日常工作中所用到的开发工具软件,比如eclipse、jdk、maven等等。Windows的sbt包解压后,已经自带了sbt.转载 2016-08-12 08:57:54 · 3058 阅读 · 0 评论 -
Scala简述、安装scala以及集成开发环境Scala Eclipse
一、Scala概述可拓展•面向对象• 函数式编程兼容JAVA• 类库调用• 互操作语法简洁• 代码行短• 类型推断• 抽象控制静态类型化• 可检验• 安全重构支持并发控制• 强计算能力• 自定义其他控制结构二、安装scalaIDEEclipse(原生支原创 2015-05-08 21:40:37 · 5613 阅读 · 0 评论 -
Scala高阶函数
在函数式编程语言中,函数是“头等公民”,可以像任何其他数据类型一样被传递和操作。 因为Scala混合了面向对象和函数式的特性,所以对Scala来说,函数是“头等公民”。作为值的函数在Scala中,无法直接操纵方法,只能直接操纵函数,所以需要使用_。import scala.math._val temp = ceil _val num = 3.14println("fun:"+temp(num)原创 2015-11-20 00:34:01 · 1268 阅读 · 0 评论 -
Scala函数、条件表达式、循环语句
定义有返回值函数def max(x:Int,y:Int):Int = { if(x>y) x else y}只有一行的情况,可以省略括号。def max(x:Int,y:Int):Int =if(x>y) x else ydef max(x:Int,y:Int) = if(x>y) x else y定义无返回值函数def greeting() = println("hello,wo原创 2015-11-02 23:04:13 · 3656 阅读 · 0 评论 -
Scala基础语法(声明定义、标识符命名、Scala脚本入门)
一、声明与定义(赋值)1、val, 常量声明 val x:T val x:T=e2、var, 变量声明 var x:T var x:T=e•类型省略(默认类型)val x=e var x=e• 声明省略(连续声明) val x1,x2,x3 等价于 val x1;val x2;var x1,x2,x3:T=e 等价于 var xn原创 2015-05-09 22:17:59 · 5993 阅读 · 0 评论 -
Scala AOP编程
trait Action{ def doAction}trait TBeforeAfter extends Action{ //doAction虽然实现了,但依旧是抽象方法。 //方法内部我们调用了super.doAction,因此仍然是抽象的 abstract override def doAction: Unit ={ println("Init") super原创 2016-06-02 11:21:24 · 2109 阅读 · 0 评论 -
SpringMVC适配器
适配器Adapter【Action实现什么接口】 Action实现Controller接口 org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter目录结构操作流程pom.xml<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www原创 2015-11-22 16:05:32 · 947 阅读 · 0 评论 -
SpringMVC注解方式
目录结构流程pom.xml<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.原创 2015-11-24 18:22:42 · 636 阅读 · 0 评论 -
初试Spring MVC
1pom.xml<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/m原创 2015-11-17 13:05:42 · 776 阅读 · 0 评论 -
SpringMVC映射器,逻辑视图名及自定义springmvc.xml路径
pom.xml<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/ma原创 2015-11-17 15:35:49 · 5719 阅读 · 0 评论 -
SpringMVC控制器,日期转换器,编码过滤器
oneorg.springframework.web.servlet.mvc.ParameterizableViewController 如果请求是/hello.action的请求路径,则直接跳转到/jsp/success.jsp页面,不经过程序员定义的控制器Action。目录结构控制流程pom.xml<project xmlns="http://maven.apache.org/POM/4.0.原创 2015-11-23 19:06:02 · 1483 阅读 · 0 评论 -
Spring切入点表达式
execution 其格式为: execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?) returning type pattern,name pattern, parameters pattern是必须的。 ret-type原创 2015-11-11 16:59:44 · 2211 阅读 · 0 评论 -
Cglib类代理工厂
代理模式: http://blog.csdn.net/scgaliguodong123_/article/details/44025531有一个目标对象,想要功能扩展,但目标对象没有实现接口,怎样功能扩展?Class UserDao{}// 子类的方式Class subclass extends UserDao{}以子类的方式实现(cglib代理)Cglib代理,也叫做子类代理。在内存中原创 2015-11-10 15:54:52 · 1328 阅读 · 0 评论 -
Spring声明式事务管理(XML与注解方式)
事务控制概述编程式事务控制自己手动控制事务,就叫做编程式事务控制。 Jdbc代码: Conn.setAutoCommite(false); // 设置手动控制事务 Hibernate代码: Session.beginTransaction(); // 开启一个事务细粒度的事务控制: 可以对指定的方法、指定的方法的某几行添加事务控制。(比较灵活,但开发起来比较繁琐: 每次都要开启、提原创 2015-11-16 17:40:00 · 5080 阅读 · 0 评论 -
Spring AOP编程(注解实现)
一、基本概述Aop(aspect object programming) 面向切面编程 功能: 让关注点代码与业务代码分离!关注点 重复代码就叫做关注点;切面 关注点形成的类,就叫切面(类)!面向切面编程,就是指 对很多功能都有的重复的代码抽取,再在运行的时候网业务方法上动态植入“切面类代码”。切入点 执行目标对象方法,动态植入切面代码。 可以通过切入点表达式,指定拦截哪原创 2015-11-11 11:13:43 · 2131 阅读 · 0 评论 -
Spring对JDBC的支持
所用到的文件截图 添加Maven依赖 以往JDBC的操作package jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;/** * Created by liguodong on 2015/11/11.原创 2015-11-12 13:32:09 · 1039 阅读 · 0 评论 -
手写实现AOP编程
AOP 面向切面的编程, AOP可以实现“业务代码”与“关注点代码”分离 在Spring的AOP编程中, 如果加入容器的目标对象有实现接口,用JDK代理; 如果目标对象没有实现接口,用Cglib代理;总结: 关注点代码,就是指重复执行的代码。 业务代码与关注点代码分离,好处? –关注点代码写一次即可; –开发者只需要关注核心业务; –运行时期,执行核心业务代原创 2015-11-10 18:18:58 · 5180 阅读 · 1 评论 -
Spring AOP编程(XML实现)
XML实现AOP编程:1) 引入jar文件【aop相关jar,4个】 2) 引入aop名称空间 3) aop 配置 1、配置切面类 (重复执行代码形成的类) 2、aop配置(拦截哪些方法 / 拦截到方法后应用通知代码)Spring AOP编程(注解实现) http://blog.csdn.net/scgaliguodong123_/article/details/49779021操作流程1原创 2015-11-11 15:32:36 · 978 阅读 · 0 评论 -
Spring AOP其他几个注解介绍
Spring AOP注解实现 http://blog.csdn.net/scgaliguodong123_/article/details/49779021返回后通知执行结果 异常通知执行结果 环绕通知执行结果原创 2015-11-11 11:52:41 · 755 阅读 · 0 评论