浅谈对Java内存的一些认知
来源:互联网 发布:java获取当前目录 编辑:程序博客网 时间:2024/06/02 04:14
前言:
由于java中有很多方便的对内存的管理机制,所以写的时候很多东西不需要你考虑到,java都能很好的处理。但是即使这样也不一定能写出优秀的程序,只有对内存有很深刻的认识,才能对写出好的程序有所帮助。
首先,Java内存管理原理:
在java中,有java程序、虚拟机、操作系统三个层次,其中java程序与虚拟机交互,而虚拟机与操作系统交互。这也就保证了java的与平台无关性,三者的运行原理是:
1、程序运行前:Jvm向操作系统请求一定的内存空间,成为初始内存空间!程序执行过程中所需的内存都是由java虚拟机从这片内存空间中划分的。
2、程序运行中:java程序一直向java虚拟机申请内存,当程序所需要的内存空间超出初始内存空间时,java虚拟机会再次向操作系统申请更多的内存供程序使用!
3、内存溢出:程序接着运行,当java虚拟机已申请的内存达到了规定的最大内存空间,但程序还需要跟多的内存,这时会出现内存溢出的错误!
由于属于初学者 我暂时只了解在堆栈方面Java程序的内存分布。
1.首先我们先可以认为局部变量放在栈空间,new出来的东西放在堆空间;
2.局部变量可分为两种类型:基本类型和引用类型;
3.二者作为局部变量,都放在栈中,基本类型直接在栈中保存值,引用类型只保存一个指向堆区的指针,真正的对象在堆里。
作为参数时基本类型就直接传值
例:int i = 9;
由于是基本类型,直接在栈中存放i对应的值9。当i的值改变,直接改变栈空间里面的值。
引用类型传指针。我们可以通过改变栈空间里面的引用类型来操作堆空间里面的对象
例:Test test = new Test(1,2);
其中test是属于引用类型的局部变量,首先jvm会在栈空间里面开辟一块属于test的内存,里面放的是指针,该指针指向堆空
间里面的一块内存空间,里面放的是对象。操作test实际上是通过test的指针间接操作对象。
方法一旦结束,栈中的局部变量立即销毁,但是堆中对象不一定销毁。因为可能有其他变量也指向了这个对象,直到栈中没
有变量指向堆中的对象时,它才销毁,而且还不是马上销毁,要等垃圾回收扫描时才可以被销毁。
- 浅谈对Java内存的一些认知
- 近期对java编程的一些自我认知
- 对Java学习的认知
- Nginx 源码分析-- 浅谈对模块module 的基本认知
- 心里对java的认知越来越清晰
- 对Java中关键字的认知
- 对mysql的information_schema库的一些认知
- 刚子扯谈:我对黑客精神的一些认知
- 新人浅谈实际开发中对于java接口的认知
- MySQL的一些认知
- 对事务的认知
- 对线程的认知
- 对于java反射的一些学习理解和认知
- (一)对 java的发展史和体系结构基本认知。
- 半小时颠覆你对Java单例的认知?
- 对java内存回收机制的一些总结
- 浅谈对Hadoop中HDFS、MapRecuce及YARN的初步认知
- 关于finally的一些认知
- 集成方法stacking的简单阐述
- 猜猜输出什么,为什么?
- HTML基础(3.1 input)
- 腾讯分析系统架构解析
- Struts2监听器(拦截结果监听器)
- 浅谈对Java内存的一些认知
- 计算机视觉中,目标跟踪算法的综述
- Udacity机器学习进阶—监督学习之神经网络迷你项目
- Hibernate中的事物Transaction
- [Usaco2003 Open]Lost Cows
- 使用SurfaceView+MediaPlayer视频播放
- windows 下点加斜杠的路径表示
- 详解CSS display:inline-block的应用
- 数据访问层:分库分表与读写分离