JVM-并发
jvm详解和并发处理
荡漾-
这个作者很懒,什么都没留下…
展开
-
JMM--重排序
重排序是什么?重新排序?不可以这么单一的理解。重排序通常是编译器或运行时环境为了优化程序性能而采取的对指令进行重新排序执行的一种手段。重排序分为两类:编译器重排序和运行期重排序,分别对应编译时和运行时环境。不要假设指令执行的顺序,因为根本无法预知不同线程之间的指令会以何种顺序执行。1、首先为何要指令重排序(instruction reordering)?编译器或运行时环境为了优化程序性能而采取的对...转载 2018-05-04 11:01:49 · 587 阅读 · 0 评论 -
内存可见性
如果一个线程对共享变量的修改,能够被其它线程看到,那么就能说明共享变量在线程之间是可见的。如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量。Java内存模型(Java Memory Model,JMM)描述了Java程序中各种变量(线程共享变量)的访问规则,以及在JVM中将变量存储到内存和从内存中读取出变量这样的底层细节。所有的变量都储存在主内存中。每个线程都有自...原创 2018-05-04 10:26:07 · 282 阅读 · 0 评论 -
volatile关键字解析
原文转自:http://www.cnblogs.com/dolphin0520/p/3920373.htmlvolatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。...转载 2018-05-10 15:03:55 · 122 阅读 · 0 评论 -
java 内存模型
众所周知,函数调用在内存中是通过压栈,退栈实现的,而Java的方法调用则是在JVM栈中通过栈帧实现的,且所有的Java对象都只在堆上分配内 存.那么一个Java对象在堆内存里到底长啥样呢?实际上,当一个对象在内存中被创建的时候,它只不过是一串0和1而已.编译器会维护一张表,这张表用来 存储对象中的每一个成员变量所在位置的偏移量(offset).这样,通过查这张表,JVM就能知道每一个成员变量相对于...原创 2018-05-21 11:32:56 · 706 阅读 · 0 评论 -
final 关键字
Java中的final关键字非常重要,它可以应用于类、方法以及变量。这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用final关键字的实例。final经常和static一起使用来声明常量,你也会看到final是如何改善应用性能的。final关键字的含义?final在Java中是一个保留的关键字,可以声明成员变量、...转载 2018-05-08 15:46:30 · 291 阅读 · 0 评论 -
jvm 垃圾回收机制
每个Java程序员迟早都会碰到下面这个错误:java.lang.OutOfMemoryError这个时候一般会建议采用如下方式解决这个错误:增加MaxPermSize值增加最大堆内存到512M(-xmx参数)这篇文章会具体介绍Java堆空间和参数MaxPermSize的含义。这篇文章涉及下列主题,并采用Hotspot JVM:垃圾回收器(Garbage Collector,GC)哪个JVM?JVM...转载 2018-05-08 16:06:58 · 140 阅读 · 0 评论 -
常见GC算法
在C/C++中是由程序员自己去申请、管理和释放内存的,因此没有GC的概念。而在Java中,专门有一个用于垃圾回收的后台线程来进行监控、扫描,自动将一些无用的内存进行释放。下面介绍几种常见的GC算法。引用计数法 Reference Counting给对象添加一个引用计数器,每过一个引用计数器值就+1,少一个引用就-1。当它的引用变为0时,该对象就不能再被使用。它的实现简单,但是不能解决互相循环引用的...转载 2018-05-08 17:27:48 · 204 阅读 · 0 评论 -
JVM内存结构
转:https://www.cnblogs.com/smyhvae/p/4748392.html主要内容如下:JVM启动流程 JVM基本结构 内存模型 编译和解释运行的概念 一、JVM启动流程:JVM启动时,是由java命令/javaw命令来启动的。二、JVM基本结构:JVM基本结构图:《深入理解Java虚拟机(第二版)》中的描述是下面这个样子的:...转载 2018-09-19 11:59:33 · 253 阅读 · 0 评论