jvm
will的猜想
这个作者很懒,什么都没留下…
展开
-
jvm对象存活判定算法
程序计数器、虚拟机栈、本地方法栈3个区域随线程生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊的执行这出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来是就已知的,因此这几个区域的内存分配和回收都具备确定性,在这几个区域内不需要过多考虑回收问题,因为方法结束或者线程结束时,内存就跟着回收了。因此我们主要学习java堆和方法区的内存分配和原创 2016-05-25 14:15:42 · 496 阅读 · 0 评论 -
JVM中锁优化简介
本文将简单介绍HotSpot虚拟机中用到的锁优化技术。自旋锁互斥同步对性能最大的影响是阻塞的实现,挂起线程和恢复线程的操作都需要转入内核态中完成,这些操作给系统的并发性能带来了很大的压力。而在很多应用上,共享数据的锁定状态只会持续很短的一段时间。若实体机上有多个处理器,能让两个以上的线程同时并行执行,我们就可以让后面请求锁的那个线程原地自旋(不放弃CPU时间),看看持有锁的线程是否转载 2016-05-25 11:35:32 · 683 阅读 · 0 评论 -
分析堆内存OOM- jvm
主要功能概述显示jvm运行时的参数,Java版本,以及系统属性。监控显示当前这个pid的cpu,堆,PermGen,类,线程的运行情况,可以主动进行垃圾回收,以及生成此时刻的dump文件。线程显示所有线程的“实时”状态(运行,休眠,等待,监视)以及时间,(调整好刷新时间),可以通过放大,放小,更细致的观察线程的状态,以及一个线程详细的时刻状态和线程dump堆栈。抽样器随机抽样快速检测,显示各个方法...转载 2018-04-18 21:18:15 · 620 阅读 · 0 评论 -
JVM --并发垃圾回收器CMS
1.总体介绍:CMS(Concurrent Mark-Sweep)是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器。对于要求服务器响应速度的应用上,这种垃圾回收器非常适合。在启动JVM参数加上-XX:+UseConcMarkSweepGC ,这个参数表示对于老年代的回收采用CMS。CMS采用的基础算法是:标记—清除。 2.CMS过程:初始标记(STW initial mark)并发标记(C...原创 2018-05-17 20:19:22 · 1104 阅读 · 0 评论 -
jvm类的加载过程
1.类的加载过程 JVM将类加载过程分为三个步骤:装载(Load),链接(Link)和初始化(Initialize)链接又分为三个步骤,如下图所示:1) 装载:查找并加载类的二进制数据;2)链接:验证:确保被加载类的正确性;准备:为类的静态变量分配内存,并将其初始化为默认值;解析:把类中的符号引用转换为直接引用;3)初始原创 2016-08-13 21:25:53 · 403 阅读 · 0 评论 -
java内存模型
为什么学习Java的内存模式缓存一致性问题什么是内存模型JMM(Java Memory Model)简介volatitle关键字原子性可见性有序性指令重排先行发生——happen-before原则解释执行和编译执行其他语言(c和c++)也有内存模型么? 为什么需要关注Java内存模型? 之前有一个我实习的同事(已经工作的)反讽我:学(关注)这个有什么用?原创 2016-08-10 15:55:15 · 658 阅读 · 0 评论 -
常用JVM配置参数
前面学习的都是和类加载相关的知识,接下来学习的则和GC相关的知识,都是JVM的几个重点块。零、在IDE的后台打印GC日志:既然学习JVM,阅读GC日志是处理Java虚拟机内存问题的基础技能,它只是一些人为确定的规则,没有太多技术含量。既然如此,那么在IDE的控制台打印GC日志是必不可少的了。现在就告诉你怎么打印。(1)如果你用的是Eclipse,打印GC日志的操作如下:在上图的箭头处加上-XX:+...转载 2018-05-16 21:14:00 · 310 阅读 · 0 评论 -
java同步锁以及级别升级的理解
首先简单说下先偏向锁、轻量级锁、重量级锁三者各自的应用场景:偏向锁:只有一个线程进入临界区; 轻量级锁:多个线程交替进入临界区; 重量级锁:多个线程同时进入临界区。还要明确的是,偏向锁、轻量级锁都是JVM引入的锁优化手段,目的是降低线程同步的开销。比如以下的同步代码块: synchronized (lockObject) { // do something ...转载 2018-07-31 19:48:20 · 1888 阅读 · 0 评论 -
CMS收集器配置
HotSpot JVM的并发标记清理收集器(CMS收集器)的主要目标就是:低应用停顿时间。该目标对于大多数交互式应用很重要,比如web应用。在我们看一下有关JVM的参数之前,让我们简要回顾CMS收集器的操作和使用它时可能出现的主要挑战。就像吞吐量收集器(参见本系列的第6部分),CMS收集器处理老年代的对象,然而其操作要复杂得多。吞吐量收集器总是暂停应用程序线程,并且可能是相当长的一段时间,转载 2018-02-06 16:42:38 · 381 阅读 · 0 评论 -
JVM的GC日志的主要参数
-Xmn1024m -Xms2500m -Xmx2500m -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -XX:MaxDirectMemorySize=256m -XX:+UseCMSInitiatingOccupancyOnly -XX:SurvivorRatio=8 -XX:+ExplicitGCInvokesCo转载 2018-02-06 16:31:28 · 3730 阅读 · 0 评论 -
Java内存泄露
一、Java内存回收机制 不论哪种语言的内存分配方式,都需要返回所分配内存的真实地址,也就是返回一个指针到内存块的首地址。Java中对象是采用new或者反射的方法创建的,这些对象的创建都是在堆(Heap)中分配的,所有对象的回收都是由Java虚拟机通过垃圾回收机制完成的。GC为了能够正确释放对象,会监控每个对象的运行状况,对他们的申请、引用、被引用、赋值等状况进行监控,Java会使用有向图的方原创 2016-05-20 14:40:46 · 437 阅读 · 0 评论 -
jvm加载过程
类加载过程类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。它们开始的顺序如下图所示:其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持 Java 语原创 2016-04-13 16:33:53 · 1112 阅读 · 0 评论 -
jvm垃圾回收
在这节里不打算大量讨论算法实现,只是简单的介绍一下基本思想以及发展过程。最基础的搜集算法是“标记-清除算法”(Mark-Sweep),如它的名字一样,算法分层“标记”和“清除”两个阶段,首先标记出所有需要回收的对象,然后回收所有需要回收的对象,整个过程其实前一节讲对象标记判定的时候已经基本介绍完了。说它是最基础的收集算法原因是后续的收集算法都是基于这种思路并优化其缺点得到的。它的主要缺点有两个,一原创 2016-04-13 16:32:10 · 357 阅读 · 0 评论 -
jvm内存管理
JVM执行Java程序的过程中,会使用到各种数据区域,这些区域有各自的用途、创建和销毁时间。根据《Java虚拟机规范(第二版)》(下文称VM Spec)的规定,JVM包括下列几个运行时数据区域: 1.程序计数器(Program CounterRegister): 每一个Java线程都有一个程序计数器来用于保存程序执行到当前方法的哪一个指令,对于非Native方法,这个区域记录的是正原创 2016-04-13 16:30:56 · 310 阅读 · 0 评论 -
Java的内存回收机制
在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存回收,这两方面工作都是由JVM自动完成的,降低了Java程序员的学习难度,避免了像C/C++直接操作内存的危险。但是,也正因为内存管理完全由JVM负责,所以也使Java很多程序员不再关心内存分配,导致很多程序低效,耗内存。因此就有了Java程序员到最后应该去了解JVM,才能写出更高效,充分利用有限的内存的程序。1转载 2015-10-30 11:59:49 · 426 阅读 · 0 评论 -
垃圾回收器——CMS收集器
CMS[Concurrent Mark Sweep]收集器是一种以获取最短回收停顿时间为目标的收集器。 目前很大一部分的Java应用集中在互联网站或者B/S系统的服务端上,这类应用尤其重视服务的相应速度.从名字就可以看出,CMS收集器是使用的标记清除算法,它的运作过程相当于前面几种收集器来说更为复杂,整个过程分为四个步骤:初始标记,标记一下GC Roots能直接关联到的对象,速转载 2017-08-28 00:08:08 · 410 阅读 · 0 评论 -
JVM调优——之CMS GC日志分析
最近在学习JVM和GC调优,今天总结下CMS的一些特点和要点,让我们先简单的看下整个堆年轻代和年老代的垃圾收集器组合(以下配合java8完美支持,其他版本可能稍有不同),其中标红线的则是我们今天要着重讲的内容:垃圾回收器的可用组合: ParNew and CMS"Concurrent Mark and Sweep" 是CMS的全称,官方给予的名称是:“Mostly转载 2018-02-06 14:26:57 · 7583 阅读 · 1 评论 -
jvm参数配置
一.关于JVM参数配置,有多种途径。1.在tomcat中直接配置的 打开tomcat的安装目录, 在bin下修改catalina.bat文件添加如下:set "JAVA_OPTS=-Xmx300m -Xms300m -Xmn100m -XX:SurvivorRatio=8"在这个位置:启动tomcat即可起作用。 2.使用M转载 2018-02-06 16:28:04 · 8410 阅读 · 0 评论 -
【JVM】浅谈双亲委派和破坏双亲委派
【JVM】浅谈双亲委派和破坏双亲委派转载自 【JVM】浅谈双亲委派和破坏双亲委派目录一、前言二、双亲委派2.1、为什么需要双亲委派2.2、双亲委派的实现三、破坏双亲委派3.1、为什么需要破坏双亲委派?3.2、破坏双亲委派的实现四、总结一、前言笔者曾经阅读过周志明的《深入理解Java虚拟机》这本书,阅读完后自以为对jvm有了一定的了解,然而当真正碰到问题的时候,才...转载 2018-08-09 17:22:53 · 11125 阅读 · 3 评论