并发编程的三个基本概念: 原子性 可见性 有序性 编写多线程程序时,经常会看到 volatile 关键字。 在Java中,volatile 被用来修饰 变量。 使用 volatile 修饰的变量有什么特点呢? JMM内存划分 在Java内存模型中,内存区域的划分大致如下图所示: 除了共享的 主内存 ...
分类:
编程语言 时间:
2019-10-26 17:28:34
阅读次数:
92
内存溢出outofmemory,是指程序在申请内存时,没有足够的内存空间供其使用,出现outofmemory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。内存泄露memoryleak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。memoryleak会最终会导致outofmemory
分类:
编程语言 时间:
2019-10-25 09:58:33
阅读次数:
81
Java内存模型到底是个什么东西,晦涩难懂的happens-before又表示什么意思,synchronized,volatile,final又能做些什么,一文搞懂! ...
分类:
编程语言 时间:
2019-10-25 09:32:04
阅读次数:
88
Java内存空间分两种,一种是栈内存,有多个,一种是堆内存,只有一个,在堆内存中又有一块方法区。 方法区中存储的是:类的信息(类名,类的直接父类,类的访问修饰符),类变量,类方法代码,实例方法代码,常量池。注意没有实例变量。 当使用new创建一个对象的时候,JVM实际上做了三件事:加载类,创建该类的 ...
分类:
编程语言 时间:
2019-10-24 13:14:16
阅读次数:
69
深入理解Java内存模型 【1】CPU和缓存的一致性 ? 我们应该都知道,计算机在执行程序的时候,每条指令都是在CPU中执行的,而执行的时候,又免不了要和数据打交道。而计算机上面的数据,是存放在主存当中的,也就是计算机的物理内存啦。 ? 刚开始,还相安无事的,但是随着CPU技术的发展,CPU的执行速 ...
分类:
编程语言 时间:
2019-10-24 00:08:31
阅读次数:
94
一、https原理 二、Http1.0和1.1及2.0的区别 三、限流算法 四、Java内存模型 1.https原理 我们知道,HTTP请求都是明文传输的,所谓的明文指的是没有经过加密的信息,如果HTTP请求被黑客拦截,并且里面含有银行卡密码等敏感数据的话,会非常危险。为了解决这个问题,Netsca ...
分类:
其他好文 时间:
2019-10-18 12:40:39
阅读次数:
85
访问修饰符 控制被访问的权限 public protected default(不写) private (权限从高到低) 静态(static) 内存结构 ...
分类:
编程语言 时间:
2019-10-17 22:02:12
阅读次数:
81
首先,这两者是完全不同的概念,绝对不能混为一谈。1.什么是Java内存模型?Java内存模型是Java语言在多线程并发情况下对于共享变量读写(实际是共享变量对应的内存操作)的规范,主要是为了解决多线程可见性、原子性的问题,解决共享变量的多线程操作冲突问题。多线程编程的普遍问题是:所见非所得无法肉眼检测程序的准确性不同的运行平台表现不同错误很难复现故JVM规范规定了Java虚拟机对多线程内存操作的一
分类:
编程语言 时间:
2019-10-17 20:31:58
阅读次数:
100
Java内存模型规范了Java虚拟机与计算机内存是如何协同工作的。Java虚拟机是一个完整的计算机的一个模型,因此这个模型自然也包含一个内存模型——又称为Java内存模型。 如果你想设计表现良好的并发程序,理解Java内存模型是非常重要的。Java内存模型规定了如何和何时可以看到由其他线程修改过后的 ...
分类:
编程语言 时间:
2019-10-15 12:58:41
阅读次数:
71
2.虚拟机栈 定义:虚拟机栈(Java Virtual Machine Stacks)就是每个线程运行需要的内存空间,栈由一个一个的栈帧(Frame)组成,栈帧就是每个方法运行时需要的内存(方法的参数、局部变量、返回地址) 每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法 问题分析 垃圾回收 ...
分类:
编程语言 时间:
2019-10-14 23:34:27
阅读次数:
106