JVM
空杯心态_虚怀若谷
空杯心态_虚怀若谷
展开
-
java堆外内存简介
Java的堆外内存本来是高贵而神秘的东西,只在一些缓存方案的收费企业版里出现。但自从用了Netty,就变成了天天打交道的事情,毕竟堆外内存能减少IO时的内存复制,不需要堆内存Buffer拷贝一份到直接内存中,然后才写入Socket中;而且也没了烦人的GC。好在,Netty所用的堆外内存只是Java NIO的 DirectByteBuffer类,通读一次很快。还有一些sun.misc.*的类转载 2016-07-11 18:02:26 · 291 阅读 · 0 评论 -
JVM内部细节之一:synchronized关键字及实现细节(轻量级锁Lightweight Locking)
在C程序代码中我们可以利用操作系统提供的互斥锁来实现同步块的互斥访问及线程的阻塞及唤醒等工作。然而在Java中除了提供Lock API外还在语法层面上提供了synchronized关键字来实现互斥同步原语。那么到底在JVM内部是怎么实现synchronized关键子的呢? 一、synchronized的字节码表示: 在java语言中存在两种内建的synchro转载 2017-03-31 11:59:32 · 298 阅读 · 0 评论 -
一次Java内存溢出异常的分析过程
前些天,服务器上一个服务跑了一个多月突然当掉了。看了下日志,程序抛出了java.lang.OutOfMemoryError,之前也出现过同样的错误,服务跑了三个月内存溢出。出现这个异常,初步判断是程序有内存泄漏,接下来需要利用一些工具来分析具体原因。 首先使用jdk自带的工具jmap转储(dump)java内存堆数据到本地文件中。jmap转储(dump)命令格式如下: jmap转载 2017-03-14 18:22:16 · 141 阅读 · 0 评论 -
深入理解java虚拟机:java内存区域(内存结构划分)
图一:java内存结构划分由上图可知,java内存主要分为6部分,分别是 程序计数器,虚拟机栈,本地方法栈,堆,方法区和直接内存 ,下面将逐一详细描述。1、程序计数器线程私有 ,即每个线程都会有一个,线程之间互不影响,独立存储。代表着当前线程所执行字节码的行号指示器。2、虚拟机栈线程私有 , 它的生命周期和线程相同 。描述的是 java方法执行的内存模型 :每个转载 2017-03-14 09:39:17 · 142 阅读 · 0 评论 -
JVM:查看java内存情况命令
jinfo:可以输出并修改运行时的java 进程的opts。 jps:与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。 jstat:一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。 jmap:打印出某个java进程(使用pid)内存内的所有'对象'的情况(如:产生那些对象,及其数量)。转载 2017-03-29 16:30:16 · 189 阅读 · 0 评论 -
JVM1.6 GC详解
前言 JVM GC是JVM的内存回收算法,调整JVM GC(Garbage Collection),可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率。但是调整GC是以个极为复杂的过程,所以我们要了解JVM内存组成,回收算法,对象分配机制。 JVM 堆内存组成Java堆由Perm区和Heap区组成,Heap区由Old区和转载 2017-03-20 21:29:33 · 229 阅读 · 0 评论 -
JVM GC算法 CMS 详解
前言CMS,全称Concurrent Low Pause Collector,是jdk1.4后期版本开始引入的新gc算法,在jdk5和jdk6中得到了进一步改进,它的主要适合场景是对响应时间的重要性需求 大于对吞吐量的要求,能够承受垃圾回收线程和应用线程共享处理器资源,并且应用中存在比较多的长生命周期的对象的应用。CMS是用于对tenured generation的回收,也就是年老代的回收转载 2017-03-20 20:53:43 · 117 阅读 · 0 评论 -
JVM 字节码执行实例分析
前言最近在看《Java 虚拟机规范》和《深入理解JVM虚拟机》,对于字节码的执行有了进一步的了解。字节码就像是汇编语言,是 JVM 的指令集。下面我们先对 JVM 执行引擎做一下简单介绍,然后根据实例分析 JVM 字节码的执行过程。包括:for 循环字节码分析try-catch-finally 字节码分析运行时栈帧结构栈帧是用于支持虚拟机进行方法调用和方法执行的数据转载 2017-03-09 17:58:38 · 149 阅读 · 0 评论 -
《深入理解java虚拟机》学习笔记4——Java虚拟机垃圾收集器
Java堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收算法,年老代主要使用标记-整理垃圾回收算法,因此java虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器,JDK1.6中Sun HotSpot虚拟机的垃圾收集器如下:图中如果两个垃圾收集器直接有连线,则表明这两个垃圾收集器可以搭配使用。(1).Serial垃圾收集器:Seri转载 2017-02-23 16:33:13 · 119 阅读 · 0 评论 -
JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
摘要: JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,本博客希望能起抛砖引玉之用,让大家能开始对JVM性能调优的常用工具有所了解。 现实企业级Java开发中,有时候我们会碰到下面这些问题:OutOfMemoryError,内存不足转载 2017-03-02 17:29:05 · 124 阅读 · 0 评论 -
深入理解Java内存模型之系列篇
目录(?)[-]深入理解Java内存模型一基础并发编程模型的分类Java内存模型的抽象重排序处理器重排序与内存屏障指令happens-before深入理解Java内存模型二重排序数据依赖性as-if-serial语义程序顺序规则重排序对多线程的影响深入理解Java内存模型三顺序一致性数据竞争与顺序一致性保证顺序一致性内存模型同步程序的顺序一致性效果未同步程序转载 2017-02-20 11:08:48 · 148 阅读 · 0 评论 -
JVM 结构图
目录(?)[-]一Java技术体系模块图二JVM内存区域模型方法区虚拟机栈本地方法栈堆 新生代老年代程序计数器 三直接内存一:Java技术体系模块图二:JVM内存区域模型1.方法区也称"永久代” 、“非堆”, 它用于存储虚拟机加载的类信息、常量、静态转载 2016-09-01 14:58:51 · 169 阅读 · 0 评论 -
java之HeapByteBuffer&DirectByteBuffer以及回收DirectByteBuffer
byte buffer一般在网络交互过程中java使用得比较多,尤其是以NIO的框架中;看名字就知道是以字节码作为缓冲的,先buffer一段,然后flush到终端。而本文要说的一个重点就是HeapByteBuffer与DirectByteBuffer,以及如何合理使用DirectByteBuffer。1、HeapByteBuffer与DirectByteBuffer,在原理上,转载 2016-07-12 08:20:23 · 836 阅读 · 0 评论 -
JAVA 8 :从永久区(PermGen)到元空间(Metaspace)
你注意到了吗?JDK 8早期可访问版本已经提供下载了,java 开发人员可以使用java 8 提供的新的语言和运行特性来做一些实验。其中一个特性就是完全的移除永久代(Permanent Generation (PermGen)),这从JDK 7开始Oracle就开始行动了,比如:本地化的String从JDK 7开始就被移除了永久代(Permanent Generation )。JDK 8让它最转载 2016-07-11 21:48:08 · 334 阅读 · 0 评论 -
Java 6 JVM参数选项大全(中文版)
本文是基于最新的SUN官方文档Java SE 6 Hotspot VM Options 编写的译文。主要介绍JVM中的非稳态选项及其使用说明。为了让读者明白每个选项的含义,作者在原文基础上补充了大量的资料。因为是初稿,如有描述错误,敬请指正。 非稳态选项使用说明-XX:+ 启用option-XX:- 不启用option-XX:= 设定option的值为数字类型,可跟单位转载 2017-08-30 09:42:18 · 260 阅读 · 0 评论