自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

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

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

2020-01-31 21:07:10 789

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

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

2020-01-30 17:19:46 1108

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

一、概述在部分的商用虚拟机中(Sun HotSpot、IBM J9)中,Java 程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为 “热点代码” (Hot Spot Code)。为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编...

2020-01-29 17:01:15 1203

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

一、概述1、语法糖语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·兰丁发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能没有影响,但是更方便程序员使用。语法糖让程序更加简洁,有更高的可读性。我们所熟知的编程语言中几乎都有语法糖。笔者认为,语法糖的多少是评判一个语言够不够牛逼的标准之一。很多人说Java是一个“低糖语言”,其实从Java 7开...

2020-01-28 17:47:31 529

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

一、线程安全在如今多核操作系统盛行的环境下,我们如何将我们的程序在计算机中正确且高效的运行?对于多核中出现高效并发的问题,我们如何保证并发的正确性和如何实现线程安全说起。这里引用下《Java Concurrency In Practice》的作者 Brian Goetz 对 “线程安全” 有一个比较恰当的定义:“当多个线程访问同一个对象时,如果不用考虑线程在运行时环境下的调度和交替执行,也不需...

2020-01-27 22:02:29 584

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

一、为什么要有内存模型?在正式讲解 Java 内存模型之前,我们先来了解一下到底什么是计算机内存模型,然后再来看 Java 内存模型在计算机内存模型的基础上都做了哪些事情。内存模型:英文名 Memory Model,它是计算机领域很古老的一个概念,而且是计算机硬件有关的一个概念。那么,它和硬件到底有啥关系呢?我们先来了解一下。1、物理硬件与内存在单核操作系统中,处理问题要简单的多,对内存和...

2020-01-26 16:17:48 391

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

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

2020-01-22 22:34:58 485

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

一、运行数据区域想要了解 JVM 在执行 Java 程序的过程中会把内存划分成不同的数据区域,每个区域都有不同的作用以及创建时间、销毁时间。下面是运行时数据区的结构图,我们接下来就一一来详细分析各个区域起的作用。1、程序计数器线程内存独享,占用内存小,生命周期与线程相同(随线程诞生而诞生,随线程消亡而消亡)。记录正在执行的虚拟机字节码指令的地址(如果正在执行的是本地方法则为空)。2...

2020-01-20 23:20:18 519

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

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

2020-01-19 00:05:51 1752

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

一、异常的基本概念在讲 JVM 是如何处理异常之前,我们先来复习一下异常的分类。这张图是我们刚开始学习 Java 异常再熟悉不过的一张图了吧。在这里还是要唠叨一下,在 Java 语言规范中,所有异常都是 Throwable 类或者其子类的实例。Throwable 有两大直接子类。第一个是 Error,涵盖程序不应捕获的异常。当程序触发 Error 时,它的执行状态已经无法恢复,需要中止线程甚至是...

2020-01-14 22:47:53 785

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

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

2020-01-12 14:56:47 630

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

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

2020-01-10 23:08:28 810

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

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

2020-01-07 22:22:08 10942 3

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

一、前言这次项目中遇到了一个这样的需求,把下面数据解析到我下面的对象里去。json 文件[ { "categories": [ "美食,小吃快餐" ], "coordinate": { "address": "王府井大街138号新东安广场3层328", "area"...

2020-01-07 00:55:11 2377

原创 HiJson 百度网盘下载

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

2020-01-06 23:03:08 2269 4

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

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

2020-01-06 01:35:11 603 6

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

一、前言我刚接触Java的时候,我和我同学就Java的运行环境要下载JRE还是JDK争议了好久,我认为 JRE 是 Java Runtime Environment,翻译过来就是Java运行环境,所以我当时认为Java代码要运行当然要安装JRE。而我同学强硬说要安装JDK,至于原因他也说不上来,反正写代码就要先下载个JDK,最后的聊天以他对我说的一句话结束,我到现在还清晰的记得:不要以为你英语好...

2020-01-04 23:32:39 1937

原创 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位小数)正则表达式: /^[\-\+]?([0-8]?\d{1}\.\d{1,5}|90\.0{1,5}...

2020-01-03 21:55:30 4984 7

空空如也

空空如也

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

TA关注的人

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