自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 资源 (2)
  • 收藏
  • 关注

原创 共享锁(读锁)/独占锁(写锁)例子

mport java.util.HashMap;import java.util.Map;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.ReadWriteLock;import java.util.concurrent.locks.ReentrantReadWriteLock;/** * @author phd * @version 1.0 * @date 2020/9/2 10:19 */

2020-10-29 11:17:25 393

原创 Java反射

目录Java反射机制概述Java反射机制提供的功能反射相关的API理解Class类并获取Class实例获取Class实例的4种方式哪些类型可以有Class对象?类的加载与ClassLoader的理解创建运行时类的对象获取运行时类的完整结构调用运行时类的指定结构反射的应用:动态代理静态代理举例动态代理举例Java反射机制概述Reflection(反射)是被视为动态语言的关键,反射机制允许程序执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。加载完类之后

2020-09-09 22:38:18 313

原创 Java注解

目录注解(Annotation)注解概述常见的Annotation示例自定义AnnotationJDK中的元注解利用反射获取注解信息JDK8中注解的新特性注解(Annotation)注解概述从JDK5.0开始,Java增加了对元数据(MetaData)的支持,也就是Annotation(注解)Annotation其实就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过使用Annotation,我们可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。代码分析工

2020-09-07 17:34:37 302

原创 JUC学习笔记|分支合并、异步回调

这里写目录标题一级目录二级目录三级目录一级目录二级目录三级目录

2020-09-06 09:14:40 182

原创 JUC学习笔记|线程池

目录线程池线程池的优势如何使用架构说明三种常见的线程池ThreadPoolExecutor7大参数线程池底层工作原理线程池的拒绝策略JDK内置的拒绝策略代码举例线程池线程池做的工作是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量的线程排队等候,其他线程执行完毕,再从队列中取出任务来执行。主要特点:线程复用、控制最大并发数、管理线程。线程池的优势降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任

2020-09-05 21:29:39 350

原创 JUC学习笔记|阻塞队列

目录阻塞队列为什么需要BlockingQueue分类核心方法代码示例阻塞队列阻塞队列是一个队列。当队列是空的,从队列中获取元素的操作将会被阻塞;当队列是满的。从队列中添加元素的操作将会阻塞。在多线程领域:所谓阻塞,在某些情况下会挂起线程(即阻塞),一旦条件满足,被挂起的线程又会自动被唤起。为什么需要BlockingQueue好处是我们不需要关心什么时候需要阻塞线程,什么时候需要唤醒线程,因为这一切BlockingQueue都给一手包办了。在concurrent包发布以前,在多线程环境下,我们必须

2020-09-05 19:20:16 124

原创 JUC学习笔记|JUC辅助类

目录CountDownLatch(减少计算)CyclicBarrier(循环栅栏)Semaphore(信号灯)CountDownLatch(减少计算)CountDownLatch主要有两个方法,countDown()和await(),当一个或多个线程调用await方法时,这些线程会阻塞。其他线程调用countDown()方法计数器减一(调用countDown方法的线程不会阻塞)当计数器的值变为0时,因await方法阻塞的线程会被唤醒,继续执行。public class CountDownLat

2020-09-05 17:49:36 120

原创 JUC学习笔记|多线程锁(8锁现象)

