「java内存分配静态」静态变量什么时候分配内存

博主:adminadmin 2022-12-24 17:33:07 60

本篇文章给大家谈谈java内存分配静态,以及静态变量什么时候分配内存对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java中内存分配的问题

您好,提问者:

因为name是静态的,当类加载的时候静态方法和静态属性首先加载,静态的范围是类.class。

这里要注意的是:静态不属于对象,而且它的值都是共享的。

所以当a.name="zhangsan";这个时候的single1.a是zhangsan。

a1.name="lisi"; 这个时候是将共享静态池中的single1.name改为list了。

说白了其实:静态不属于new,而是整个内存,是共享的。

java中的全局变量和静态变量是在编译时分配内存还是在加载时分配内存?

全局变量是在创建对象的时候分配内存的 创建对象过程为

分配空间。

递归的创建父类对象。

初始化成员变量。

调用构造方法创建一个对象。

静态变量是在类加载的时候分配空间的,静态变量和对象没有关系 是在JVM第一次读到一个类的时候加载信息的过程中分配空间的 加载过程为

1 .加载父类(如果父类已经加载过,则不在加载)。

2.初始化静态属性 。

3 .按顺序的初始化静态代码块   初始化的前提就是分配空间 。

而且静态变量在以后的创建对象的时候不在初始化 所以一般用静态来保存共享信息

静态变量存在于方法区中,成员变量存在于堆内存中,成员变量所属于对象JAVA成员变量和静态变量的区别,成员变量随着对象创建而存在。随着对象被回收而消失。静态变量随着类的加载而存在。

静态变量是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量,例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由static加以定义后才能成为静态外部变量,或称静态全局变量。

对于自动变量,它属于动态存储方式。但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式。由此看来,一个变量可由static进行再说明,并改变其原有的存储方式。

而在以Pascal为代表的许多程序语言中,所有局部变量都由系统自动分配存储空间,而所有全局变量的存储空间则以静态分配的方式获取,因此由于实际上“局部变量”和“全局变量”这两个术语已足以涵盖所有的情况,在这些程序语言中通常不使用“静态变量”这一术语,而直接以“全局变量”代之。

在这些程序语言中,静态变量就是全局变量,而即使在有明确区分全局和静态变量的程序语言中,在编译后的代码里二者也以相同的方式获取存储空间。而今术语“静态变量”的概念则主要基于C族语言的“static”的定义。

静态变量也可以用于存储常数。具体来说,静态变量可用const,constant或final等关键字标识,这时其值就会在编译时设定,并且无法在运行时改变。编译器通常将静态常量与文本一起置于目标文件的文本区域,而非常量初始化数据则置于数据区。

简述java内存分配与回收策率有什么用?

引言:大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC。新生代GC(Minor GC):指发生在新生代的垃圾收集动作,因为Java对象大多都具备朝生夕灭的特性,所以Minor GC非常频繁,一般回收速度也比较快。老年代GC(Major GC / Full GC):指发生在老年代的GC,出现了Major GC,经常会伴有至少一次的Minor GC(但非绝对的,在Parallel Scavenge收集器的收集策略里就有直接进行Major GC的策略选择过程)。Major GC的速度一般会比Minor GC慢10倍以上。

一、内存分配

内存分配:1.栈区:栈可以分为Java虚拟机和本地方法栈。2.堆区域:堆由所有线程共享,并在虚拟机启动时创建。这是存储对象实例的唯一目的,也是gc的主要领域。一般可以分为年轻一代和老一代两大块。3.方法区:由所有线程共享,用于存储信息、常量、静态变量等。由虚拟机加载的。它是由Java虚拟机描述为堆的逻辑部分。习惯被称为永久一代。4.程序计数器:是当前线程执行的行号指示器,跳转指令等都依赖于这个完成,线程私有。

二、回收策略

回收策略和次要垃圾收集和主要垃圾收集(完整垃圾收集)1.对象优先分配在堆区的Eden区。2.大物件直接进入老年代。3.长期生存者直接进入老年代。回收:当Eden区域没有足够的空间分配时,虚拟机将执行Minor GC。未成年人GC一次,一般发生在Eden新生代,因为这个区域的物体寿命短,频率高,回收速度快。主要气相色谱发生在老年代。一般触发老年的GC不会触发Minor GC,但是通过配置,Minor GC之前可以执行一次,可以加快老年的恢复。

三、总结

可达性分析:以名为“GC根”的对象为起点,从这些节点向下搜索。当一个对象不能连接到“垃圾回收根”时,意味着它是可回收的。

java内存分配静态的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于静态变量什么时候分配内存、java内存分配静态的信息别忘了在本站进行查找喔。

The End

发布于:2022-12-24,除非注明,否则均为首码项目网原创文章,转载请注明出处。