当前位置:首页 > 内存 > 正文

java类如何分配内存

  • 内存
  • 2024-06-10 08:00:15
  • 2227

一、Java内存区域划分、内存分配原理是什么?

在执行Java程序的过程中,Java虚拟机会将其管理的内存划分为几个不同的数据区域。这些区域有自己的目标,以及创建和破坏的时间。有些区域随着虚拟机进程的启动而存在,有些区域根据用户线程开始和结束销毁的时间创建和销毁。根据《Java虚拟机规范(第2版)》

Java虚拟机管理的内存将包括以下运行时数据区域,如下:


二、有关java内存分配

Java类有一个析构函数,但这个函数是由JVM垃圾收集机制本身调用的。对于不必要的东西,系统不会立即销毁它们,而是将它们存储在内存中,并根据内存使用情况动态删除它们。

看下面两个例子:

例子1:A类中的64MB字节数组。它是为了内存优化而存储的,你可以看到。析构函数调用仍然是最常见的。当然,析构函数调用的实际情况会根据系统配置或硬件配置而有所不同。

publicclassTest{
publicstaticmain(Stringargs[])throwsIOException{
for(inti=0;i<5;i++){
Aa=newA();
}
}
私有静态类A{
byte[]b;
publicA(){
b=newbyte[1024*1024*64];
n("一个A对象有已创建。");
}
@Override
protectedvoidFinalize()抛出可乳化的{
ze();
n("这已经消失了。");
}
}
}

运行输出:


示例2:A类没有存储数据,该类为空。据说驱逐舰不止一次看到过。也就是说,直到程序结束为止创建的五个对象都存储在内存中。

publicclassTest{
publicstaticmain(Stringargs[])throwsIOException{
for(inti=0;i<5;i++){
Aa=newA();
}
}
私有静态类A{
publicA(){
n("对象已创建。");
}
@Override
protectedvoidFinalize()抛出异常{
ze();
n("这已经消失了。");
}
}
}

运行结果: