java内存管理,JAVA内存

本文目录一览:

Java 的内存管理机制是怎样的?

Java的内存分配有三种, \x0d\x0a1、静态存储区:内存在程序编译时就分配好了,比如静态变量; \x0d\x0a2、栈区:各种原始数据类型的局部变量都是在栈上创建的,当程序退出该变量的作用范围的时候,这个变量的内存会被自动释放。 \x0d\x0a3、堆区:对象(包括数组)都是在堆中创建的。程序在运行的时候用new关键字来创建对象,对象创建时会在堆中为其分配内存。

北大青鸟设计培训:java编程内存管理需要注意的问题?

大家在进行程序系统维护的时候是否因为java编程的内存管理问题而无法快速解决导致系统出错呢?下面我们就一起来了解和学习一下,关于java编程内存管理都有哪些知识点。

程序计数器(了解)程序计数器,可以看做是当前线程所执行的字节码的行号指示器。

在虚拟机的概念模型里,字节码解释器工作就是通过改变程序计数器的值来选择下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都要依赖这个计数器来完成。

Java虚拟机栈(了解)Java虚拟机栈也是线程私有的,它的生命周期与线程相同。

虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链表、方法出口信息等。

每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。

局部变量表中存放了编译器可知的各种基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用和returnAddress类型(指向了一条字节码指令的地址)。

如果扩展时无法申请到足够的内存,就会抛出OutOfMemoryError异常。

本地方法栈(了解)本地方法栈与虚拟机的作用相似,不同之处在于虚拟机栈为虚拟机执行的Java方法服务,而本地方法栈则为虚拟机使用到的Native方法服务。

有的虚拟机直接把本地方法栈和虚拟机栈合二为一。

会抛出stackOverflowError和OutOfMemoryError异常。

Java堆堆内存用来存放由new创建的对象实例和数组。

(重点)Java堆是所有线程共享的一块内存区域,在虚拟机启动时创建,此内存区域的目的就是存放对象实例。

Java堆是垃圾收集器管理的主要区域。

java课程培训机构发现由于现在收集器基本采用分代回收算法,所以Java堆还可细分为:新生代和老年代。

从内存分配的角度来看,线程共享的Java堆中可能划分出多个线程私有的分配缓冲区(TLAB)。

曲靖java培训学校告诉你Java语言中内存管理的几个技巧?

从理论上来讲java做的系统并不比其他语言开发出来的系统更占用内存,那么为什么却有这么N多理由来证明它确实占内存呢?两个字,陋习。

(1)别用newBoolean()。

在很多场景中Boolean类型是必须的,比如JDBC中boolean类型的set与get都是通过Boolean封装传递的,大部分ORM也是用Boolean来封装boolean类型的,比如:

ps.setBoolean(“isClosed”,newBoolean(true));

ps.setBoolean(“isClosed”,newBoolean(isClosed));

ps.setBoolean(“isClosed”,newBoolean(i==3));

通常这些系统中构造的Boolean实例的个数是相当多的,所以系统中充满了大量Boolean实例小对象,这是相当消耗内存的。Boolean类实际上只要两个实例就够了,一个true的实例,一个false的实例。

Boolean类提供两了个静态变量:

publicstaticfinalBooleanTRUE=newBoolean(true);

publicstaticfinalBooleanFALSE=newBoolean(false);

需要的时候只要取这两个变量就可以了,

比如:

ps.setBoolean(“isClosed”,Boolean.TRUE);

那么像2、3句那样要根据一个boolean变量来创建一个Boolean怎么办呢?可以使用Boolean提供的静态方法:Boolean.valueOf()

比如:

ps.setBoolean(“isClosed”,Boolean.valueOf(isClosed));

ps.setBoolean(“isClosed”,Boolean.valueOf(i==3));

因为valueOf的内部实现是:return(b?TRUE:FALSE);

所以可以节省大量内存。相信如果Java规范直接把Boolean的构造函数规定成private,就再也不会出现这种情况了。

(2)别用newInteger.

