社区
Java EE
帖子详情
在Java编程中,有必要在一个对象完成工作后,用obj = null;吗?
xiaoyue_yu
2003-10-16 02:48:38
和java中自动垃圾回收有什么关系呢?
...全文
92
10
打赏
收藏
在Java编程中,有必要在一个对象完成工作后,用obj = null;吗?
和java中自动垃圾回收有什么关系呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
swinging
2003-10-17
打赏
举报
回复
另外说一点,对object=null操作后,不一定是会使对象被回收的,
对象是否被回收是看一个对象是否还有引用指向它,如果你将对象的引用置为null,
而这个对象还有其它引用在引用它,那么你这么做基本就没有任何意义了,
而且还在程序上给人困扰,因为你使一个变量具有多重意义,
在你不经意的时候,很可能会在将这个变量置为NULL后又使用它(因为开始时这个变量
确实是指向你需要的对象的,所以你后来还用它,而忘了自己中途把它置为NULL了),
于是BUG就爬出来了。
swinging
2003-10-17
打赏
举报
回复
我觉得你们(楼上所有的)思路有问题。
其实如果一个OBJECT使用完了,需要NULL下了,不如让它就在此OVER,
就是说,尽量在使该OBJECT的引用的生存空间只有使用它的那么大,
一个对象引用在使用是一般是最好不用来反复通过赋值指向不同对象的,
这样变量的意义更确定一些,有助于程序的清晰,
因此一旦不使用该对象引用的对象时,最好是同时使这个引用也被丢弃,
给个简单例子:
假设有一个List list,
当使用迭代器遍历它时,最好能这样:
for(Iterator iter = list.iterator; iter.hasNext();) {
// do something
}
这样的话,变量iter的生存空间就只在使用它的范围内,一旦程序流程跑出了循环,那么这个引用就被丢弃了。
一般我们很习惯这样的写法:
Iterator iter = list.iterator;
while(iter.hasNext()) {
// do something
}
其实两个好像没有什么本质区别,最大不同就是变量iter的生存空间不同,
象楼主说的,在使用完后置iter=null,即:
Iterator iter = list.iterator;
while(iter.hasNext()) {
// do something
}
iter=null;
肯定不如上面使用FOR循环来得简洁,而且这里并没有丢弃变量iter,而实际iter将不再被使用了的。
umeshu
2003-10-17
打赏
举报
回复
虽然楼上说的有一定的正确性,但null一下还是有助于垃圾回收得以正确执行的。
songsd
2003-10-17
打赏
举报
回复
object = null有时候很有用,有时候一点用也没有,纯粹是浪费cpu,浪费读你代码人的感情(这点我深有体
会了),object = null的语句的目的是让某个对象的引用数为0,这样的话,当垃圾回收线程运行时候,会将该
对象占用的资源释放,使该对象真正的消失。理解这个目的再加上对变量作用域的理解,就很容易知道什
么时候该用,什么时候不该用了。
这里举几个例子
比如有个方法
void method1()
{
List l= new ArrayList();
向l中加入10000个对象;
使用或处理l; //到此l已经使用完毕
methodX(); //methodX()需要长时间执行;
}
对于这种情况,显然需要执行l = null;否则假如最后执行methodX(); ,执行了很长时间,这段时间gc执行
了好多次,但是l引用的对象一直却得不到释放,于是造成了白白的内存浪费,显然这样的代码不是最好
的。
假如后面的mehodX()换成了执行时间很短的代码(即使很多行),那就没有必要执行l = null了。
是不是需要使用l=null需要衡量的是,l是否占用足够多的内存空间。2,使用完后,l作用域范围内还需要执行的时间。3,使用l = null会使代码看起来很别扭。
再举一个不需要执行 "=null"的例子
method2()
{
.....
for(int i = 0;i<n;i++)
{
MyClass m ....
process(m);
m=null;
}
.....
}
littlecpu
2003-10-17
打赏
举报
回复
只要你的函数原子性足够细,那有这些烦心事
littlecpu
2003-10-17
打赏
举报
回复
放屁
happyegg
2003-10-16
打赏
举报
回复
null一下没有用的,java中的垃圾回收是自动完成,自己null一下,内存还是不会释放的
Mars_wx
2003-10-16
打赏
举报
回复
觉得还是null一下
zeeler
2003-10-16
打赏
举报
回复
java中的GC可以自动回收作废类的对象,但是只回收Heap中存储的对象,所以在java编程中尽量都使用new来生成对象,例如: String hello = new String("");
另外,还要注意GC回收的标准是Heap中的对象没有相关的reference指向它,具体的内容请参考《Java编程思想(第二版)》
xiaoyue_yu
2003-10-16
打赏
举报
回复
up
基于Web的酒店客房管理系统的设计与实现+论文+开题
博主介绍:✌在职
Java
研发工程师、专注于程序设计、源码分享、技术交流、专注于
Java
技术领域和毕业设计✌项目名称基于Web的酒店客房管理系统的设计与实现系统说明3.2.1 用户模块功能分析前台模块应主要包括用户登录模块、用户注册模块、查看客房信息模块、客房预定 模块、用户留言模块、充值模块和个人信息维护模块。用户登录模块:用户通过输入注册的的账号和密码,然后进行身份验证,匹配成功 后实现登录功能。用户注册模块:用户输入合法的账号和密码可以实现注册功能。 查看客房信息模块:用户可以通过首页查看客房的价格,图片,详情等信息,从而 可以选择想要预定的房间。 客房预定模块:用户选择自己想要预定的客房后,可以通过输入相关信息进行订房操作。用户留言模块:用户可以向管理员发送留言。 充值模块:用户可以通过添加银行卡再为自己进行充值操作。 个人信息维护模块:用户可以修改自己的姓名、密码、身份证号等信息,还可以查看自己的订单。3.2.2 管理员模块功能分析对于管理员而言,一个好的管理系统总是能让酒店的管理
工作
事半功倍[7]。管理员 能够通过这个系统对自己的酒店情况一目了然,应该包括客户留言模块、客房管理模 块、订房信息管理模块、入住信息管理模块、统计分析模块、酒店新闻管理模块、会 员信息管理模块、员工信息管理模块、系统用户管理模块、个人信息维护模块。客户留言模块:管理员可以查看并回复用户的留言。客房管理模块:管理员可以管理客房信息,可以添加新的客房,删除已经停用的客房信息,还可以修改现有的客房信息。订房信息管理模块:管理员可以处理用户的订房请求,为用户办理入住手续。入住信息管理模块:对于没有注册的线下客户,也可以办理入住手续。统计分析模块:可以对酒店所有的入住信息进行记录和总结分析。酒店新闻管理模块:管理员可以更新网站上的新闻公告,展示图片等信息。会员信息管理模块:管理员可以查看到所有的注册会员信息,可以对会员信息进行删除,修改,添加操作。员工信息管理模块:管理员可以查看到自己公司所有的员工信息,而且还可以对员工的相关信息进行管理。系统用户管理模块:管理员可以查看到所有的系统管理员信息并对管理员信息进行管理。个人信息维护模块:管理员可以更改自己的登录密码或者是姓名、性别、手机号等 相关个人信息。编辑 环境需要1.运行环境:最好是
java
jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 5.数据库:MySql 5.7版本;6.是否Maven项目:否;技术栈1. 后端:Spring+SpringMVC+Mybatis2. 前端:JSP+CSS+
Java
Script+jQuery使用说明1. 使用Navicat或者其它工具,在mysql
中
创建对应名称的数据库,并导入项目的sql文件;2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行;3. 将项目
中
springmvc-servlet.xml配置文件
中
的数据库配置改为自己的配置;4. 运行项目,在浏览器
中
输入http://localhost:8080/ 登录运行截图编辑编辑编辑编辑编辑编辑编辑编辑编辑编辑编辑编辑编辑编辑编辑 用户管理控制层:package com.houserss.controller;import
java
x.servlet.http.HttpSession;import org.apache.commons.lang3.StringUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import com.houserss.common.Const;import com.houserss.common.Const.Role;import com.houserss.common.ServerResponse;import com.houserss.pojo.User;import com.houserss.service.IUserService;import com.houserss.service.impl.UserServiceImpl;import com.houserss.util.MD5Util;import com.houserss.util.TimeUtils;import com.houserss.vo.DeleteHouseVo;import com.houserss.vo.PageInfoVo;/** * Created by admin */@Controller@RequestMapping(/user/)public class UserController if (ip !=
null
&& ip.length() > 0) String[] ips = ip.split(,);for (int i = 0; i
iOS开发之
Obj
ective-C
编程
基础
本系列课程视频提供iOS培训之
Obj
ective-C基础视频,第一个
Obj
-C程序 Hello world,面向
对象
编程
,面向过程
编程
,类和
对象
,self使用详解, property基础,synthesize基础,propertyNam,Property的setter和getter,dot等基础开发内容,学生从零开始iOS开发的优质视频教程。
OpenGL专题课程-模型与骨骼动画精讲
课程简介:本课程详细讲解基于Assimp C++库的模型读取模块,并且做了关于动画理论、关键帧插值、骨骼动画矩阵原理、骨骼动画读取与播放等知识的详细讲解,对于游戏行业或者三维可视化从业人员会有比较大的帮助。目前很多公司已经开始构建自己的底层图形引擎,其
中
动画就是重要的一个版块,本课程可以让学员从原理层面以及底层代码层面了解FBX、
OBJ
模型的读取本质,并且梳理程序架构,编写骨骼动画。2 课程解决优势:很多同学学习骨骼动画苦于无法找到详细的资料,其
中
卡主的问题点也比比皆是,比如FBX内嵌材质的读取,骨骼动画各类矩阵的应用,理论结合模型读取库读出来的数据如何一一对应等。我们的课程可以带领大家从原理+实践的角度进行学习,每一个知识点都会:a 推导基础公式及原理 b 一行一行进行代码实践从而能够保证每位同学都学有所得,能够看得懂,学得会,用得上,并且能够培养自主研究的能力。3 学习课程所得:学习本课程完毕之后,学员可以全方位的完全了解基于Assimp库的模型读取结构,了解每一个变量背后的含义,并且课程拥有随堂附赠的源代码,保证同学可以随时根据老师的代码纠正自己的错误。跟随课程一行一行写完代码的同学,可以获得自己的模型读取代码库,并且深度理解骨骼动画的原理与模型读取原理 本课程含有全源代码
node-v4.1.0-linux-x64.tar.xz
Node.js,简称Node,是一个开源且跨平台的
Java
Script运行时环境,它允许在浏览器外运行
Java
Script代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8
Java
Script引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用
Java
Script编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践
中
,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
基于AT89S52的数字温度计设计说明.docx
基于AT89S52的数字温度计设计说明.docx
Java EE
67,515
社区成员
225,878
社区内容
发帖
与我相关
我的任务
Java EE
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
复制链接
扫一扫
分享
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章