JVM
耳东陈0806
这个作者很懒,什么都没留下…
展开
-
Java GC的那些事(上)
前言与C语言不同,Java内存(堆内存)的分配与回收由JVM垃圾收集器自动完成,这个特性深受大家欢迎,能够帮助程序员更好的编写代码,本文以HotSpot虚拟机为例,说一说Java GC的那些事。Java堆内存在 JVM内存的那些事 一文中,我们已经知道Java堆是被所有线程共享的一块内存区域,所有对象实例和数组都在堆上进行内存分配。为了进行高效的垃圾回收,虚拟机把堆内存划分成新生代(Young G...转载 2018-04-10 11:26:23 · 154 阅读 · 0 评论 -
Java 虚拟机 12 :Java 内存模型
原文出处: 五月的仓颉什么是Java内存模型Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。在此之前,主流程序语言(如C/C++等)直接使用物理硬件和操作系统的内存模型,因此,会由于不同平台上内存模型的差异,有可能导致程序在一套平台上并发完全正常,而在另外...转载 2018-04-11 10:02:39 · 106 阅读 · 0 评论 -
Java 虚拟机 11 :运行期优化
原文出处: 五月的仓颉前言http://www.cnblogs.com/xrq730/p/4839245.html,HotSpot采用的是解释器+编译器并存的架构,之前的这篇文章里面已经讲过了,本文只是把即时编译器这块再讲得具体一点而已。当然,其实本文的内容也没多大意义,90%都是概念上的东西,对于实际开发、实际解决项目里面的疑难问题并没有什么太大的帮助,只要看过就好了。编译对象与触发条件之前讲过...转载 2018-04-11 10:01:42 · 150 阅读 · 0 评论 -
Java 虚拟机10:类加载器
原文出处: 五月的仓颉类与类加载器虚拟机设计团队把类加载阶段张的”通过一个类的全限定名来获取此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为”类加载器”。类加载器虽然只用于实现类的加载动作,但它在Java程序中起到的作用却远远不限定于类加载阶段。对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在Java虚...转载 2018-04-11 10:01:02 · 113 阅读 · 0 评论 -
Java虚拟机 9 :Java 类加载机制
原文出处: 五月的仓颉前言我们知道我们写的程序经过编译后成为了.class文件,.class文件中描述了类的各种信息,最终都需要加载到虚拟机之后才能运行和使用。而虚拟机如何加载这些.class文件?.class文件的信息进入到虚拟机后会发生什么变化?这些都是本文要讲的内容,文章将会讲解加载类加载的每个阶段Java虚拟机需要做什么事(加粗标红)。类使用的7个阶段类从被加载到虚拟机内存...转载 2018-04-11 09:59:27 · 129 阅读 · 0 评论 -
Java 虚拟机 8 :虚拟机性能监控与故障处理工具
原文出处: 五月的仓颉前言定位系统问题的时候,知识、经验是基础,数据是依据,工具是运用知识处理数据的手段。这里说的数据包括:运行日志、异常堆栈、GC日志、线程快照、堆转储快照等。经常使用适当的虚拟机监控和分析的工具可以加快分析数据、定位解决问题的速度。jps:虚拟机进程状况工具首先约定一下运行的代码都是以下这段12345678910public class TestMain{ ...转载 2018-04-11 09:57:32 · 145 阅读 · 0 评论 -
Java 虚拟机 7:内存分配原则
原文出处: 五月的仓颉前言对象的内存分配,往大的方向上讲,就是在堆上分配,少数情况下也可能会直接分配在老年代中,分配的规则并不是百分之百固定的,其细节决定于当前使用的是哪种垃圾收集器组合,当然还有虚拟机中与内存相关的参数。垃圾收集器组合一般就是Serial+Serial Old和Parallel+Serial Old,前者是Client模式下的默认垃圾收集器组合,后者是Server模式下的默认垃圾...转载 2018-04-11 09:56:35 · 187 阅读 · 0 评论 -
Java 虚拟机 6:内存溢出和内存泄露、并行和并发、Minor GC 和 Full GC、Client 模式和 Server 模式的区别
原文出处: 五月的仓颉前言之前的文章尤其是讲解GC的时候提到了很多的概念,比如内存溢出和内存泄露、并行与并发、Client模式和Server模式、Minor GC和Full GC,本文详细讲解下这些概念的区别。内存溢出和内存泄露的区别1、内存溢出内存溢出指的是程序在申请内存的时候,没有足够大的空间可以分配了。2、内存泄露内存泄露指的是程序在申请内存之后,没有办法释放掉已经申请到内存,它始终占用着内...转载 2018-04-11 09:47:33 · 145 阅读 · 0 评论 -
Java虚拟机 5:Java垃圾回收(GC)机制详解
原文出处: 五月的仓颉哪些内存需要回收?哪些内存需要回收是垃圾回收机制第一个要考虑的问题,所谓“要回收的垃圾”无非就是那些不可能再被任何途径使用的对象。那么如何找到这些对象?1、引用计数法这个算法的实现是,给对象中添加一个引用计数器,每当一个地方引用这个对象时,计数器值+1;当引用失效时,计数器值-1。任何时刻计数值为0的对象就是不可能再被使用的。这种算法使用场景很多,但是,Java中却没有使用这...转载 2018-04-11 09:46:29 · 276 阅读 · 0 评论 -
Java 虚拟机 4:内存溢出
原文出处: 五月的仓颉堆溢出Java堆唯一的作用就是存储对象实例,只要保证不断创建对象并且对象不被回收,那么对象数量达到最大堆容量限制后就会产生内存溢出异常了。所以测试的时候把堆的大小固定住并且让堆不可扩展即可。测试代码如下123456789101112131415161718192021package com.xrq.test; import java.util.ArrayList;import...转载 2018-04-11 09:40:39 · 125 阅读 · 0 评论 -
Java 虚拟机 3:常用 JVM 命令参数
原文出处: 五月的仓颉之后写的东西就会用到虚拟机参数了,现在这里汇个总自己平时用到的、看到的一些虚拟机参数。现在看不懂没关系,反正之后都会用到的:(1)-Xms20M表示设置堆容量的最小值为20M,必须以M为单位(2)-Xmx20M表示设置堆容量的最大值为20M,必须以M为单位。将-Xmx和-Xms设置为一样可以避免堆自动扩展。大的项目-Xmx和-Xms一般都要设置到10G、20G甚至还要高(3)...转载 2018-04-10 12:34:39 · 128 阅读 · 0 评论 -
Java 虚拟机 2:Java 内存区域及对象
原文出处: 五月的仓颉几个计算机的概念为以后写文章考虑,也为巩固自己的知识和一些基本概念,这里要理清楚几个计算机中的概念。1、计算机存储单位从小到大依次为位Bit、字节Byte、千字节KB、兆M、千兆GB、TB,相邻单位之间都是1024倍,1024为2的10次方,即:1Byte = 8bit1K = 1024Byte1M = 1024K1G = 1024M1T = 1024G2、计算机存储元件寄存...转载 2018-04-10 12:33:27 · 201 阅读 · 0 评论 -
Java 虚拟机1:什么是 Java
前言让我们来看一下Java的广告词,来自http://www.java.com/zh_CN/about/:97%的企业桌面运行Java美国有89%的桌面(或计算机)运行Java全球有900万Java开发人员开发人员的头号选择排名第一的部署平台有30亿部移动电话运行Java100%的蓝光盘播放器附带了Java有50亿张Java卡在使用1.25亿台TV设备运行Java前5个原始设备制造商均提供了Jav...转载 2018-04-10 12:29:40 · 155 阅读 · 0 评论 -
Minor GC、Major GC和Full GC之间的区别
文章要求读者熟悉 JVM 内置的通用垃圾回收原则。堆内存划分为 Eden、Survivor 和 Tenured/Old 空间,代假设和其他不同的 GC 算法超出了本文讨论的范围。Minor GC从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC。这一定义既清晰又易于理解。但是,当发生Minor GC事件的时候,有一些有趣的地方需要注意到:当 JVM 无法为一...转载 2018-04-10 11:41:33 · 140 阅读 · 0 评论 -
Java GC的那些事(下)
收集算法垃圾收集算法主要有:标记-清除、复制和标记-整理。1、标记-清除算法对待回收的对象进行标记。算法缺点:效率问题,标记和清除过程效率都很低;空间问题,收集之后会产生大量的内存碎片,不利于大对象的分配。2、复制算法复制算法将可用内存划分成大小相等的两块A和B,每次只使用其中一块,当A的内存用完了,就把存活的对象复制到B,并清空A的内存,不仅提高了标记的效率,因为只需要标记存活的对象,同时也避免...转载 2018-04-10 11:39:15 · 146 阅读 · 0 评论 -
Java 虚拟机 13:互斥同步、锁优化及synchronized和volatile
原文出处: 五月的仓颉互斥同步互斥同步(Mutual Exclusion & Synchronization)是常见的一种并发正确性保证手段。同步是指子啊多个线程并发访问共享数据时,保证共享数据在同一时刻只能被一个(或者是一些,使用信号量的时候)线程使用。而互斥是实现同步的一种手段,临界区(Critial Section)、互斥量(Mutex)和信号量(Semaphore)都是主要的互斥实...转载 2018-04-11 10:03:30 · 164 阅读 · 0 评论