![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
你好,Java
江城的程序员大叔
这个作者很懒,什么都没留下…
展开
-
Java内存模型
1.简介一次编译,到处执行,我们都知道Java的跨平台性一直是相较于其他语音的一大优势,这一特性与Java的内存模型设计有着极大的关系。Java虚拟机中通过定义一种内存模型,来屏蔽掉各种硬件和操作系统之间的差异,从而使得Java在任何平台下执行都有着一样的结果。2.为什么这样定义Java内存模型旨在定义一种规范,也就是程序中各个变量的访问规则,即在虚拟机中将变量存储到内存中和从内存中取出变量这样的...原创 2018-03-07 10:38:21 · 257 阅读 · 0 评论 -
浅谈Java volatile、synchronized的使用与线程安全
1.线程的安全性 线程的安全性包括(1)可见性、(2)原子性,下面会从这两个角度谈谈volatile与synchronized的使用。 2.volatile (1)可见性 要理解volatile关键字,首先要了解java内存模型,如果有有不熟悉的朋友,可以参看这篇文章Java内存模型,通过内存模型,我们可以知道,变量是存在主内存中(也就是我们常说的原创 2018-03-12 17:27:35 · 338 阅读 · 0 评论 -
JVM上分笔记 - 类的加载、连接与初始化(一)
关于JVM,不得不说在学习的过程中感觉有些枯燥。不同于学习Android、Flutter,有了一点基础之后便可以在手机上看到自己写的小程序;学习Python,有了一些基础之后便可以写简单的接口供前端调用;学习机器学习,在掌握一个算法之后,便可以拿些数据集进行把玩,去kaggle上找找刺激;学习经典算法与数据结构,打打leetcode周赛也是其乐无穷。上面举得这几个例子并不是说它们就好学,其实每一门...原创 2019-06-04 18:25:33 · 295 阅读 · 0 评论 -
JVM上分笔记 - 类的加载、连接与初始化(二)
再看本篇文章之前,请确保已经看过JVM- 类的加载、连接与初始化(一) 首先我们来看接口的初始化 public class Test5 { public static void main(String[] args) { System.out.println(Child5.a); } } interface Parent5 { public stat...原创 2019-06-04 21:13:47 · 150 阅读 · 0 评论 -
Java注解的理解与应用
相信广大的Java开发者在开发过程中都遇到和使用了不少的注解,例如Android的Retrofit框架,后端的Spring全家桶等,都使用了大量的注解。那么注解究竟代表什么意思,注解又是如何工作的呢? 可以这样简单的去理解注解:注解它不是程序本身,但可以对程序做出解释,更重要的是可以被其他程序(如编译器等)读取。 关于Java内置的三个注解,Override等,这里就不作介绍了,通过一个小例子...原创 2019-06-21 21:46:53 · 217 阅读 · 0 评论 -
JVM上分笔记 - Java运行时数据区域
先来看一张大名鼎鼎的图片。 (图片来自网络,侵删) 接下来,一个模块一个模块的去探究其作用。 1.程序计数器 程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的指令,分支、循环、跳转、异常处理等都依赖于程序计数器。 因为Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式...原创 2019-07-03 20:32:03 · 159 阅读 · 0 评论 -
JVM上分笔记 - Java对象探秘
在了解了Java运行时数据区域之后,接下来看这些数据是如何创建、布局和访问的。 1.如何创建 众所周知,程序员是不缺对象的,想要什么对象new一个就可以了,那么Java虚拟机在接收到一条new指令时,为我们做了哪些工作呢? (1)检查类是否已经被加载 当虚拟机收到一条new指令时,首先将去检查这个指令的参数是否能够在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经...原创 2019-07-04 21:16:35 · 137 阅读 · 0 评论