JVM
石头dhf
三人行必有吾师!
展开
-
jvm内存GC详解
一、相关概念 a. 基本回收算法 1. 引用计数(Reference Counting) 比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。 2. 标记-清除(Mark-Sweep) 此算法执行分两阶段。第一阶段从引用根节点开始标记所有被引用的对转载 2017-08-21 09:20:38 · 194 阅读 · 0 评论 -
利用内存分析工具(Memory Analyzer Tool,MAT)分析java项目内存泄露
一、开发环境:操作系统:ubuntu 14.04IDE:Eclipse Java EE IDE for Web Developers. Version: Luna Service Release 2 (4.4.2)JDK版本:1.7.0_80MAT版本:1.5.0二、事件起因最近通过公司的哨兵监控系统发现我的项目内存使用率每天都会增加一点,如下图。对转载 2017-12-16 10:51:12 · 387 阅读 · 0 评论 -
JVM内存设置多大合适?Xmx和Xmn如何设置?
转载:https://www.dutycode.com/jvm_xmx_xmn_xms_shezhi.html问题:新上线一个java服务,或者是RPC或者是WEB站点, 内存的设置该怎么设置呢?设置成多大比较合适,既不浪费内存,又不影响性能呢?分析:依据的原则是根据Java Performance里面的推荐公式来进行设置。具体来讲:Java整个堆大小设置,Xmx 和 Xms设置为老年代存活对象的...转载 2018-03-06 22:07:14 · 2680 阅读 · 0 评论 -
从jvm的角度来看java的多线程
转载:http://www.cnblogs.com/sheeva/p/6366782.html最近在学习jvm,发现随着对虚拟机底层的了解,对java的多线程也有了全新的认识,原来一个小小的synchronized关键字里别有洞天。决定把自己关于java多线程的所学整理成一篇文章,从最基础的为什么使用多线程,一直深入讲解到jvm底层的锁实现。多线程的目的为什么要使用多线程?可以简单的分两个方面来说...转载 2018-03-01 22:48:52 · 170 阅读 · 0 评论 -
JVM内存区域介绍
装载:http://www.cnblogs.com/sheeva/p/6231225.html学习JVM第一个要了解的就是JVM的内存区域。Java虚拟机在运行时会从操作系统内存中划分一部分出来作为JVM内存,而JVM内存又划分为以下几个区域: 大体上可以分为两种:线程共享数据区该类型的数据区,多个线程共用一个数据区。线程私有数据区该类型的数据区,每个线程都拥有自己独立的数据区。 下面逐一介绍图...转载 2018-03-02 11:40:16 · 131 阅读 · 0 评论 -
java多线程:synchronized和lock比较浅析
转载:https://www.cnblogs.com/shangxiaofei/p/6482968.htmlsynchronized是基于jvm底层实现的数据同步,lock是基于Java编写,主要通过硬件依赖CPU指令实现数据同步。下面一一介绍一、synchronized的实现方案1.synchronized能够把任何一个非null对象当成锁,实现由两种方式:a.当synchronized作用于非...转载 2018-03-02 22:29:48 · 178 阅读 · 0 评论 -
HotSpot虚拟机对象创建过程介绍
1.对象的创建Java是一门面向对象语言,在运行过程中无时不刻不在创建对象。从语言层面,创建对象仅仅是一个new关键字而已,而在虚拟机中,对象(文中讨论的对象仅限于普通java对象,不包含数组和Class对象等)的创建又是怎么样的过程呢?1.1类加载检查虚拟机遇到一条new指令的时候,首先将去检查这个指令的参数在常量池中能否定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初...转载 2018-03-05 23:13:40 · 191 阅读 · 0 评论 -
Java内存模型
1. 概述 多任务和高并发是衡量一台计算机处理器的能力重要指标之一。一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions Per Second,TPS)这个指标比较能说明问题,它代表着一秒内服务器平均能响应的请求数,而TPS值与程序的并发能力有着非常密切的关系。在讨论Java内存模型和线程之前,先简单介绍一下硬件的效率与一致性。2.硬件的效率与一致性 由于计算机的存储...转载 2018-03-06 12:44:42 · 132 阅读 · 0 评论 -
[深入理解JVM 一]---Java程序执行流程
转载:https://blog.csdn.net/sinat_33087001/article/details/76977437本篇是《深入理解JVM》系列博客的第一篇,旨在全局把控,先对整体流程有个认识,然后再分阶段详解.本篇博客大部分内容来自http://www.cnblogs.com/dqrcsc/p/4671879.htmljava一些地方重新进行了整理,根据自己的理解重新规划了内容—TM...转载 2018-05-01 20:42:38 · 721 阅读 · 0 评论 -
深入Java核心 Java内存分配原理精讲
转载:http://developer.51cto.com/art/201009/225071.htmJava内存分配与管理是Java的核心技术之一,之前我们曾介绍过Java的内存管理与内存泄露以及Java垃圾回收方面的知识,今天我们再次深入Java核心,详细介绍一下Java在内存分配方面的知识。一般Java在内存分配时会涉及到以下区域:◆寄存器:我们在程序中无法控制◆栈:存放基本类型的数据和对象...转载 2018-05-11 17:41:41 · 99 阅读 · 0 评论 -
JVM调优总结 -Xms -Xmx -Xmn -Xss
堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。典型设置:java -Xmx3550m -Xms355转载 2017-08-23 23:00:40 · 185 阅读 · 0 评论 -
JVM系列一:JVM内存组成及分配
java内存组成介绍:堆(Heap)和非堆(Non-heap)内存 按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发转载 2017-08-23 22:30:24 · 162 阅读 · 0 评论 -
JVM系列二:GC策略&内存申请、对象衰老
JVM里的GC(Garbage Collection)的算法有很多种,如标记清除收集器,压缩收集器,分代收集器等等,详见HotSpot VM GC 的种类 现在比较常用的是分代收集(generational collection,也是SUN VM使用的,J2SE1.2之后引入),即将内存分为几个区域,将不同生命周期的对象放在不同区域里:young generation,tenu转载 2017-08-23 22:10:21 · 225 阅读 · 0 评论 -
JVM(Java虚拟机)优化大全和案例实战
堆内存设置原理JVM堆内存分为2块:Permanent Space 和 Heap Space。Permanent 即 持久代(Permanent Generation),主要存放的是Java类定义信息,与垃圾收集器要收集的Java对象关系不大。Heap = { Old + NEW = {Eden, from, to} },Old 即 年老代(Old Generation),Ne转载 2017-08-21 09:04:32 · 168 阅读 · 0 评论 -
JVM 的类初始化机制
文章目录1. Loading, Linking, and Initialization1.1. Loading1.2. Linking1.2.1. Verification1.2.2. Preparation1.2.3. Resolution1.3. Initialization2. 示例2.1. 属性在不同时期的赋值2.2. 主动调用 vs. 被动转载 2017-07-30 12:13:10 · 356 阅读 · 0 评论 -
深入类加载器----线程上下文类加载器
深入类加载器(四)----线程上下文切换类加载器 线程上下文类加载器 我们知道在Java中的加载器的加载模式是双亲委托模式,这种模式是遵从父类优先的原则。但是在一些场合中,这种双亲委托机制反而是行不通的。最典型的是JDBCApi:其实JDBCApi包括俩部分:一部分是oragle公司提供的接口类,一部分是转载 2017-07-23 19:44:16 · 275 阅读 · 0 评论 -
Java程序内存分析:使用mat工具分析内存占用
摘要: 在工作中可能会遇到内存溢出这种灾难性的问题,那么程序肯定是存在问题,找出问题至关重要,上一篇文章讲了jmap命令的使用方法,当然用jmap导出的文件我们也看不懂啊,那就交给memory analyzer(mat)这个工具,让他帮助我们来观察程序的内存分布情况吧。 MAT 不是一个万能工具,它并不能处理所有类型的堆存储文件。但是比较主流的厂家和格式,例如 Sun, HP转载 2017-08-21 17:24:03 · 264 阅读 · 0 评论 -
一次使用Eclipse Memory Analyzer分析Tomcat内存溢出
前言在平时开发、测试过程中、甚至是生产环境中,有时会遇到OutOfMemoryError,Java堆溢出了,这表明程序有严重的问题。我们需要找造成OutOfMemoryError原因。一般有两种情况:1、内存泄露,对象已经死了,无法通过垃圾收集器进行自动回收,通过找出泄露的代码位置和原因,才好确定解决方案;2、内存溢出,内存中的对象都还必须存活着,这说明Java堆分转载 2017-08-21 17:57:33 · 215 阅读 · 0 评论 -
Linux与JVM的内存关系分析
转自: http://tech.meituan.com/linux-jvm-memory.html葛吒2014-08-29 10:00引言在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约600m,Linux自身使用大约800m。从表面上,物理内存应该是足够使用的;但实际运行的情转载 2017-08-23 18:19:03 · 234 阅读 · 0 评论 -
JVM参数设置、分析
转载:http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率。但是调整GC是以个极为复杂的过程,由于各个程转载 2017-08-23 18:39:45 · 199 阅读 · 0 评论 -
Java Hotspot G1 GC的一些关键技术
转载:https://tech.meituan.com/g1.html前言G1 GC,全称Garbage-First Garbage Collector,通过-XX:+UseG1GC参数来启用,作为体验版随着JDK 6u14版本面世,在JDK 7u4版本发行时被正式推出,相信熟悉JVM的同学们都不会对它感到陌生。在JDK 9中,G1被提议设置为默认垃圾收集器(JEP 248转载 2017-08-23 21:03:38 · 390 阅读 · 0 评论 -
JVM7、8详解及优化
1. JVM堆内存划分这两天看到下面这篇文章的图不错。一图读懂JVM架构解析1.1 JDK7及以前的版本其中最上一层是Nursery内存,一个对象被创建以后首先被放到Nursery中的Eden内 存中,如果存活期超两个Survivor之后就会被转移到长时内存中(Old Generation)中。永久内存中存放着对象的方法、变量等元数据信息转载 2017-08-23 21:33:02 · 392 阅读 · 0 评论 -
Java内存溢出的详细解决方案
一、内存溢出类型1、java.lang.OutOfMemoryError: PermGen spaceJVM管理两种类型的内存,堆和非堆。堆是给开发人员用的上面说的就是,是在JVM启动时创建;非堆是留给JVM自己用的,用来存放类的信息的。它和堆不同,运行期内GC不会释放空间。如果web app用了大量的第三方jar或者应用有太多的class文件而恰好MaxPermSize设置较小,超出了也会导致这...转载 2018-05-11 17:56:52 · 576 阅读 · 0 评论