JVM虚拟机
文章平均质量分 78
「已注销」
这个作者很懒,什么都没留下…
展开
-
JVM垃圾收集(四) 堆上分区分配与回收
1 堆分区1.1 新生代(Young Generation)和老年代(Tenured Generation)JVM根据对象生存的特点,将对象划分为新生代和老年代。大部分对象在JVM内存中处是新生代,他们有一个特点,“朝生夕死”,即他们的生命周期很短,伴随着一次GC可能就会被回收掉。相对于新生代来说,老年代就是相对“稳定”的一些对象。他们被JVM“认为”是可以长期存活的对象。一般来说原创 2015-08-08 11:12:21 · 2402 阅读 · 0 评论 -
JVM 运行时数据区
JVM在执行Jva程序时候会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间。下图表示运行时数据区的基本划分,图片来自其他微博。1 程序计数器程序计数器是一块比较的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在虚拟机概念模型里,通过改变这个计数器的值还选取下一条需要执行的字节码指令。分支、循环、跳转、异常处理、线程恢复等基础功能都需要原创 2015-07-27 08:04:21 · 546 阅读 · 0 评论 -
Synchronized与三种锁态
介绍Sychronized的锁实现原理以及三种锁态(偏向锁、轻量级锁和重量级锁)的关系原创 2015-12-17 20:53:38 · 8194 阅读 · 0 评论 -
volatile 关键字
本文介绍了volatile关键字 的作用、适用场景、指令重排序和实现原理原创 2015-08-08 11:19:39 · 952 阅读 · 1 评论 -
JVM 如何创建Java对象
在Java程序中,创建一个对象通常需要一个new关键字就够了,但是在虚拟机中,这个过程却有点复杂,这里面包括了类加载、内存分配、初始化零值等等一系列的步骤。下面来看看JVM如何创建一个对象(这里面的对象仅仅限于不同的Java对象,不包括数组和Class对象)1 对象的创建1.1 类初始化当JVM遇到一条new的指令(与new关键字不是一个概念)时,首先去检查这个指令是否在常量池原创 2015-08-04 20:38:02 · 2077 阅读 · 0 评论 -
JVM内存静态与动态分配
1 静态内存分配与回收在Java中静态分配内存是指在Java被编译时就已经能够确定需要的内存空间,当程序被加载时系统把内存一次性分配给它。这些内存不会再程序执行时发生变化,直到程序运行结束才被回收。在Java的类和方法中的局部变量包括原生数据类型和对象的引用都是静态分配的。这些静态内存实际上是在栈上分配的。静态内存空间当代码运行结束后,对应的栈帧被撤销被回收。public void mai原创 2015-12-14 14:10:05 · 1943 阅读 · 0 评论 -
Java内存模型
内存模型可以理解为在特定的操作协议下,对特别的内存或高速缓存进行读写访问的过程抽象。不同架构的物理机器可以拥有不一样的内存模型,而Java虚拟机也有自己的内存模型。Java虚拟机规范中试图定义一种内存模型,来屏蔽掉各种硬件和操作系统的差异,以实现让让Java程序在各种平台下达到一致的访问效果。1 主内存与工作内存Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变原创 2015-08-08 09:26:21 · 539 阅读 · 0 评论 -
JVM垃圾收集(一) 寻找垃圾
1 如何判断对象为“垃圾”在垃圾回收之前,首先要判断哪些对象为“垃圾”,也就是判断哪些对象已经死去了,这里面的死去的概念就是这个对象不可能再被任何途径使用。1.1 引用计数器法一个很简单、效率也很高的方法。给对象添加一个引用计数器,每当有一个地方引用它时,计数器+1;当引用失效时,计数器-1;任何时刻计算器值为0的对象即为不再被使用的对象。但是Java虚拟机没有使用这种原创 2015-08-08 09:39:18 · 920 阅读 · 0 评论 -
JVM垃圾收集(三)垃圾收集器
先来看看目前主流的垃圾收集器和他们的关系介绍两个术语的区别并行:多个垃圾收集线程并行工作,但此时用户线程仍处于工作状态并发:用户线程与垃圾收集器线程同时执行(可能交替执行),用于线程仍在工作,垃圾收集程序运行于另一个CPU上。1Serial收集器Serial收集器是最基本,发展历史最久的收集器,在早期的版本中,它是唯一的垃圾收集器。这是一个单线程收集器,“单线程原创 2015-08-08 10:02:53 · 588 阅读 · 0 评论 -
JVM垃圾收集(二)垃圾收集算法
1 标记-清除算法(Mark-Sweep)这是最基础的算法,这个算法分为两个阶段标记和清除。首先标记出所有需要清除的对象,然后统一回收标记的对象。这种算法是最简单的,后续的算法都是在它的基础上改进得到的。它存在两个问题:它的标记和清除效率都不高是空间问题,标记清除后,产生大量的不连续的内存碎片。这可能导致在以后的对象分配的过程中,需要占用空间较大的对象可能找不到合适的连原创 2015-08-08 09:48:22 · 487 阅读 · 0 评论 -
Java语法糖
语法糖,又称语法糖衣,是英国计算机科学家发明的一个术语,指在计算机语言中加入某种语法,这种语法对语言的功能并没有影响,但是方便了程序员的操作,并且增加了代码的可读性,减少了出错的机会。Java在现代编程语言中,属于“低糖语言”(相对于JVM和c#)来说,尤其在JDK1.5之前,语法糖很少出现。Java中最常用的语法糖主要是泛型、变长参数、自动装箱、拆箱等,虚拟机运行时不支持这些语法糖操作,他们原创 2015-08-08 11:29:36 · 2631 阅读 · 0 评论 -
并发的单例陷阱
1 并发的单例是什么样的1.1 单机的singleton 1.0在编程的时候,我们会用到单例模式,尤其是一些工具类或数据库连接类常常是单例的。因为他们经常被使用,重复的初始化成本又比较高,因此写成单例模式的。我们都知道单例只有一个对象存在,通常会写成下面这种形式。public class SingletonCommon{ private static SingletonCom原创 2015-11-22 22:37:42 · 3037 阅读 · 0 评论