volatile关键字可以说是Java虚拟机提供的最轻量级的同步机制,但是它并不容易完全被正确、完整地理解,以至于许多程序员都习惯不去使用它,遇到需要处理多线程数据竞争问题的时候一律使用synchronized来进行同步。了解volatile变量的语义对了解多线程操作的其他特性很有意义,在本文中我们 ...
分类:
编程语言 时间:
2020-03-09 13:23:19
阅读次数:
73
JVM的内存划分: 方法区:是线程共享的,常量静态变量的JIT(即时编译器)编译后代码也在方法区存放。用来存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。虽然Java虚拟机规范把方法区描述为堆得一个逻辑部分,但是他却有个别名Non-Heap(非堆),目的是为了与Java堆区 ...
分类:
其他好文 时间:
2020-03-09 01:25:48
阅读次数:
56
首先要说一下JVM内存空间分为五部分,分别是:方法区、堆、Java虚拟机栈、本地方法栈、程序计数器 方法区主要用来存放类信息、类的静态变量、常量、运行时常量池等,方法区的大小是可以动态扩展的, 堆主要存放的是数组、类的实例对象、字符串常量池等。 Java虚拟机栈是描述JAVA方法运行过程的内存模型, ...
分类:
其他好文 时间:
2020-03-07 12:58:31
阅读次数:
60
一、main函数中实例化对象 父类 子类 运行结果 二、main函数中不实例化对象 运行结果 三、结论 类在加载时: 父类静态变量 父类静态代码块 子类静态变量 大于子类静态代码块 类在实例化时: 父类非静态变量 父类匿名代码块 父类构造函数 子类非静态变量 子类非静态代码块 子类构造函数 ...
分类:
编程语言 时间:
2020-03-06 15:18:31
阅读次数:
79
当高并发访问某个接口的时候,如果这个接口访问的数据库中的资源,并且你的数据库事务级别是可重复读(Repeatable read)的话,确实是没有线程问题的,因为数据库锁的级别就够了;但是如果这个接口需要访问一个静态变量、静态代码块、全局缓存的中的资源或者redis中的资源的时候,就会出现线程安全的问 ...
分类:
其他好文 时间:
2020-03-04 20:51:55
阅读次数:
53
static: static是用来申明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝,局部变量不能申明为static; 用static修饰的方法叫做静态方法,静态方法不能使用类的非静态变量。静态方法是从参数列表得到数据,然后计算这些数据。 package class3; i ...
分类:
编程语言 时间:
2020-03-04 00:23:45
阅读次数:
76
stack: 栈,存放局部变量,有系统释放 heap: 堆, 存放动态分配的内存,有程序员自己手动释放。比如: int * p = (int * )malloc(4); free(p) 释放的是动态内存,p是局部变量,所以并未释放。 globle, 全局变量, 存放全局变量以及静态变量。有系统自动释 ...
分类:
其他好文 时间:
2020-03-03 00:56:33
阅读次数:
65
Java实例化顺序 1.初始化父类静态变量,如果没有赋值,默认初始化为null 2.调用父类 static{} 静态代码块 3.初始化子类静态变量 4.调用子类 static{} 静态代码块 5.初始化父类成员变量,如果没有赋值,默认初始化为null (此时this指针已经存在了) 6.调用父类 成 ...
分类:
编程语言 时间:
2020-03-02 14:46:26
阅读次数:
79
启动流程 消费者在启动之后,会通过 来生成远程调用代理类。在 方法中,会启动一系列调用函数,我们来一个个解析。 配置同样包含2种: XML Java API 1. 在此阶段,会初始化 & 的静态变量以及静态代码块。 2. 1. 通过 启动dubbo。 2. 继而初始化服务的元数据信息, 这段用来生成 ...
分类:
其他好文 时间:
2020-03-02 10:35:26
阅读次数:
75
Singleton:在Java中即指单例设计模式,它是软件开发中最常用的设计模式之一。 单例设计模式,即即某个类在整个系统中只能有一个实例对象可被获取和使用的代码模式。 例如:代表JVM运行环境的Runtime类 要点: 某个类只能有一个实例:构造器私有化 它必须能够创建该类实例:使用该类的静态变量 ...
分类:
其他好文 时间:
2020-03-01 12:52:34
阅读次数:
62