java编程
bigkai12138
这个作者很懒,什么都没留下…
展开
-
SpringBoot 启动流程解析大全
前言了解 SpirngBoot 的加载流程,可以让我们更好地自定义 SpringBoot 加载流程,并且对自己开发相关架构有一定的借鉴意义。本文旨在从 SpringBoot 的启动类出发,了解 SpringBoot 是怎样完成加载环境、设置上下文、注入 bean 等步骤。由于本人水平有限,分析过程中可能有遗漏和错误,希望大家可以直接指出来,一起学习,一起进步。run不管自己怎么定制 SpringBoot 的启动流程,最后总是通过 run() 方法开始运行的。示例如下:public static v原创 2020-10-14 10:29:10 · 202 阅读 · 0 评论 -
ConcurrentHashMap分析(二)数据扩容
前言在前面的文章ConcurrentHashMap分析(一)整体结构里,我们通过从 ConcurrentHashMap 的整体结构入手,逐步了解了它的数据结构和各个节点的转换关系。这篇文章将讲述 ConcurrenHashMap 的另一个重点:如何在高并发环境下进行扩容,这对我们了解高并发编程思想很有帮助。由于本人水平有限,分析过程中可能存在纰漏和错误,希望大家可以指出,一起学习,一起进步。思路我们在前文查看 ConcurrenHashMap 中发现有一个字段nextTable,它起到在扩容时充当临原创 2020-09-25 14:34:27 · 411 阅读 · 0 评论 -
ConcurrentHashMap分析(一)整体结构
前言对于ConcurrentHashMap的分析,网上已经有很多完善的资料,对于它的源码分析对于巩固和提升关于Java并发思想以及Map集合的思考很有帮助。此文是作者自己关于ConcurrentHashMap的分析和总结。由于本人水平有限,分析过程中可能存在纰漏和错误,希望大家可以指出,一起学习,一起进步。对于此次分析希望能达到以下目的:了解ConcurrentHashMap对于并发的优化方法。了解并发措施和Map集合的结合。ConcurrentHashMap结构下面是ConcurrentH原创 2020-09-23 21:31:42 · 330 阅读 · 0 评论 -
AQS及其衍生物
前言AQS(AbstractQueuedSynchronizer)为组成Java并发包的工具类的核心,我们可以看到它的实现类中有很多我们常用的同步器:那么AQS是怎么定义和管理资源的?同步器是通过怎样的方式从AQS扩展?这是此文需要讨论的内容。由于作者本人水平有限,在分析时可能会出现纰漏和错误,希望大家可以指出,让我们一起学习,一起进步。AQS资源管理在AQS中有一个state字段,其注释The synchronization state意为同步状态,它就是用于表示资源当前状态的。不同的同步器对原创 2020-09-18 15:45:40 · 101 阅读 · 0 评论 -
java运行时数据区分析
前言此文是我阅读了《深入理解Java虚拟机》和一些其它博客后对于Java运行时数据区的结构组成的一个总结,它阐述了Java 虚拟机的运行时数据区各组成,以及如何通过垃圾回收机制保证内存的可用。由于本人能力的问题,在书写时难免会有错误或纰漏,希望发现的读者可以指出来,以让我进步。运行时数据区JVM 的运行时数据区以俯瞰的角度来看其实并不复杂,主要分为方法区、本地方法栈,虚拟机方法栈、堆、程序计数器,它们的组成如下所示:对于方法区和堆,它们是属于线程共享的,为了提高性能,在堆上会划分出一个小区域在存原创 2020-09-17 12:54:46 · 223 阅读 · 0 评论 -
JRE与cglib
在讨论动态代理前,我们先回想一下java的反射机制。因为动态代理是会用到反射的,而且java的反射不仅使用广泛,而且功能强大。反射——JLR当我们使用new关键字创建对象时,虚拟机会先查看对象所属的类是否被加载到内存中,如果没有,就会先通过类的全限定类名来加载,当加载并初始化完成后,再进行对象的创建工作。当一个类文件被类加载器加载到虚拟机中,虚拟机会读取文件信息,并生成一个该类的Class对象。因此,如果我们可以直接操作虚拟机堆中的Class对象,那么就不需要new来创建对象。这种思想就是反射。反射支原创 2020-09-11 15:12:10 · 121 阅读 · 0 评论 -
Class文件解析实战
java跨平台的实现是基于JVM虚拟机的,编写的java源码,编译后会生成一种.class文件,称为字节码文件。java虚拟机就是负责将字节码文件翻译成特定平台下的机器码然后运行。为了保证Class文件在多个平台的通用性,java官方制定了严格的Class文件格式。了解Class文件结构,有利于我们反编译 .class 文件或在程序编译期间修改字节码做代码注入。Class文件结构概览首先先创建一个java类:public class HelloWorld { private static int原创 2020-09-11 15:02:37 · 268 阅读 · 0 评论 -
Akka:基于Actor的并发解决方案
Actor模型在面向对象编程中,一个对象可以访问或修改另一个对象的值,在高并发情况下,由于机器性能的瓶颈,当有多个对象对同一竞争资源进行操作时,可能会出现数据错误的问题(即实际读取的数据不是预期数据,而是前面阶段到这一阶段未修改完成的数据)。Actor模型对此进行了修改,它不是直接对对象进行操作,而是通过消息传递的方式与外界进行交互。如图所示:Actor一次只接收处理一个消息,未处理消息会被放入队列等待处理。Actor有几个重要概念:Actor:处理消息并修改内部状态的工作节点。消息:用于在多个原创 2020-09-11 15:01:57 · 965 阅读 · 0 评论 -
对于 idea 的一些处理笔记
日期:2020-05-17使用 idea 执行 java 代码时报错:VMVersionMismatchException具体信息可查看我的问帖:https://www.oschina.net/question/4130051_2316529解决方法:将 idea 使用的 jar 包替换成自己的,删除 idea 的 jbr 文件夹,然后将自己的 jdk 复制到 idea 的根目录下,将名字改为 jbr 就可以了。...原创 2020-05-17 11:28:42 · 471 阅读 · 0 评论 -
tomcat8优化策略——全部尝试可用
tomcat8 优化tomcat8 的下载安装请自行百度,直接进入正文。注:以下假设建立在你并没有深入了解过 tomcat 的基础上。注:我使用的 tomcat 版本为 8.5.54,使用的 maven 版本为 3.6.1。注:此文参考于:https://blog.51cto.com/14230003/2420282如何查看 tomcat 的配置、状态当你在游览器上输入...原创 2020-04-26 21:43:36 · 311 阅读 · 0 评论 -
枚举类型
——总结自《java编程思想》关键字enum可以将一组具名的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用,这是一种非常有用的功能。枚举简介基本enum特性:values()返回enum实例的数组,而且保持声明的顺序。ordinal方法返回一个int值,这是每个enum实例在声明时的次序,从0开始。可以使用==来比较enum实例,编译器会自动提供equals和...原创 2020-02-25 09:17:55 · 121 阅读 · 0 评论 -
注解
——总结自《java编程思想》注解(元数据)为我们在代码中添加信息提供了一张格式化的方式,使我们可以稍后某个时刻非常方便地使用这些数据java中有三个内置注解:@Override,表示当前的方法定义将覆盖超类中的方法。@Deprecated,如果使用了该注解,那么编译器会发出警告信息。@SuppressWarings,关闭不当的编译器警告信息。没有元素的注解称为标记注解。四种元注...原创 2020-02-24 09:15:22 · 69 阅读 · 0 评论 -
IO系統
——总结自《java编程思想》I/O杂记File既可以代表一个特定文件的名称,又能代表一个目录下一组文件的名称。如果值的是文件集,可以使用list()方法返回一个字符数组File类不仅仅只代表存在的文件或目录,也可以用File对象来创建新的目录或尚不存在的整个目录路径,还可以通过File对象查看文件的特性,如大小、最后修改日期、是否可读等等。编程语言的 I/O 类库中常使用流这个抽象概...原创 2020-02-24 09:13:51 · 96 阅读 · 0 评论 -
容器
——总结自《java编程思想》数组数组的特殊性效率,数组是效率最高的存储和随机访问对象引用序列的方式。数组就是一个简单线性序列,使得元素访问非常快速。代价就是数组对象的大小被固定,并且在生命周期内不可改变。 虽然ArrayList具有弹性,但是这种弹性变化需要开销,通过创建一个新实例,然后把旧实例中所有的引用移到新实例中,从而实现更多空间的自动分配。因此ArrayList的效率比数组低得...原创 2020-02-23 08:53:24 · 87 阅读 · 0 评论 -
泛型
——总结自《java编程思想》泛型实现了参数化类型的概念元组:将一组对象直接打包存储于其中一个单一对象。这个容器对象允许读取其中的元素,但是不允许向其中存放新的对象(这个概念也被称为数据传送对象,或信使)泛型只在编译期有效:在编译之后程序会采取去泛型化的措施。java中的泛型,只在编译阶段有效。在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦出,并且在对象进入和离开方法的边界处添加类...原创 2020-02-23 08:51:00 · 250 阅读 · 0 评论 -
类型信息
——总结自《java 编程思想》运行时类型信息使得你可以在程序运行时发现和使用类型信息RTTIRTTI(Run-Time Type Identification)翻译过来为运行时类型信息Class:Class对象就是用来创建类的所有"常规" 对象的。所有的类都是对其第一次使用时,动态加载到JVM中的. 当程序创建第一个对类的静态成员引用时,就会加载这个类.这个也证明构造器也是类的静态方法...原创 2020-02-20 19:26:49 · 100 阅读 · 0 评论 -
进程与线程
——总结自《java编程思想》进程4种主要事件会导致进程的初始化:系统初始化正在运行的程序执行了创建进程的系统调用用户请求创建了一个新的进程一个批处理作业的初始化进程终止的通常原因:正常退出(自愿的)出错退出(自愿的)严重错误(非自愿的)被其它进程杀死(非自愿的)进程状态图:为了实现进程模型,操作系统维护着进程表。每个进程占用一个进程表项。该表项包含了进程状态的...原创 2020-02-20 19:25:17 · 107 阅读 · 0 评论 -
String杂烩
String对象是不可变的。由于string的只读特性,使得在string的操作上有一定的性能问题。比如对于string的重载操作符"+"的使用会产生一大堆的中间件对象。String str="abc";System.out.println(str);str=str+"de";System.out.println(str);/*如果运行这段代码会发现先输出“abc”,然后又输出“ab...原创 2020-02-19 16:54:46 · 136 阅读 · 0 评论 -
一切皆对象(3)
持有对象——总结《java 编程思想》collection的构造器可以接受另一个collection用它来将自身初始化,因此可以使用Array.List()为这个构造器产生输入。但是collection.addAll()方法运行起来要快的多。因此构建一个不包含元素的collection,然后调用collection.addAll()这种方法很方便。List将元素维护在特定的序列中。有两种...原创 2020-02-18 19:10:33 · 101 阅读 · 0 评论 -
一切皆对象(2)
访问控制权限package用于控制构件构建捆绑到一个内聚的类库单元中。访问修饰符会因此受到影响。访问权限控制的等级,从最小到最大权限依次为:public,protected、包访问权限、privatejava可运行程序是一组可以打包并压缩为一个java文档文件(jar)的.class文件。java解释器负责这些文件的查找、装载、解释。类库实际上是一组类文件、其中每个文件都有一个public...原创 2020-02-17 19:36:08 · 74 阅读 · 0 评论 -
一切皆对象(1)
在 java中一切都是对象,操作的标识符便是对象的一个“引用”。例:String s;这里所创建的只是引用,并不是对象 。如果此时向s发送一个消息就会返回一个运行时错误。因为此时s实际上并没有与任何的事务相关联。对象存储位置寄存器最快的存储区,位于处理器内部,数量有限,按需求分配,程序无法控制。堆栈位于通用RAM(随机访问存储器)中,可通过堆栈指针进行空间分配,速度仅次于...原创 2020-02-16 13:10:40 · 116 阅读 · 0 评论