目录多线程锁8锁分析synchronized实现同步的基础总结多线程锁8锁现象/** * @author phd * @version 1.0 * @date 2020/9/1 */class Phone{ public static synchronized void sendEmail() { try { TimeUnit.SECONDS.sleep(4); } catch (InterruptedExcep

2020-09-05 17:15:12 130

原创 JUC学习笔记|Lock接口

目录Lock如何使用synchronized与Lock的区别LockLock implementations provide more extensive locking operations than can be obtained using synchronized methods and statements. They allow more flexible structuring, may have quite different properties, and may support mu

2020-09-05 17:13:45 114

原创 JUC学习笔记|线程间通信

目录线程间通信生成者消费者模型虚假唤醒解决办法用Lock实现生成者消费者模型线程间定制化调用通信例子线程间通信生成者消费者模型/** * @author phd * @version 1.0 * @date 2020/8/31 22:36 * 生产者消费者模型练习 */class AirConditioner{ private int number = 0; public synchronized void increment() throws InterruptedEx

2020-09-05 17:13:02 195

原创 JUC学习笔记|list、set、map线程不安全问题

这里写目录标题一级目录二级目录三级目录一级目录二级目录三级目录

2020-09-05 17:12:10 177

原创 JUC学习笔记|JUC是什么

目录JUC是什么二级目录三级目录JUC是什么java.util.concurrent在并发编程中使用的工具类二级目录三级目录

2020-09-05 17:10:58 760

原创 JVM学习笔记|垃圾回收器

目录垃圾回收器垃圾回收器分类按线程数分按工作模式分按碎片处理方式分按工作的内存区间分GC分类与性能指标三级目录垃圾回收器垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。从不同角度分析垃圾收集器,可以将GC分为不同的类型。Java不同版本新特性1.语法层面:Lambda表达式、switch、自动拆箱装箱、enum2.API层面:Stream API、新的日期时间、Op

2020-08-31 21:06:46 660

原创 JVM学习笔记|垃圾回收相关概念

目录垃圾回收相关概念System.gc()的理解手动gc理解不可达对象的回收行为localvarGC1 的GCDetailslocalvarGC2 的GCDetailslocalvarGC3 的GCDetailslocalvarGC4 的GCDetailslocalvarGC5 的GCDetails内存溢出与内存泄漏内存溢出(OOM)内存泄漏(Memory Leak)举例Stop The World垃圾回收的并行与并发并发并行并发和并行对比垃圾回收的并行与并发安全点与安全区域安全点安全区域引用强引用(Str

2020-08-27 21:17:30 289

原创 JVM学习笔记|垃圾回收相关算法

目录垃圾标记阶段的算法引用计数算法小结可达性分析算法(或根搜索算法、追踪性垃圾收集)GCRoots注意:对象的finalization机制具体过程工具MAT垃圾标记阶段的算法对象存活判断在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为已经死亡的对象,GC才会在执行回收时,释放掉其所占用的内存空间,因为这个过程我们可以成为垃圾标记阶段。那么在JVM中究竟是如何标记一个死亡对象呢?简单来说,当一个对象已经不再被任何的

2020-08-26 21:30:03 224

原创 JVM学习笔记|垃圾回收概述

目录垃圾回收概述什么是垃圾为什么需要GC早期垃圾回收行为Java的垃圾回收机制优势担忧垃圾回收概述什么是垃圾垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用。甚至可能导致内存溢出。垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生关于垃圾收集有三个经典问题:哪些内存需要回收什么时候

2020-08-25 21:57:26 152

原创 JVM学习笔记|StringTable

目录|String的不可变性二级目录三级目录|String的不可变性二级目录三级目录

2020-08-25 21:56:45 129

原创 JVM学习笔记|执行引擎

执行引擎执行引擎概述执行引擎的工作过程三级目录执行引擎概述执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集合操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等于本地机器

2020-08-23 21:09:53 280

原创 JVM学习笔记|对象的实例化内存布局与访问定位

目录对象的实例化创建对象的方式newClass的newInstance()Constructor的newInstance(Xxx)使用clone()使用反序列化第三方库Objenesis创建对象的步骤1. 判断对象的类是否加载、链接、初始化2. 为对象分配内存:如果内存规整 —— 指针碰撞;如果内存不规整——虚拟机需要维护一个列表、空间列表分配。3. 处理并发安全问题——采用CAS配上失败重试保证更新的原子性、每个线程预先分配一块TLAB4. 初始化分配到的空间——所有的属性设置默认值,保证对象实例字段在不

2020-08-19 17:21:56 249

原创 JVM学习笔记|运行时数据区之方法区

目录运行时数据区结构图栈、堆、方法区之间的交互关系方法区的理解设置方法区大小的参数如何解决这些OOM?方法区(Method Area)储存什么?运行是常量池VS常量池运行时常量池方法区的演进细节运行时数据区结构图栈、堆、方法区之间的交互关系方法区的理解《Java虚拟机规范》中明确说明:“尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。”但对于HotSpotJVM而言,方法区还有一个别名叫做Non-Heap(非堆),目的就是要和堆分开。所以,方法

2020-08-19 17:20:37 209

原创 JVM学习笔记|运行时数据区之堆

目录堆的核心概述二级目录三级目录堆的核心概述一个进程对应一个JVM实例,就是运行时数据区。一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。堆内存的大小是可以调节的。-Xms -Xmx《Java虚拟机规范》规定,堆可以处物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。所以的线程共享Java堆,在这里还可以划分线程私有的缓冲区(Thread Local Allocation B

2020-08-17 22:18:23 173

原创 JVM学习笔记|运行时数据区之虚拟机栈

目录虚拟机栈的主要特点内存中的栈与堆虚拟机栈基本内容Java虚拟机栈是什么?生命周期作用栈的特点(优点)栈中可能出现的异常设置栈内存大小栈的存储单位栈运行原理栈帧的内部结构局部变量表(Local Variable)关于Slot的理解Slot的重复利用静态变量与局部变量的对比补充说明操作数栈(Operand Stack)虚拟机栈的主要特点由于跨平台的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,同样的功能

2020-08-15 10:24:36 150

原创 JVM学习笔记|运行时数据区之本地方法栈

目录本地方法接口本地方法本地方法栈(Native Method Stack)本地方法接口本地方法简单地讲,一个Native Method就是一个Java调用非Java代码的接口。一个Native Method是这样一个方法;该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern ‘C’ 告知C++编译器去调用一个C的函数。“A native method is a Java method whose implem

2020-08-15 10:24:00 191

原创 JVM学习笔记|运行时数据区之PC Register

目录PC Register介绍作用两个常见问题PC Register介绍JVM的程序计数寄存器(Program Counter Register)中,Register 的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM的PC寄存器时对物理PC寄存器的一种抽象模拟。作用PC寄存器用来存储指向下一条指令的地址,也

2020-08-12 22:09:18 208

原创 JVM学习笔记|运行时数据区的内部结构和JVM中的线程说明

目录运行时数据区内部结构运行时数据区内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序和实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略。保证了JVM的高效稳定运行。不同的JVM对于内存的划分方式和管理机制存在着部分差异。结合JVM虚拟机规范,来探讨一下经典的JVM内存布局。内部结构Java虚拟机定义了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而消毁。另一些则是与线程一一对应的,这些与线程对

2020-08-11 20:04:48 329

原创 JVM学习笔记|类加载器子系统

类加载器子系统

2020-08-10 23:43:14 307

原创 JVM的位置和整体结构

Java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令执行。

2020-08-09 23:34:45 76

原创 Springboot项目在Docker中的部署

目录1.用IDEA将Springboot打成jar包1.1 在pom.xml文件中添加spring-boot-maven-plugin映射1.2 此处有坑(如果项目引用的jar包不是maven中的,就是自己手动导入的jar)需将手动导入的jar包写入pom.xml中去。举个例子。1.3 用IDEA生成Jar包2.将项目部署到Docker中2.1安装docker2.2将jar包上传至docker中,...

2019-06-28 11:18:38 423

编译原理_语法分析、词法分析

环球悦旅会 酒店、旅游、私人订制专家! 互联网思维及管理导师——无与伦比 教你如何用互联网思维开拓市场 传统老板表面是货难卖,钱难收,人难管,成本高。 原因是没有流量,没有优质客户,没有渠道,没有铁杆粉丝。 正确的认知: 1,由卖货思维转向用户思维。 2,一定让自己变的有价值。 3,了解人性,顺应人性。 4月21日晚20:00-20:30 首席导师语音分享转发朋友圈即可邀您入群

2018-11-18

GIS几何工具

GIS几何工具试验指导书采用C#和ArcEngine实现一个简单的GIS应用软件,要求: (1)程序上包含一个子菜单“Add XY Data”,其功能是让用户输入XY坐标值,然后根据该坐标值生成一个点并显示在(MapControl中的)地图上,设置该点的空间参考为程序中某一已打开的数据的空间参考; 选做内容:程序上包含两个子菜单,功能分别为生成一个线图形和一个多边形图形(生成方式自己设定),然后将它们显示在地图上; (2)程序上包含一个CheckBox,复选框后文字内容为“Zoom In”,该复选框被选中后,其功能是鼠标地图上某个位置点击鼠标,地图视图中心移至该位置,地图视图放大至当前视图的1.5倍; 选做内容:程序上包含一个CheckBox,复选框后文字内容为“Zoom Out”,该复选框被选中后,其功能是鼠标地图上某个位置点击鼠标,地图视图中心移至该位置,地图视图缩小至当前视图的0.5倍。

2018-04-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除