说到java对象的创建,首先应该提下java的内存机制,最主要的两块应该就是堆内存和栈内存。

简单点来说栈内存主要是保存基本数据类型的值和保存引用变量,堆内存主要用来存放new产生的对象,数组。

堆是被所有线程共享的一块内存区域,在虚拟机启动的时候被创建。我的理解就是堆是用来存放实实在在东西的,而栈只是用来存放一个编号的。

好比你是个真实存在的人(编号9527,这个就是那些栈中引用指向的地方),你就是放在堆中,你的名字叫张三,而这个张三是放在栈中一个引用变量,你也可以有一个小名叫李二狗,这个李二狗和张三都是指向堆中9527这个对象。

其次还有方法区。方法区用来存放已被加载的类的信息、常量、静态变量。常量池是在方法区中而不是堆内存中,”AAA“字符串是在常量池的 ,new String(”AAA“),会在常量创建一个”AAA“字符串,还会在堆中创建一个字符串对象。

对象的创建:

1.避免创建不必要的对象,避免在方法内部创建对象,因为如果在方法内部创建对象XX xxx = new XXX();不考虑线程安全的条件下如果有N个线程调用该方法,那么就会创建N个XXX对象。

2.考虑使用单例模式

3.一些不需要改变的工具类可以使用static静态代码块来初始化。private static final XXX xxx;static {xxx = new XXX();},首先static 修饰的字段是属于类的,所有对象都可以使用,其次静态代码块只会在类加载的时候初始化一次也就只会创建一个XXX对象。

4.尽量使用基础数据类型,避免使用包装类,一是拆箱装箱耗时,二是对象比基础数据更占内存。可以试试:Long sum = 0L;for(int i = 0;i<Integer.MAX_VALUE;i++){sum += i;},将sum的生命改成基础数据类型long再试试。

对象的销毁:java中如果一个栈先增长,再收缩,那么从栈中弹出来的对象不会被当作垃圾回收,即使栈中已经不再引用这些对象。因为栈中还维护对这些对象的过期引用(永远也不会再被解除的引用)

1.某些情况下,可以考虑将某些引用置空告诉jvm这个对象已经没有引用了;即使后面再有使用也会抛出空异常,很快便可以发现问题。

2.避免调用finalizer 方法,子类如果重写该方法清除一些资源,切记在重写方法中还要手动调用父类的该方法super.finalizer ();而且最好是在finally中调用,保证不管发生什么异常父类的finalizer 方法都会执行

3.可以考虑提供一些清理资源的方法。比如io流相关类都提供close方法,数据库连接Connection也有close关闭连接

最新文章

  1. Euclid求最大公约数
  2. 【转】css学习专题-BFC
  3. 清除Outlook 2013中缓存的邮件地址
  4. UVA 11181 dfs 概率
  5. visual assist常用快捷键
  6. 官网下载qt-opensource-windows-x86-mingw482_opengl-5.3.1.exe。封装好了Qt libraries、Qt Creator。只需要这一个可执行程序就好了。
  7. 如何解决“BPM导入组织架构出现问题导致系统无法登陆”
  8. ASP.NET MVC5+EF6+EasyUI 后台管理系统(86)-日程管理-fullcalendar插件用法
  9. c++(基数排序)
  10. .addClass(),.removeClass(),.toggleClass()的区别
  11. python更新数据库脚本两种方法
  12. 2014年7月10日,我人生的最重要Upgrade
  13. verdi\debussy的使用技巧
  14. mongo删除指定字段,可多个字段同时删除
  15. 简单Hash函数LongHash
  16. iOS - 切换图片/clip subview/iCarousel
  17. PC端,移动端分离,如何结合??
  18. sql having 函数 按匿名字段作为条件进行查询
  19. css控制英文内容自动换行問題
  20. (转)大数据量下的SQL Server数据库优化

热门文章

  1. ZeroC Ice IceBox使用
  2. ubuntu12.04:Tomcat 7服务器:手动安装
  3. PowerBI开发 第十篇:R 脚本
  4. Android studio统计项目总行数
  5. JS基础:this的指向以及call、apply的作用
  6. Servlet总结二(文件路径)
  7. add two nums
  8. ccf 目录格式转换
  9. 魔咒,90%未学满三个月Python编程的朋友都会出错!
  10. 学HTTP协议所要知道的基础知识(微总结)