文档章节

2,对象与内存控制

7
 761218914
发布于 2015/10/12 10:24
字数 632
阅读 36
收藏 1

由于jvm的垃圾回收机制由一条后台线程完成。如果不考虑内存管理,会出现以下问题:

1,不断分配内存使得系统的内存减少,从而降低程序运行的性能,

2,大量已经分配的内存的回收使得垃圾回收负担加重,降低程序的运行的性能。

Java中的变量:

1,变量可以分为成员变量和局部变量。

        局部变量分为,形参(方法签名中使用的局部变量),方法内的局部变量,代码块内的局部变量。

        类体内定义的变量成为成员变量,如果由static修饰,则称之为静态变量或者类变量。如果没有修饰那么就是非静态变量或者实例变量。

        同一个jvm中,每一个类只有一个class对象,但是可以创建多个java对象,因此类对象只需要创建一次,但是程序需要几个实例,那么实例变量就需要几块内存空间。

例变量的初始化时机:程序会先执行非静态代码块然后再执行构造函数。假如非静态代码块中有对成员函数赋值的操作,那么赋值操作的结果和程序的源码的顺序有关。

public static void main(String[] args) {
  Cat catt=new Cat("kobe");
  System.out.println(catt);
   }
  public static class Cat{
  String name;
  double weight=2.3;
  public Cat(String name){
   System.out.println("执行构造器");
   this.name=name;
  }
  {
   System.out.println("非晶态代码狂");
   weight=2.0;
  }
    public String toString(){
   return name+weight;
  }
   }

非晶态代码狂
执行构造器
kobe2.0

public static void main(String[] args) {

  Cat catt=new Cat("kobe");

  System.out.println(catt);
 }
 public static class Cat{
  String name;
  public Cat(String name){
   System.out.println("执行构造器");
   this.name=name;
  }
  {
   System.out.println("非晶态代码狂");
   weight=2.0;
  }
  double weight=2.3;
  public String toString(){
   return name+weight;
  }  
 }

非晶态代码狂
执行构造器
kobe2.3
 类变量的初始化。1,定义类变量的时候进行初始化。2,静态初始化块中对类变量指定初始值。这两种方式得执行顺序和它在源代码中的执行顺序相同。

关于父类构造器;

创建任何java对象得时候,总是先依次调用每个父类的非静态初始化块,父类构造器(总是从object开始),最后才调用本类的非静态代码块。

(this()和super()只能在构造器中使用,而且他们都必须作为构造器的第一行代码)

 

© 著作权归作者所有

共有 人打赏支持
7
粉丝 5
博文 133
码字总数 47263
作品 0
南昌
程序员
私信 提问
OC内存管理常见的面试题

#####面试:说一说对内存管理的理解?(原理) - 手动内存管理(MRC):1.在创建一个对象的时候系统会自动创建这个对象的引用计数并赋值为1;2.当引用计数为0的时候,对象会去调用dealloc方法来...

鹿微微鹿
2016/03/25
275
0
jvm性能调优都做了什么

jvm调优的目的: 1、控制GC的行为,GC是一个后台处理,但他也会消耗系统资源,因此经常根据系统运行的程序特性来改变GC行为 2、控制JVM堆栈大小:一般来说,JVM在内存分配上不需要你改,但是...

small达达
2016/03/09
243
0
03 - Object-C内存管理

1、基本原理 1.1、 什么是内存管理 移动设备的内存极其有限,每个app所能占用的内存是有限制的 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间。比如回...

口十耳
2015/12/29
18
0
结构型模式:Proxy 代理模式

结构型模式:Proxy 代理模式 1、直接与间接 1)从们对于复杂的软件系统常常有一种处理方法,即增加一层间接层,从而对系统获得一种更为灵活、满足特定需求的解决方案。 A 直接:A对象直接使...

flyhighly
2011/04/24
0
0
JAVA创建对象,是一定先返回对象的引用再初始化吗

有人和我说Person p = new Person()这是先返回了对象的引用在初始化了Person里面的属性,而我认为是不一定的,这个次序是由编译器控制的,因为次序不一致性,所以发布对象的时候才有线程不安...

0o涛涛o0
2017/11/07
710
13

没有更多内容

加载失败,请刷新页面

加载更多

Flink 幕后之内存管理

Flink 幕后之内存管理 引言 目前很多大数据处理框架,例如Hadoop、Spark、Storm、Flink等。它们都基于JVM语言开发(java or scala),运行在JVM上。为了加速合并或者排序(基于磁盘的方式通常...

moyiguke
16分钟前
2
0
风起云涌,看云计算如何赋能媒体行业?

在媒体行业的转型升级中,云计算的出现多维度促进了媒体融合,打破传统媒体行业与新媒体的界限和竞争格局,在媒体素材管理、移动端功能演进的过程中扮演着重要角色,颠覆了传统媒体新闻采编、...

七牛云
19分钟前
0
0
Mybatis开发遇到问题汇总

mybatis 中![CDATA[...]] 在今天使用Mybatis的xml文件中写sql语句时写入了一些特殊字符 如 < > & 等,但解析xml文件的时候会被转义,事实上并不希望它被转义,可以使用<![CDATA[ ]]>. 这是XML...

wangwei2134
27分钟前
0
0
参数验证 @Validated 和 @Valid 的区别

来源:blog.csdn.net/qq_27680317/article/details/79970590 整编:Java技术栈(公众号ID:javastack) Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303 规范......

Java技术栈
30分钟前
0
0
JS实现继承的几种方式

前言 JS作为面向对象的弱类型语言,继承也是其非常强大的特性之一。那么如何在JS中实现继承呢?让我们拭目以待。 JS继承的实现方式 既然要实现继承,那么首先我们得有一个父类,代码如下: ...

不负好时光
34分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部