JVM
Lin_Dong_Tian
不积跬步,无以至千里!
展开
-
线程安全
一、线程安全 当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的。 这里讨论的线程安全,就限定于多个线程之间存在共享数据访问这个前提,因为如果一段代码根本不会与其他线程共享数据,那么从线程安全的角度来看,程序是串行执行还是多线程...原创 2019-05-24 16:14:13 · 173 阅读 · 0 评论 -
详谈下java的内存模型以及倒举几种gc算法和算法执行原理
1.java内存模型 1.JVM内存模型 JVM内存模型如上图,需要声明一点,这是《Java虚拟机规范(Java SE 7版)》规定的内容,实际区域由各JVM自己实现,所以可能略有不同。以下对各区域进行简短说明。 1.1程序计数器 程序计数器是众多编程语言都共有的一部分,作用是标示下一条需要执行的指令的位置,分支、循环、跳转、异常处理、线程恢复等基础功能都是依赖程序计数器完成的。 ...转载 2019-07-03 09:58:47 · 460 阅读 · 0 评论 -
Java内存模型(三)--volatile
一、JMM保证共享对象的可见性 如果一个字段被声明为volatile,Java线程内存模型确保所有线程看到这个变量的值是一致的。 而普通的共享变量不能保证可见性,因为普通共享变量被修改之后,什么时候被写入主存是不确定的,当其他线程去读取时,此时内存中可能还是原来的旧值,因此无法保证可见性。 另外,通过synchronized和Lock也能够保证可见性,s...原创 2019-05-24 15:04:59 · 271 阅读 · 0 评论 -
Java内存模型(二)
一、JMM与并发编程 Java内存模型定义了多线程之间共享变量的可见性以及如何在需要的时候对共享变量进行同步。 1、在并发编程领域,有两个关键问题:线程之间如何通信和如何同步。 2、线程之间的通信机制有两种共享内存和消息传递。 (1)在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信,典型的共享内存通信方式就是通过共享对象进行通信。 (2...原创 2019-05-24 09:15:14 · 142 阅读 · 0 评论 -
Java内存模型(一)
一、Java内存模型概述 多任务和高并发是衡量一台计算机处理器的能力重要指标之一。如果我们要想深入了解Java并发编程,就要先理解好Java内存模型。Java内存模型定义了多线程之间共享变量的可见性以及如何在需要的时候对共享变量进行同步。 内存模型可以理解为在特定的操作协议下,对特定的内存或者高速缓存进行读写访问的过程抽象,不同架构下的物理机拥有不一样的内存模型,Ja...转载 2019-05-23 15:57:59 · 177 阅读 · 0 评论 -
对象创建的详解
一、创建对象的步骤 1、虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、 解析和初始化过。 如果没有,那必须先执行相应的类加载过程。在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定,为对象分配空间的任务等同于把一块确定大小的内存从J...原创 2019-05-23 11:35:15 · 512 阅读 · 0 评论 -
虚拟机的字节码执行引擎
一、什么是执行引擎 在不同的虚拟机实现里面,执行引擎在执行Java代码的时候可能会有解释执行和编译执行,但从外观来看,所有的Java虚拟机的执行引擎都是一致的:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果。本节将主要从概念模型的角度来讲解虚拟机的方法调用和字节码执行。 二、每当一个java方法被调用时都会在虚拟机中新创建一个栈帧,那什么是栈帧呢? 1、栈帧(S...原创 2019-05-23 10:57:12 · 149 阅读 · 0 评论 -
虚拟机类加载机制
一、虚拟机的类加载机制 虚拟机把描述类的数据从Class文件加载到内存中,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制。 二、类的生命周期 三、我们首先从加载说起,什么情况才需要加载类?其实并没有约束,但是初始化有约束,而加载又必须在初始化之前执行。可以理解为变向约束了加载。 (1)、虚拟机规范严格规定了有且只有五种情...原创 2019-05-22 20:27:52 · 137 阅读 · 0 评论 -
字节码文件(Class文件)
一、Java的平台无关性实现 我们知道Java是“与平台无关”的,实现语言无关性的基础就是虚拟机和字节码存储格式:依靠class文件这种统一程序存储格式的字节码文件实现了语言无关性。保证了就算是不同语言,只要通过对应语言的编译器按虚拟机规范编译成class文件,这个class文件就能够被jvm加载。而不同的操作系统通过运行对应版本jvm来载入这个class文件运行,则实现了平台无关...原创 2019-05-22 17:52:05 · 3893 阅读 · 0 评论 -
锁优化
一、锁优化技术 从JDK1.6开始,HotSpot虚拟机开发团队实现了各种锁优化技术,这些技术都是为了在线程之间更高速地共享数据,以及解决竞争问题,从而提高程序的执行效率。 二、自旋锁与自适应自旋 在许多应用上,共享数据的锁定状态只会持续很短的一段时间,为了这段时间去挂起和恢复线程并不值得如果物理机器上有一个以上的处理器,我们可以让后面申请锁的那个线程“稍等一下”,...原创 2019-05-24 16:52:47 · 123 阅读 · 0 评论 -
Java内存溢出和内存泄露
原文来自:https://blog.csdn.net/shimiso/article/details/21830871 一、为什么要了解内存泄露和内存溢出? 1、内存泄露一般是代码设计存在缺陷导致的,通过了解内存泄露的场景,可以避免不必要的内存溢出和提高自己的代码编写水平; 2、通过了解内存溢出的几种常见情况,可以在出现内存溢出的时候快速的定位问题的位置,缩短解决故障的时间。 二、基本概...转载 2019-08-03 14:54:17 · 327 阅读 · 0 评论