关闭

Android0828(二)

204人阅读 评论(0) 收藏 举报
分类:

接(一)http://blog.csdn.net/molu_chase/article/details/52352223

1.1.java内存介绍,堆栈的区别,堆栈介绍,堆中常量池和新建的对象保存的地方

先讲一下缓存,从内存的角度讲,由于计算机存储设备的读写和其处理器的运算的时间差距很大,所以需要在其中加一层读写速度尽可能接近处理器运算速度的高速缓存。

借用一张图来说明多处理器,多缓存,内存之间的关系【1】



下面再来讲Java内存机制

Java把内存一般分为两块,堆和栈

简单来说,堆就是存放动态数据,如new出的对象和数组,当然常量池也在堆中。而栈中则是存放一般的数据类型,这里包括对象的引用,其指向对象的地址。

更近一步,堆中的数据是归Java虚拟机管的,而虚拟机并不一定会在对象无引用的时候销毁对象(只有当内存不够的时候),这样就造成了Java比较占内存。而栈中则是没有使用便销毁,比如对于一个for语句定义的变量,在跳出for循环后,就会得到销毁。【2】【3】



接下来讲一下常量池

常量池分为静态常量池和运行时常量池,静态常量池是.class文件中的常量池。运行时常量池是jvm将.class中的加载进方法后的,也叫方法区的运行时常量池。

关于其中的关系,有这么一句话:运行时常量池相对于CLass文件常量池的另外一个重要特征是具备动态性,Java语言并不要求常量一定只有编译期才能产生,也就是并非预置入CLass文件中常量池的内容才能进入方法区运行时常量池,运行期间也可能将新的常量放入池中,这种特性被开发人员利用比较多的就是String类的intern()方法。【4】

有一篇文章讲的很不错,只有当是字符串的赋值,该变量才指向的是常量池,但凡是变量的赋值,都不会指向常量池

例如String s1="ss";String s2="df";String s3="ss"+"df";String s4=s1+s2;

其中s3是常量,但是s4就不是,因此s3==s4为false【5】


还有代码区和数据区

代码区是用来存放从硬盘上读取的源程序代码

数据区是用来存放static定义的静态成员



关于new的对象不得不让我们想起了其他的其中生成对象的方法

讲讲通过类加载机制来生成的对象,即通过Class.forName()调用启动类的加载器,获取类类型,然后通过类类型的newInstance()方法获取对象,不过在newInstance()中仍然new的对象再返回,因此其仍然是存在堆中。【6】


参考

1.http://www.cnblogs.com/nexiyi/p/java_memory_model_and_thread.html

2.http://www.cnblogs.com/xwdreamer/archive/2012/04/01/2428857.html

3.http://blog.csdn.net/shimiso/article/details/8595564

4.http://www.jianshu.com/p/c7f47de2ee80

5.http://www.cnblogs.com/iyangyuan/p/4631696.html

6.http://www.jb51.net/article/42648.htm








0
0
查看评论

Android0828(四)

http://www.androidchina.net/3173.html http://blog.sina.com.cn/s/blog_73b32f0b0102vbrn.html
  • molu_chase
  • molu_chase
  • 2016-09-01 16:02
  • 136

Android0828(三)

接(二)http://blog.csdn.net/molu_chase/article/details/52356346 2.倒置一个链表 下面的ConvertList()实现的是倒置一个链表,用的是递归的方法,直到走到链表为空,返回该节点,并执行调用函数后的代码,将返回的节点的next节点设为...
  • molu_chase
  • molu_chase
  • 2016-08-31 19:54
  • 124

Android0828(一)

北邮人上摘抄一爱奇艺Android面试题目如下 一面: 1.java内存介绍,堆栈的区别,堆栈介绍,堆中常量池和新建的对象保存的地方 2.倒置一个链表 3.链表和数组的区别,查找某个元素和插入某个元素的时间空间复杂度 4.IntentFlag中设置启动模式和manifest设置启动模式的区别,act...
  • molu_chase
  • molu_chase
  • 2016-08-30 17:20
  • 226

Android0828(五)

7.一个类中两个方法,两个方法分别操作产量a和b,并且两个方法都增加了synchronized修饰,两个产量的修改会同步吗?如何还有什么方法可以实现同步,使用方法内的同步代码块实现 方法上的同步,并且在一个类中,方法就是同步的,其中的产量修改肯定是同步的。如果用方法块实现的话,可以将方法快传进的锁设...
  • molu_chase
  • molu_chase
  • 2016-09-01 21:11
  • 142

Tyvj 1730 二逼平衡树 (树套树裸题)

题目链接 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排名 2.查询区间内排名为k的值 3.修改某一位值上的数值 4.查询k在区间内的前驱(前驱定义为小于x,且最大的数) 5.查询k在区间内的后...
  • qq_26564523
  • qq_26564523
  • 2015-08-22 10:23
  • 460

喷水装置二

/* * 程序的版权和版本声明部分: * Copyright (c) 2014,郑州大学SIAS国际学院 * 作 者: 王 杰 * 完成日期:2014 年 3 月 31 日 * * 对任务及求解方法的描述部分: * 输入描述: 略或见注释、总结 * 问题描述: 略或...
  • siaswj
  • siaswj
  • 2014-03-31 18:24
  • 726

BZOJ 3196: Tyvj 1730 二逼平衡树|线段树套平衡树

第一次写真正的树套树:线段树套平衡树?!(平衡树套线段树?!) 线段树维护的是区间,然后对于线段树维护的区间的所有数字都维护一个平衡树,然后所有的操作都对每个平衡树单独处理。 比如说操作3,需要先二分答案,然后再询问每个区间的平衡树来judgejudge 这样的复杂度是log3nlog^3n的...
  • ws_yzy
  • ws_yzy
  • 2016-02-23 15:18
  • 657

二三维一体化 彰显GIS应急管理核心价值

原文地址:彰显GIS应急管理核心价值" href="http://blog.sina.com.cn/s/blog_7f1143e00100u1qd.html" target="_blank">二三维一体化 彰显GIS应急管理核心价值作者:超图...
  • sophiasy
  • sophiasy
  • 2013-12-25 10:07
  • 4237

喷水装置(二)题目及解法

喷水装置(二) 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的喷水装置,每个喷水装置i喷水的效果是让以它为中心半径为Ri的圆都被润湿。请在给出的...
  • u011809767
  • u011809767
  • 2016-09-10 08:07
  • 1393

网易2017内推笔试编程题合集(二)(第三题) 不要二

[编程题] 不要二 二货小易有一个W*H的网格盒子,网格的行编号为0~H-1,网格的列编号为0~W-1。每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。 对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为: ( (x1-x2) * (x1-x2) + (y1-y2)...
  • firenet1
  • firenet1
  • 2016-08-19 19:15
  • 844
    个人资料
    • 访问:162562次
    • 积分:3454
    • 等级:
    • 排名:第11453名
    • 原创:178篇
    • 转载:123篇
    • 译文:1篇
    • 评论:17条
    欢迎访问我的个人博客
    https://moluchase.github.io/
    最新评论