和Boolean类似,java开发中使用Integer封装int的场合也非常多,并且通常用int表示的数值通常都非常小。SUNSDK中对Integer的实例化进行了优化,Integer类缓存了-128到127这256个状态的Integer,如果使用Integer.valueOf(inti),传入的int范围正好在此内,就返回静态实例。这样如果我们使用Integer.valueOf代替newInteger的话也将大大降低内存的占用。如果您的系统要在不同的SDK(比如IBMSDK)中使用的话,那么可以自己做了工具类封装一下,比如IntegerUtils.valueOf(),这样就可以在任何SDK中都可以使用这种特性。

(3)用StringBuffer代替字符串相加。

这个我就不多讲了,因为已经被人讲过N次了。我只想将一个不是笑话的笑话,我在看国内某“著名”java开发的WEB系统的源码中,竟然发现其中大量的使用字符串相加,一个拼装SQL语句的方法中竟然最多构造了将近100个string实例。无语中!

(4)过滥使用哈希表

有一定开发经验的开发人员经常会使用hash表(hash表在JDK中的一个实现就是HashMap)来缓存一些数据,从而提高系统的运行速度。比如java课程认为使用HashMap缓存一些物料信息、人员信息等基础资料,这在提高系统速度的同时也加大了系统的内存占用,特别是当缓存的资料比较多的时候。其实我们可以使用

原创文章,作者:JHQY,如若转载,请注明出处:https://www.506064.com/n/140391.html

(0)
JHQYJHQY
上一篇 2024-10-04
下一篇 2024-10-04

相关推荐

  • mysql编译安装优化(mysql 优化配置)

    本文目录一览: 1、小内存编译安装mysql要加什么参数 2、在linux安装MySQL时采用源码编译安装,但是如何让MySQL的编译时间缩短呢? 3、网站访问量大 怎样优化mys…

    编程 2024-10-03
  • java节假日,java节假日同步

    本文目录一览: 1、JAVA判断当前日期是节假日还是工作日 2、一段可以跳过周末和节假日的java程序怎么写 3、使用java 排除 两个日期段中的 休息日和节假日 。在线等待中十…

    编程 2024-10-04
  • 关于用python读取tle根数的信息

    本文目录一览: 1、如何用Python爬取数据? 2、如何用python通过read()方法统计text1.txt文件中数字、空格、字母出现的次数? 3、怎样用python,读取e…

  • CSS中的页面分页作用是什么?

    在实现网页版面设计的过程中,页面分页是一个比较常见的需求。CSS中提供了多种方式来实现页面的分页效果。本文将从优化用户体验、分组显示内容和提高页面加载速度三个角度来探讨CSS中的页…

    编程 2024-10-14
  • java鼠标事件,java鼠标事件处理

    本文目录一览: 1、Java 程序实现鼠标点击 键盘等事件 2、用java写一个单击鼠标事件 3、java中如何获取网页中鼠标点击过的事件 4、java鼠标点击事件怎么做? Jav…

    编程 2024-10-03
  • 以InputStream为中心的Java开发

    InputStream是Java IO非常重要的一部分,被广泛地使用在各种应用场景中。本文将从多个方面阐述以InputStream为中心的Java开发。 一、InputStream…

    编程 2024-10-03
  • matlab ode45函数用法详解

    一、matlabode45函数概述 matlabode45函数是一种常用的数值解微分方程算法,用于解决各种类型的常微分方程组(ODEs)的初值问题。该函数使用一种常见的Runge-…

    编程 2024-10-04
  • WatchService详解

    一、WatchService的坑 虽然WatchService是一种极为方便的Java API,但是在使用中也存在一些坑。首先,操作系统的缓存机制可能会导致WatchService…

    编程 2024-10-04
  • 包含9月24日cdjs晨会的词条

    本文目录一览: 1、9月24日咸阳二十局是否有阳性一例 2、九月计算机考试时间 3、2022亚马逊秋季会员日是9月 4、9月24号阴历是几月几号 5、9月24哪个明星死了 9月24…

    编程 2024-10-03
  • Python 重要提示和技巧

    对于所有 Python 开发人员或任何其他语言开发人员来说,了解我们正在学习的编程语言的技巧和窍门总是令人着迷的。众所周知,Python 是开发人员最喜欢的编程语言之一。因此,在本…

    编程 2024-10-03

发表回复

登录后才能评论