一个进程对应一个jvm实例,一个运行时数据区,又包含多个线程,这些线程共享了方法区和堆,每个线程包含了程序计数器、本地方法栈和虚拟机栈。 核心概述 1.一个jvm实例只存在一个堆内存,堆也是java内存管理的核心区域 2.Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最 ...
分类:
其他好文 时间:
2020-07-15 12:57:51
阅读次数:
71
JVM内存包含以下部分: 堆内存,它是Java对象的存储 非堆内存,Java用于存储加载的类和其他元数据 其他,JVM代码本身,JVM内部结构,加载的探查器代理代码和数据等。 堆 JVM有一个堆,它是运行时数据区,从中分配所有类实例和数组的内存。它是在JVM启动时创建的。 可以使用以下VM选项配置堆 ...
分类:
其他好文 时间:
2020-07-13 18:32:11
阅读次数:
60
方法的参数传递有两种一种是基本类型的传递叫值传递,另一种叫引用类型的传递引用传递。但是本质上都是值传递,而且在方法内部若无return语句返回其实这就是一个副本,所以外部的变量不会改变。引用类型传递是在栈中声明堆中分配,引用类型必须初始化也就是用new运算符否则会报错,而且一块堆内存可以被多个对象所 ...
分类:
编程语言 时间:
2020-07-11 22:56:18
阅读次数:
86
一、基础内部部分 Java虚拟机在运行时,会把内存空间分为若干个区域,根据《Java虚拟机规范(Java SE 7 版)》的规定,Java虚拟机所管理的内存区域分为如下部分:方法区、堆内存、虚拟机栈、本地方法栈、程序计数器。 ? 1.方法区 方法区主要用于存储虚拟机加载的类信息、常量、静态变量,以及 ...
分类:
其他好文 时间:
2020-07-10 19:21:16
阅读次数:
59
二、jvm内存泄漏 1.堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证GC Roots到对象之间有可达路径来避免垃圾收集回收机制清除这些对象,当这些对象所占空间超过最大堆容量时,就会产生OutOfMemoryError的异常。 新产生的对象最初分配在新生代,新生代满后会进行一次Min ...
分类:
其他好文 时间:
2020-07-10 18:35:00
阅读次数:
68
一、问题原因 用JMeter压测,有时候当模拟并发请求较大或者脚本运行时间较长时,JMeter会停止,报OOM(内存溢出)错误。 原因是JMeter是一个纯Java开发的工具,内存由java虚拟机JVM管理,当内存回收不及时,堆内存不足时,就会报内存溢错误。 概念补充: 内存泄露:应用使用资源之后没 ...
分类:
编程语言 时间:
2020-07-10 15:43:43
阅读次数:
124
匿名对象就是没有明确的给出名字的对象,一般匿名对象只是用一次,而且匿名对象只在堆内存中开辟空间,而不存在栈内存的引用。 匿名对象的作用:基本上作为其他类实例化对象的参数或返回值传递。 语法格式:new 对象名(参数列表); 1.作为参数 class Test {public static void ...
分类:
其他好文 时间:
2020-07-09 12:10:22
阅读次数:
57
一、用 jmap(Memory Map for Java)查看堆内存信息 1.查看堆内存信息 命令:jmap -histo pid 解析:可以打印出当前堆中所有每个类的实例数量和内存占用 结果: ...
分类:
其他好文 时间:
2020-07-09 12:04:13
阅读次数:
57
关于JVM,也许你听过这些术语:年轻代(新生代)、老年代、永久代、minor gc(young gc)、major gc、full gc 不要急,先上图,这是jvm 堆内存结构图 仔细的你发现了 图中有些分数8/10和1/10,这是默认配置下各个代内存分配比例。 举个栗子: 假如总heap max分 ...
分类:
其他好文 时间:
2020-07-09 12:00:19
阅读次数:
197
###成员变量和局部变量的区别 区别 成员变量 成员方法 类中位置不同 类中方法外 方法内或者方法申明上 内存位置不同 堆内存 栈内存 生命周期不同 随着对象的存在而存在,随着对象的消失而消失 随着方法的调用而存在,随着方法的调用完毕而消失 初始化值不同 有默认的初始值 没有默认的初始值,必须先定义 ...
分类:
编程语言 时间:
2020-07-05 15:23:29
阅读次数:
60