疯狂JAVA16课之对象与内存控制
- java内存管理分为两个方面:内存分配和内存回收。这里的内存分配特指创建java对象时JVM为该对象在对内存中所分配的内存空间。内存回收指的是当该java对象失去引用,变成垃圾时,JVM的垃圾回收机制自动清理该对象,并回收该对象所占用的内存。由于JVM内置了垃圾回收机制会收失去引用的java对象所占用的内存,所以很多java开发者认为java不存在内存泄漏,资源泄露的问题。实际上是一种错觉,java程序依然会有内存泄漏。
- 由于JVM的垃圾回收机制由一条后台线程完成,本身也是非常消耗性能的,因此如果肆无忌惮的创建对象,让系统分配内存,拿这些分配的内存酱油垃圾回收机制进行回收,这样做有两个坏处:
- 不断分配内存使得系统中可用内存减少,从而降低程序运行性能
- 大量已经分配内存的会收拾的垃圾回收的负担加重,降低程序运行性能
- 代码:

.png)
package section2;
class Base{
private int i =2;
public Base(){
this.display();
}
public void display(){
System.out.println(i);
}
}
class Derived extends Base{
private int i =22;
public Derived(){
i =222;
}
public void display(){
System.out.println(this.i);
}
}
public class Test {
public static void main(String[] args) {
new Derived(); //此时执行先执行了父类的构造方法,输出的i是本类的,
// 此时i还未初始化,所以为0,等输出后i才被赋值为222 }
}
- 对于父类定义的public成员变量,系统将其保留在父类中,并不会将他转移到其子类中,所以父类和子类可以同时拥有同名的实例变量
.png)
.png)


- 定义final变量时,只有在定义时指定初始值,系统才会执行”宏替换“ 。
- 如果程序需要在局部内部类(只有局部内部类才可以访问局部变量:即放在方法里定义的内部类)中使用局部变量,那么这个局部变量必须使用final修饰符修饰。因为:对于普通局部变量而言,他的作用于就是停留在该方法内,当方法执行结束,该局部变量也随之消失;但内部类则可能产生隐式的”闭包“,闭包将使得局部变量脱离它所在的方法继续存在。
疯狂JAVA16课之对象与内存控制的更多相关文章
- 《疯狂Java:突破程序员基本功的16课》读书笔记-第二章 对象与内存控制
Java内存管理分为两个方面:内存分配和内存回收.这里的内存分配特指创建Java对象时JVM为该对象在堆内存中所分配的内存空间.内存回收指的是当该Java对象失去引用,变成垃圾时,JVM的垃圾回收机制 ...
- (二)Java对象与内存控制
一.java的类变量和实例变量: java中的变量可分成两种:成员变量和局部变量. 1.局部变量包括以下几类: 方法内的局部变量:作用域为方法体. 代码块内的局部变量:作用域为代码块 形参:方法内的形 ...
- Java 对象及其内存控制
作者:禅楼望月(http://www.cnblogs.com/yaoyinglong) 更新:其实这里有好多的变戏法,只要你理解了他们在JVM的中的实现机制,就豁然开朗了.有时间我会把这些变戏法的东西 ...
- JAVA对象与内存控制
1.1 实例变量和类变量 成员变量和局部变量: 局部变量分为三大类: 1)形参:在方法签名中定义的局部变量,由方法调用者为其赋值,随方法的结束而消亡. 2)方法内的局部变量:在方法内定义的局部变量,随 ...
- 《疯狂Java:突破程序员基本功的16课》读书笔记-第一章 数组与内存控制
很早以前就听过李刚老师的疯狂java系列很不错,所以最近找一本拿来拜读,再此做下读书笔记,促进更好的消化. 使用Java数组之前必须先对数组对象进行初始化.当数组的所有元素都被分配了合适的内存空间,并 ...
- 《深入浅出Node.js》第5章 内存控制(未完)
@by Ruth92(转载请注明出处) 第5章 内存控制 基于无阻塞.事件驱动建立的 Node 服务,具有内存消耗低的优点,非常适合处理海量的网络请求. 内存控制正是在海量请求和长时间运行的前提下进行 ...
- .NET对象的内存布局
每个虚拟机都有它自己的对象布局,本文我们将针对sscli源码和windbg调试器来查看不同类型的.net对象布局. 在.net虚拟机里,每个对象都需要保存这些信息: 对象的类型: 对象实例的成员属性( ...
- block没那么难(三):block和对象的内存管理
本系列博文总结自<Pro Multithreading and Memory Management for iOS and OS X with ARC> 在上一篇文章中,我们讲了很多关于 ...
- .NET对象占内存多少
.NET对象占内存多少 一直有一个小小的疑惑——.NET一个对象或者一个集合占多少内存?有没有很快速的方法获取,而不是简单的估计分析对象大小? 查了MSDN,和一些其他人的分析,得到解决是托管代码对象 ...
随机推荐
- RPC原来就是Socket——RPC框架到dubbo的服务动态注册,服务路由,负载均衡演化
序:RPC就是使用socket告诉服务端我要调你的哪一个类的哪一个方法然后获得处理的结果.服务注册和路由就是借助第三方存储介质存储服务信息让服务消费者调用.然我们自己动手从0开始写一个rpc功能以及实 ...
- nw.js自定义最小化图标的click事件
选择frameless时,最小化和关闭按钮的点击事件需要自己来做,办法是: /* * 下面两个模块一定要引入到js文件中 */ var gui = require('nw.gui'); var win ...
- 设计模式之单例模式的简单demo
/* * 设计模式之单例模式的简单demo */ class Single { /* * 创建一个本类对象. * 和get/set方法思想一样,类不能直接调用对象 * 所以用private限制权限 * ...
- .net FTP上传文件
FTP上传文件代码实现: private void UploadFileByWebClient() { WebClient webClient = new WebClient(); webClient ...
- Mac 下使用homebrew 安装node后全局安装找不到问题
Homebrew 是mac上的包管理工具,其官网: http://brew.sh/ 在使用brew安装node之后安装一些常见工具比如 gulp npm install -g gulp 提示安装成功之 ...
- HTML中的标记-遁地龙卷风
第三版 上一版本在未经验证的情况下,盲目的认为很多东西是那样,造成错误,非常抱歉. 0.什么是标记 <input type="checkbox" checked />& ...
- 地图中插入表格——ArcMap篇
在制作专题图的过程中,不但要有地理要素表示空间位置,经常还要在图的周围制作一些表格数据.这里对ArcMap中的插入方法进行总结. 方法一:插入对象 利用菜单中的"插入"-" ...
- Dynamics CRM 之ADFS 使用 WID 和代理的联合服务器场
为此部署拓扑 Active Directory 联合身份验证服务 (AD FS) 等同于联合服务器场与 Windows 内部数据库 (WID) 拓扑中,但它将代理服务器计算机添加到外围网络,以支持外部 ...
- 苹果 OS X 系统U盘重装-抹盘重装、系统盘制作
鉴于前段时间系统出了点问题,然后直接将盘抹了,来个彻底干净的系统重装.这里敲下过程.(网络恢复太慢了,我整整一个晚上竟然没down下来,恼怒了,直接U盘装) First,系统盘制作: 1.首先需要有: ...
- 如何在github上下载单个文件夹?
作者:ce ge链接:https://www.zhihu.com/question/25369412/answer/96174755来源:知乎著作权归作者所有,转载请联系作者获得授权. Git1.7. ...