java如何避免使用临时变量,Java临时变量
内容导航:
一、java内存泄漏怎么解决
总结网络、书本中的相关知识,介绍如何避免内存泄漏、溢出首先介绍一下什么是内存泄漏、溢出(参考我的收藏):1、内存泄漏 memory
leak:对象可达但不可用;是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。
2、内存溢出 out of memory:内存大小不够;是指程序在申请内存时,没有足够的内存空间供其使用,出现out of
memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。
如何避免内存泄漏、溢出1、尽早释放无用对象的引用
好的办法是使用临时变量的时候,让引用变量在推出活动域后自动设置为null,暗示垃圾收集器来收集该对象,防止发生内存泄漏。
2、程序进行字符串处理时,尽量避免使用String,而应该使用StringBuffer。
因为String类是不可变的,每一个String对象都会独立占用内存一块区域。
3、尽量少用静态变量 因为静态变量是全局的,存在方法区,GC不会回收。
(用永久代实现的方法区,垃圾回收行为在这个区域是比较少出现的,垃圾回收器的主要目标是针对常量池和类型的卸载)4、避免集中创建对象,尤其是大对象,如果可以的话尽量使用流操作
JVM会突然需要大量neicun,这时会出发GC优化系统内存环境5、尽量运用对象池技术以提高系统性能
生命周期长的对象拥有生命周期短的对象时容易引发内存泄漏,例如大集合对象拥有大数据量的业务对象的时候,可以考虑分块进行处理,然后解决一块释放一块的策略。
6、不要在经常调用的方法中创建对象,尤其忌讳在循环中创建对象
可以适当的使用hashtable,vector创建一组对象容器,然后从容器中去取这些对象,而不用每次new之后又丢弃。
7、优化配置内存溢出的解决方案是什么:1、从代码层面进行优化完善,尽量避免该情况发生;2、调整优化服务器配置: 1)设置-Xms、-Xmx等
2)设置NewSize、MaxNewSize相等 3)设置 Heap size,PermGen
spacejava中虽然使用了gc策略,但事实上还是会出现内存泄漏现象的,java因此还提出了弱引用等局部解决方案。
但楼主说的(0)是不会形成内存泄漏的。
其实这里都是两个范畴的内存了。
楼上以及我开始说的java中的内存是指虚拟机的内存,映射到宿主机可以有各种实现,虽然一般也是映射到内存。
而(0)会析构掉虚拟机,也就是把这个虚拟的机器都拆了,也就无从谈起虚拟机内存泄漏不泄漏的概念,正所谓皮之不存,毛将焉附。
而问题是宿主机的内存是否泄漏了。
从原理上说,虚拟机运行时,不管执行怎样的指令,映射到宿主机器资源,都回在机器被拆掉时释放。
当然,从实现上说,如果宿主操作系统,或者jvm有bug,当然有可能造成内存泄漏,但和java程序员写的客户程序无关。
(补充:包括在宿主机内杀java进程,其资源回收问题是操作系统和java平台的责任。
我们在古老的操作系统经常会遇到文件没正常关闭之类的问题,但现在的操作系统这些问题应该不会很大,也就是宿主机其实也有一定的回收机制,包括内存回收,但着本身不是内存泄漏的范畴,内存泄漏是指程序运行时的客户程序造成的内存资源失控。
当客户程序退出时的问题,就是操作系统设计的范畴了)
二、如何在Java中获取环境变量的值
1、用();获取当前系统环境的变量名,如下:
publicclass Test {
publicstaticvoid main(String[] args) {
Map map = ();
for(Iterator itr = ().iterator();();){
String key = .next();
(key + “=” + (key));
}
}
}
系统环境变量名如下:
LE:用户目录
MAIN:用户域
:可执行后缀
.JAVA_HOME:Java安装目录
:用户临时文件目录
ve:系统盘符
les :默认程序目录
N :帐户的域的名称
ROFILE:用户公共目录
ME:Session名称
:临时目录
:path环境变量
:classpath环境变量
_ARCHITECTURE :处理器体系结构
:操作系统类型
_LEVEL:处理级别
AME :计算机名
:系统安装目录
t :系统启动目录
:用户名
:命令行解释器可执行程序的准确路径
:应用程序数据目录
2、用ties(); 获取当前的系统属性,如下:
publicclass Test {
publicstaticvoid main(String[] args) {
Properties props = ties();
();
}
}
系统属性名如下:
Java:运行时环境版本
Java :运行时环境供应商
:Java供应商的 URL
.:Java安装目录
: Java虚拟机规范版本
:Java虚拟机规范供应商
07.. :Java虚拟机规范名称
:Java虚拟机实现版本
:Java虚拟机实现供应商
10. .name:Java虚拟机实现名称
:Java运行时环境规范版本
:Java运行时环境规范供应商
13..name:Java运行时环境规范名称
:Java类格式版本号
:Java类路径
:加载库时搜索的路径列表
:默认的临时文件路径
:要使用的 JIT编译器的名称
:一个或多个扩展目录的路径
20. .name :操作系统的名称
:操作系统的架构
:操作系统的版本
:文件分隔符
:路径分隔符
:行分隔符
26..name :用户的账户名称
:用户的主目录
:用户的当前工作目录
三、Java中变量使用的问题
答:引用数据类型数组的元素是对象引用,初值为空,必须实例化;而基本类型数组元素都有默认初值。
四、栈中的变量使用的时候是怎么用的
答:但像Stringstrabc;这种场合下,其字符串值却是保存了一个指向存在栈中数据的引用!为了更好地说明这个问题,我们可以通过以下的几个代码进行验证
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/103965.html