
书籍
文章平均质量分 83
SZStudy
这个作者很懒,什么都没留下…
展开
-
深入理解Java虚拟机-运行时数据区域
Java虚拟机所管理的内存将会包括以下几个运行时数据区域程序计数器程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示符。 2.Java虚拟机栈Java虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行完成的过程,就对应这一个栈帧在虚拟机中...转载 2018-09-13 10:57:24 · 260 阅读 · 0 评论 -
Java内存模型-Java内存模型中的顺序一致性
如果程序是正确同步的,程序的执行将具有顺序一致性(Sequentially Consistent)——即程序的执行结果与该程序在顺序一致性内存模型中的执行结果相同。 顺序一致性内存模型有两大特性。 1)一个线程中的所有操作必须按照程序的顺序来执行。 2)(不管程序是否同步)所有线程都只能看到一个单一的操作执行顺序。在顺序...转载 2018-11-16 13:59:06 · 367 阅读 · 0 评论 -
Java并发机制的底层实现原理
volatile关键字对volatile进行写操作时,CPU会做什么事情: 1)将当前处理器缓存行的数据写回到系统内存。 2)这个写回内存的操作会使在其他CPU里缓存了该内存地址的数据无效。 为了提高处理速度,处理器不直接和内存进行通信,而是先将系统内存的数...转载 2018-11-12 16:28:20 · 239 阅读 · 0 评论 -
并发编程的挑战
一、多线程不一定快当并发执行累加操作不超过百万次时,速度会比串行执行累加操作慢。这是因为线程有创建和上下文切换的开销。减少上下文切换的方法:1.无锁并发编程:多线程竞争锁时,会引起上下文切换,所以多线程处理数据时,可以用一些办法来避免使用锁,如将数据的ID按照Hash算法取模分段,不同的线程处理不同段的数据。2.CAS算法:Java的Atomic包使用CAS算法来更新数据,而不需要...转载 2018-11-12 10:33:41 · 246 阅读 · 0 评论 -
JDK命令行工具
jps:虚拟机进程状况工具 jps可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称以及这些这些进程的本地虚拟机唯一ID(LVMID)。格式:jps [options] [hostid] option 作用 -q 只输出LVMID,省略主类的名称 -m 输出虚拟机...转载 2018-10-18 11:15:36 · 221 阅读 · 0 评论 -
synchronized同步方法
“非线程安全”问题存在于“实例变量”中,如果方法内部是私有变量,则不存在“非线程安全”问题。如果多个线程访问同一个实例变量,则运行结果有可能出现交叉的情况 关键子synchronized取得的锁都是对象锁,而不是把一段代码或方法当做锁,哪个线程先执行带synchronized关键字的方法,哪个线程就持有该方法所属对象的锁Lock,那么其他线程只能呈等待状态,前提是...转载 2018-10-13 16:31:11 · 469 阅读 · 0 评论 -
内存分配与回收策略
对象优先在Eden分配 在大多数情况下,对象在Eden区中分配。当Eden区没有足够的空间进行分配时,虚拟机发起一次MinorGC。 大对象直接进入老年代 所谓大对象是指,需要大量连续内存空间的Java对象,最典型的大对象就是那种很长的字符串以及数组。 长期存活的对象将进入老年代 虚拟机给每个对象定义了一个对象年龄计数器。如果对象在Eden出生并经过一次MinorGC后...转载 2018-10-13 15:55:26 · 186 阅读 · 0 评论 -
回收对象和方法区
回收对象,判断对象是否是可回收的 引用计算算法:给对象添加一个引用计数器,每当有一个地方引用它时,计数器的值就加1;当引用失效时就减1;任何时刻计数器为0的对象就是不可能再被使用的。但是大部分主流的Java虚拟机里面没有选用引用计算算法来管理内存,其中最主要的原因是它很难解决对象之间相互循环的问题。可达性分析算法:通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下...转载 2018-09-28 15:18:08 · 471 阅读 · 0 评论 -
垃圾收集器
Serial收集器 这是一个单线程收集器,它在进行垃圾收集时,必须暂停所有的工作线程,直到收集结束。 ParNew收集器 是Serial收集器的多线程版本,使用多条线程进行垃圾回收,其余行为与Serial收集器一样。除了Serial收集器外,目前只有它能与CMS收集器配合工作。 Parallel Scavenga收集器 是一款新生代收集器。目标是达到一个可控制的...转载 2018-10-11 19:29:25 · 218 阅读 · 0 评论 -
垃圾收集算法
标记-清除算法 首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。不足之处:效率问题,标记和清除两个过程效率不高。 空间问题,标记清除之后会产生不连续的内存碎片,空间碎片太多可能会导致以后在运行时过程中需要分配较大对象时,无法找到足够的连续内存而不得不提前触发另一次垃圾手机动作。 复制算法 它将可用内存按容量划分为大小相等的两块,每次只使用其中一块,...转载 2018-10-11 10:44:53 · 180 阅读 · 0 评论 -
Centos编译OpenJDK7源码
一、写在前面1.Centos版本:CentOS Linux release 7.3.1611 (Core) x86_642.ant版本:apache-ant-1.9.13 3.freetype版本:freetype-2.3.124.openjdk版本:openjdk-7u6-fcs-src-b24-28_aug_20125.jdk版本:jdk1.6.0_45二、安装jdk...原创 2018-10-11 09:22:06 · 516 阅读 · 0 评论 -
对象的访问定位
目前主流的访问方式有使用句柄和直接指针两种方式。句柄访问:Java堆中将会划分出一块内存来作为句柄池,reference中存储的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据各自的具体地址信息。 直接指针访问:reference中存储的直接就是对象地址 两种方式对比:使用句柄来访问最大的好处就是reference中存储的就是稳定的句柄地址,在对象被移动(垃...转载 2018-09-26 10:23:43 · 266 阅读 · 0 评论 -
Java对象的创建过程
Java对象的创建过程(不包括数组和Class对象等)虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。接下来虚拟机将为新生对象分配内存,一种方式是“指针碰撞”,另一种方式是“空闲列表”。当采用的垃圾收集器带有压...转载 2018-09-20 15:52:17 · 172 阅读 · 0 评论 -
对象的内存布局
在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头,实例数据和对齐填充。HotSpot虚拟机的对象头包括两部分信息,第一部分用于存储对象自身的运行时数据,如哈希吗、GC分代年龄,锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等。对象头的另外一个部分是类型指针,即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。实例数据部分是对象真正存储的...转载 2018-09-26 09:42:32 · 235 阅读 · 0 评论 -
Java内存模型-Java内存模型的基础
Java内存模型的基础 1.Java内存模型的抽象结构局部变量,方法定义参数和异常处理器参数不会在线程之间共享,它们不会有内存可见性问题,也不受内存模型的影响。 2.Java线程之间的通信由Java内存模型控制,...转载 2018-11-15 10:33:04 · 265 阅读 · 0 评论