
JVM
文章平均质量分 84
客 人
这个作者很懒,什么都没留下…
展开
-
java 什么情况下触发gc java gc触发时机
在发生Minor GC之前,虚拟机会先检查老年代最大可用的连续空间是否大于新生代所有对象的总空间。如果允许,那么会继续检查老年代最大可用的连续空间是否大于历次晋升到老年代对象的平均大小,如果大于则尝试Minor GC(如果尝试失败也会触发Full GC),如果小于则进行Full GC。concurrent mode failure是在执行CMS GC的过程中同时有对象要放入老年代,而此时老年代空间不足造成的(有时候“空间不足”是CMS GC时当前的浮动垃圾过多导致暂时性的空间不足触发Full GC)。转载 2023-08-24 00:20:03 · 292 阅读 · 0 评论 -
full gc的触发条件
首先看java堆的模型:新生代 80%的eden区和两个各10%的suvivor区。首先,在程序不断运行过程中新建的对象都在Eden区,当Eden满后,做monir GC,将存活的对象放到Survivor1。当Eden和Survivor1都满后做minor GC放到Survivor2。当Eden和Survivor2都满后再做minor GC,将存活对象放到Survivor1。如此反复。转载 2023-08-24 00:10:17 · 372 阅读 · 0 评论 -
Java内存分配和回收策略以及MinorGC、MajorGC、FullGC
从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC,也叫Young GC。因为Java对象大多具备朝生夕死的特征,所以MinorGC非常频繁,一般回收速度也比较快。一般采用复制算法。Minor GC触发条件Eden区域满了新生对象需要分配到新生代的Eden,当Eden区的内存不够时需要进行MinorGC。转载 2023-08-23 23:12:02 · 263 阅读 · 0 评论 -
实战项目中Java heap space错误的解决
新生代的GC(Minor GC):新生代通常存活时间较短基于Copying算法进行回收,所谓Copying算法就是扫描出存活的对象,并复制到一块新的完全未使用的空间中,对应于新生代,就是在Eden和FromSpace或ToSpace之间copy。老年代的GC(Major GC/Full GC):老年代与新生代不同,老年代对象存活的时间比较长、比较稳定,因此采用标记(Mark)算法来进行回收,所谓标记就是扫描出存活的对象,然后再进行回收未被标记的对象,“蚓无爪牙之利,筋骨之强,上食埃土,下饮黄泉,用心一也。转载 2023-08-23 22:32:50 · 933 阅读 · 0 评论 -
jvm面试题
一、面试题内存模型以及分区,需要详细到每个区放什么。JVM 分为堆区和栈区,还有方法区,初始化的对象放在堆里面,引用放在栈里面,class类信息常量池(static常量和static变量)等放在方法区new:方法区:主要是存储类信息,常量池(static常量和static变量),编译后的代码(字节码)等数据堆:初始化的对象,成员变量 (那种非static的变量),所有的对象实例和数组都要在堆上分配...转载 2018-07-12 20:35:24 · 1101 阅读 · 0 评论 -
jvm总结
一、JVM结构JVM是可运行Java代码的假想计算机1.1 类加载器1.2执行引擎:执行包在装载类的方法中的指令,也就是方法,class文件是否可运行,由执行引擎决定1.3 本地库接口:融合不同的编程语言为Java所用1.4运行数据区 1.4.1本地方法栈:登记native方法,在Execution Engine执行时加载native libraies...原创 2018-07-12 22:57:19 · 276 阅读 · 0 评论 -
JVM 性能调优监控工具
企业级应用开发中经常会遇到以下问题,可以使用工具对JVM进行监管,以便及时查找问题所在。 内存不足OutOfMemory(大对象没有gc等),内存泄露; 线程死锁,线程数过多; 锁争用(Lock Contention),资源未及时释放(数据库); Java进程CPU消耗过高.一、Java自带工具 Java安装目录的bin文件加下有一些工具可以用来监控JVM性能,如jconsole、jvi...转载 2018-07-14 16:54:28 · 2160 阅读 · 0 评论 -
Java的四种引用方式
Java的四种引用方式java内存管理分为内存分配和内存回收,都不需要程序员负责,垃圾回收的机制主要是看对象是否有引用指向该对象。java对象的引用包括 强引用,软引用,弱引用,虚引用Java中提供这四种引用类型主要有两个目的:第一是可以让程序员通过代码的方式决定某些对象的生命周期;第二是有利于JVM进行垃圾回收。下面来阐述一下这四种类型引用的概念:1.强引用 是指创建一个对象并把这个对象赋给一...转载 2018-07-14 18:36:10 · 220 阅读 · 0 评论 -
云计算
一、云计算总纲二、下面是章节部分目录: 2.1 JAVA基础: 2.2 Linux基础 2.3SQL优化 2.4Hadoop 2.0大数据 2.5SPARK+STORM+FLUME 2.6PYTHON 2.7统计学基础 2.8矩阵基础...原创 2019-05-29 21:10:33 · 1020 阅读 · 0 评论 -
JAVA内存模型及垃圾回收自我总结
JAVA内存模型:上图中:局部变量表所需的内存在编译期已经分配完成 表达有误, 准确的表达应该是:局部变量表所需的内存在编译期就已经计算完成(即需要在运行时分配多大内存)。判断对象是否已死(可以回收)的算法从永久代到年轻代的引用可以被当成 GC roots,从年轻代到永久代的引用在标记阶段被直接忽略掉方法区(永久代)回收的相关说明:永久代的垃圾回收主要两部分内容:废弃的常量和无用的类。废弃的常...转载 2017-07-13 15:49:16 · 337 阅读 · 0 评论 -
Java中的析构方法finalize
Java中的析构方法finalize在C++程序设计中有构造函数与析构函数的概念,并且是内存管理技术中相当重要的一部分,而在Java语言中只有构造器(也可以称为构造函数)的概念,却没有析构器或析构函数的概念。这是因为,理论上JVM负责对象的析构(销毁与回收)工作。也就是上面讲到的垃圾回收的概念。那么Java语言中是否真的不存在与C++中析构函数职能类似的方法?其实Java语言中的finalize ...转载 2018-03-09 17:31:22 · 385 阅读 · 0 评论 -
内存溢出和内存泄漏的区别,产生原因以及解决方案
一、概念与区别内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请 了一个integer,但给它存了long才能存下的数,那就是内存溢出。内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但 内存泄露堆...转载 2018-03-09 18:02:51 · 929 阅读 · 0 评论 -
Java虚拟机详解04----GC算法和种类
【声明】 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/文章来源:http://www.cnblogs.com/smyhvae/p/4744233.html 本文主要内容:GC的概念GC算法 引用计数法(无法解决循环引用的问题,不被java采纳) 根搜索算法 现代虚拟机中的垃圾搜集算法: 标记-清除...转载 2018-04-11 14:35:08 · 156 阅读 · 0 评论 -
深入理解Java:类加载机制及反射
一、Java类加载机制1.概述 Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数,属性和方法等,Java允许用户借由这个Class相关的元信息对象间接调用Class对象的功能。 虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接...转载 2018-01-19 18:04:03 · 413 阅读 · 0 评论 -
JVM运行原理详解
1.JVM简析: 作为一名Java使用者,掌握JVM的体系结构也是很有必要的。 说起Java,我们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言、Java类文件格式、Java虚拟机和Java应用程序接口(Java API)。它们的关系如下图所示: Java平台由Java虚拟机和Java应用程序接口搭建,Java语言则是进入这个...转载 2018-04-05 16:20:32 · 182 阅读 · 0 评论 -
JVM(Java虚拟机)优化大全和案例实战
堆内存设置原理JVM堆内存分为2块:Permanent Space 和 Heap Space。Permanent 即 持久代(Permanent Generation),主要存放的是Java类定义信息,与垃圾收集器要收集的Java对象关系不大。Heap = { Old + NEW = {Eden, from, to} },Old 即 年老代(Old Generation),New 即 年轻代(Yo...转载 2018-04-05 16:22:30 · 138 阅读 · 0 评论 -
Java 类主动引用和被动引用
主动引用(会发生初始化)1 遇到new、getstatic、putstatic、invokestatic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。生成这4条指令的几个最常见的Java代码场景是:I. new 一个类的时候会发生初始化[java] view plain copypackage test.class_life_cycle.initialize; class...转载 2018-01-19 18:05:17 · 616 阅读 · 0 评论 -
JVM 内存初学 (堆(heap)、栈(stack)和方法区(method) )
JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)堆区:1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身栈区:1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆...转载 2018-04-12 18:01:38 · 161 阅读 · 0 评论