![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
内存分配
文章平均质量分 69
软件测试开发架构师
这个作者很懒,什么都没留下…
展开
-
malloc内存分配
malloc内存分配转载 2022-09-18 14:14:17 · 815 阅读 · 0 评论 -
缺页异常(重要)
缺页异常转载 2022-09-18 11:31:43 · 2273 阅读 · 1 评论 -
jvm中方法的存放位置
其实java方法是存在方法区的方法区:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据,方法编译出的字节码也是保存在这个区域。栈区(虚拟机栈):主要是存储局部变量表(当然也还有其他信息)。说到这可能有人疑惑,平时在运行一个方法时总说在栈区中开辟一块内存,这是怎么回事呢。其实栈区中的数据,也就是栈帧,他描述的是方法的一次执行瞬间。栈帧里面放的就是一些方法中的局部变量和方法的形参。并且这些局部变量/形参的生命周期是比较短暂的,在本方法调用的时候拥有生命,调用结束后转载 2021-08-20 10:21:11 · 2767 阅读 · 0 评论 -
jvm中变量的存放位置
记住一个原则即可:方法体中的引用变量和基本类型的变量都在栈上,其他都在堆上。对于局部变量:如果是基本类型,会把值和变量名直接存储在栈;如果是引用类型,比如String s = new String("william");会把其对象存储在堆,而把这个对象的引用(指针)存储在栈。对于成员变量:成员变量作为对象的属性,当然是放在堆里了。对象在堆里,对象中的内容就是各种字段。只有方法执行的时候所用到的各种指令参数才会入栈出栈。类的成员变量在不同对象中各不相同,都有自己的存储空间(成员变量转载 2021-08-20 10:10:21 · 1595 阅读 · 0 评论 -
在内存中java类和对象的区别
在内存中java类和对象的区别在内存中java类和对象的区别:1,类是静态的一些代码,位于方法区2,对象是new出来的,位于堆内存3,静态变量/方法在所有的对象中只有一份,也就是说:所有对象共用一份静态变量/方法4,类的成员变量(非静态)在不同的对象中都有不同的值5,类的方法(非静态)在所有的对象中只有一份,调用该方法的时候,该方法才占用内存(栈内存)...原创 2021-02-01 11:36:45 · 279 阅读 · 0 评论 -
java内存溢出 栈溢出的原因与排查方法
java内存溢出 原因与排查方法1、 内存溢出的原因是什么?内存溢出是由于没被引用的对象(垃圾)过多造成JVM没有及时回收,导致剩余的内存不够用,造成的内存溢出。如果出现这种现象可行代码排查:一)是否应用中的类中和引用变量过多使用了Static修饰 如public staitc Student s;在类中的属性中使用 static修饰的最好只用基本类型或字符串。如public static int i = 0; //public static String str;二)是否 应用 中使用了大转载 2021-01-26 18:55:19 · 3401 阅读 · 0 评论 -
Java JDK1.8中常量池所处区域
Java JDK1.8中常量池所处区域类常量池诞生时间:编译时所处区域:堆(类常量池存在Class文件中,一个Class文件对应一个类常量池)储存内容:符号引用和字面量。字符串常量池诞生时间:编译时所处区域:堆储存内容:堆内的字符串对象的引用和字符串常量。运行时常量池诞生时间:当类加载到内存中后所处区域:本地内存(每个class都加载后常量池的数据被汇总到运行时常量池,运行时常量池存在元空间中)储存内容:class文件元信息描述,编译后的代码数据,引用类型数据(类经过解析转载 2021-01-26 10:44:32 · 2779 阅读 · 8 评论 -
static无法访问非static变量和方法
static无法访问非static变量和方法为什么static无法访问非static变量和方法?static是类的成员,与对象无关,优先于对象的加载,也就是说一个类出现的时候,类里面的static就已经加载了,但是此时还没有去new对象,只有new了对象之后内存中的堆里面才加载非static成员,所以在没有new对象的时候,内存中的static是访问不到非static的成员。这也就是为什么在static方法里面访问非static方法时必须先new对象,然后再通过对象的应用来访问非static成员!原创 2021-01-24 21:26:27 · 740 阅读 · 0 评论 -
Java 内存分配详解(六)
Java 内存分配详解(六)原创 2021-01-24 20:28:00 · 104 阅读 · 0 评论 -
Java 内存分配详解(五)
Java 内存分配详解(五)栈(stack):主要保存基本类型(或者叫内置类型)(char、byte、short、int、long、float、double、boolean)和对象的引用,数据在栈内可以共享,速度仅次于寄存器(register),快于堆。堆(heap):用于存储对象和数组常量池:常量池的划分Class 文件常量池运行时常量池字符串常量池1. Class 文件常量池Class 文件常量池指的是编译生成的 class 字节码文件,其结构中有一项是常量池(Co.转载 2021-01-24 20:06:11 · 502 阅读 · 1 评论 -
Java 内存分配详解(四)
Java 内存分配详解(四)对于成员变量和局部变量:成员变量就是方法外部,类的内部定义的变量;局部变量就是方法或语句块内部定义的变量。局部变量必须初始化。形式参数是局部变量,局部变量的数据存在于栈内存中。栈内存中的局部变量随着方法的消失而消失。成员变量存储在堆中的对象里面,由垃圾回收器负责回收。class BirthDate { private int day; private int month; private int year; ...转载 2021-01-24 18:18:14 · 167 阅读 · 0 评论 -
Java 内存分配详解(三)
Java 内存分配详解(三)1,每个线程包含一个栈区,栈中只保存基础数据类型的值和自定义对象的引用(不是对象),对象都存放在堆区中2,每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。3,栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。4,存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)5,jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身 6,局部变量必须初原创 2021-01-24 17:52:02 · 318 阅读 · 0 评论 -
Java 内存分配详解(二)
Java 内存分配详解(二)最近在看《深入理解Java虚拟机》,书中给了几个例子,比较好的说明了几种OOM(OutOfMemory)产生的过程,大部分的程序员在写程序时不会太关注Java运行时数据区域的结构:感觉有必要通过几个实在的例子来加深对这几个区域的了解。Java程序运行时,数据会分区存放,JavaStack(Java栈)、 heap(堆)、method(方法区)。1、Java栈Java栈的区域很小,只有1M,特点是存取速度很快,所以在stack中存放的都是快速执行的任务,基本转载 2021-01-24 16:40:59 · 630 阅读 · 0 评论