自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 深入理解Java虚拟机:(十四)逃逸分析

一、概念 逃逸分析(Escape Analysis)是目前 Java 虚拟机中比较前沿的优化技术。 逃逸分析的基本行为就是分析对象动态作用域:当一个对象在方法中被定义后,它可能被外部方法引用,例如作为调用参数传递到其他方法中,称为方法逃逸。甚至还有可能被外部线程访问到,比如赋值给类变量或可以在其它...

2020-01-31 21:07:10 205 0

原创 深入理解Java虚拟机:(十三)方法内联

一、概念 前面几篇中,多次提到方法内联的技术。它指的是:在编译过程中遇到方法调用时,将目标方法的方法体纳入编译范围之中,并取代原方法调用的优化手段,减少因方法调用开销的技术。 函数调用过程 首先会有个执行栈,存储它们的局部变量、方法名、动态连接; 当一个方法被调用,一个新的栈帧会被加到栈顶,分配...

2020-01-30 17:19:46 177 0

原创 深入理解Java虚拟机:(十二)JVM内的即时编译器

一、概述 在部分的商用虚拟机中(Sun HotSpot、IBM J9)中,Java 程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为 “热点代码” (Hot Spot Code)。为了提高热点代码的执行效率,在运行时,...

2020-01-29 17:01:15 323 0

原创 深入理解Java虚拟机:(十一)Java语法糖详解

一、概述 1、语法糖 语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·兰丁发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能没有影响,但是更方便程序员使用。语法糖让程序更加简洁,有更高的可读性。 我们所熟知的编程语言中几乎都有语法糖。笔者认为,语...

2020-01-28 17:47:31 207 0

原创 深入理解Java虚拟机:(十)JVM是如何实现锁优化的?

一、线程安全 在如今多核操作系统盛行的环境下,我们如何将我们的程序在计算机中正确且高效的运行?对于多核中出现高效并发的问题,我们如何保证并发的正确性和如何实现线程安全说起。 这里引用下《Java Concurrency In Practice》的作者 Brian Goetz 对 “线程安全” 有一...

2020-01-27 22:02:29 220 0

原创 深入理解Java虚拟机:(九)Java内存模型

一、为什么要有内存模型? 在正式讲解 Java 内存模型之前,我们先来了解一下到底什么是计算机内存模型,然后再来看 Java 内存模型在计算机内存模型的基础上都做了哪些事情。 内存模型:英文名 Memory Model,它是计算机领域很古老的一个概念,而且是计算机硬件有关的一个概念。那么,它和硬件...

2020-01-26 16:17:48 159 0

原创 深入理解Java虚拟机:(八)垃圾收集器

一、对象已死吗? 在堆里面有着几乎所有的对象实例,垃圾收集器在进行回收之前,首先确定这些对象之中哪些还“存活”,哪些已“死去”(即不可能再被任何途径使用的对象)。 1、引用计数法 引用计数法(reference counting)。它的做法是为每个对象添加一个引用计数器,用来统计指向该对象的引用个...

2020-01-22 22:34:58 177 0

原创 深入理解Java虚拟机:(七)Java对象的内存布局

一、运行数据区域 想要了解 JVM 在执行 Java 程序的过程中会把内存划分成不同的数据区域,每个区域都有不同的作用以及创建时间、销毁时间。下面是运行时数据区的结构图,我们接下来就一一来详细分析各个区域起的作用。 1、程序计数器 线程内存独享,占用内存小,生命周期与线程相同(随线程诞生而诞生...

2020-01-20 23:20:18 135 0

原创 深入理解Java虚拟机:(六)JVM是如何实现反射的?

一、前言 反射应该是 Java 基础最重要的特性之一吧。反射在 Java 应用中无处不在,像 Web 开发中,我们经常接触到各种可配置的框架,为了保证框架的可扩展性,往往会借助 Java 的反射机制,根据配置文件来加载不同的类。比如说,Spring 框架的最重要特性之一依赖反转(IoC),就是用的...

2020-01-19 00:05:51 649 0

原创 深入理解Java虚拟机:(五)JVM是如何处理异常的?

一、异常的基本概念 在讲 JVM 是如何处理异常之前,我们先来复习一下异常的分类。这张图是我们刚开始学习 Java 异常再熟悉不过的一张图了吧。在这里还是要唠叨一下,在 Java 语言规范中,所有异常都是 Throwable 类或者其子类的实例。Throwable 有两大直接子类。第一个是 Err...

2020-01-14 22:47:53 226 0

原创 深入理解Java虚拟机:(四)JVM是如何执行方法调用的?(下)

一、前言 上一篇我们主要讲了解析和分派。解析可以认为是调用目标在程序代码写好、编译器进行编译时就必须确认下来。只要能被 invokestatic 和 invokespecial 指令调用的方法,都可以在解析阶段确定唯一的调用版本,符合这个条件的静态方法、私有方法、实例构造器、父类方法4类,它们在...

2020-01-12 14:56:47 237 0

原创 深入理解Java虚拟机:(三)JVM是如何执行方法调用的?(上)

一、前言 上一篇我们主要介绍了类加载的机制,这一篇我们主要来介绍下Java虚拟机是如何执行方法调用的?我们前面讲过,Class 文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在 Class 文件里面存储的都只是符号引用,而不是方法在实际运行中的入口地址(相当于之前说的直接引用)。这个特...

2020-01-10 23:08:28 252 0

原创 Spring事务@Transactional(rollbackFor = Exception.class) 不生效

一、发现问题 项目中写了一个关务事务的方法,然后发现不生效。然后我做了下面的一个测试看看到底哪里出了问题! 这是我的简化后的测试代码,上面有个insert操作数据库的插入方法,下面我就直接抛个异常,省得写测试操作数据库不成功的另一个方法。我们都知道事务是作为一个整体来执行,包含在其中的对数据库...

2020-01-07 22:22:08 1926 0

原创 json怎么解析混合数组对象到实体类的list集合里去

一、前言 这次项目中遇到了一个这样的需求,把下面数据解析到我下面的对象里去。 json 文件 [ { "categories": [ "美食,小吃快餐" ], &...

2020-01-07 00:55:11 811 0

原创 HiJson 百度网盘下载

链接: https://pan.baidu.com/s/1bYZ09F5l-Nrjd6Fbgw2vYA 提取码: aeq4

2020-01-06 23:03:08 383 1

原创 深入理解Java虚拟机:(二)Java虚拟机的类加载机制

一、概述 在上一篇我么了解到 Java 源文件经过编译后成 Class 文件,在 Class 文件中描述的各种信息,最终都需要加载到虚拟机中才能运行与使用。而虚拟机如何加载这些 Class 文件的?Class 文件进入到虚拟机中间又发生了什么?这就是本篇要讲的内容。 虚拟机把描述类的数据从 Cla...

2020-01-06 01:35:11 247 4

原创 深入理解Java虚拟机:(一)Java代码是如何运行的?

一、前言 我刚接触Java的时候,我和我同学就Java的运行环境要下载JRE还是JDK争议了好久,我认为 JRE 是 Java Runtime Environment,翻译过来就是Java运行环境,所以我当时认为Java代码要运行当然要安装JRE。而我同学强硬说要安装JDK,至于原因他也说不上来,...

2020-01-04 23:32:39 245 0

原创 Java正则表达式实现经纬度的合法性

经度: -180.0~+180.0(整数部分为0~180,必须输入1到5位小数) 正则表达式: /^[\-\+]?(0?\d{1,2}\.\d{1,5}|1[0-7]?\d{1}\.\d{1,5}|180\.0{1,5})$/ 纬度: -90.0~+90.0(整数部分为0~90,必须输入1到5位小...

2020-01-03 21:55:30 1553 0

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