jvm一点内存的知识(持续积累中)
来源:互联网 发布:小米无线鼠标mac 编辑:程序博客网 时间:2024/05/21 10:04
Integer i = 1;
int i = 1;
在使用的过程中差别并不是很大 可是在底层存储的时候明显有很大区别(这个也是在阅读了前辈的博客知道的再次感谢)
首先说Integer是包装类 int 是基本类型
int i = 1; 这个1是存在常量池的,常量池是在方法区中。
Integer i = 1; 这个存储在堆里的。栈里存储是参照表中的引用(这个参照表在看C++基础的时候也看到过,具体怎么弄的我不知道得看汇编了)。
这里的堆栈是指jvm的。
C++里面可以选择传引用传指针传值 可是在java里不涉及到这些。为什么?
原因还是jvm这个jvm都已经封装过了。既然jvm封装了入口那销毁的时候也是做了封装的 于是就有了gc 。于是就比C++程序员省了很多精力。
同时也降低了java的上手难度。gc究竟怎么处理?(很好奇)。
jvm封装的 究竟是传的引用还是值?
对象的时候传的引用,基本类型肯定传的值。
学习了一下jvm的内存分配 堆(全是对象实例数据),栈(关键在栈帧,执行方法开始,入栈出栈),方法区(类信息(比如类类型)、常量、静态变量),本地方法栈(有的jdk跟java栈是在一起的),常量池(方法区中),直接内存(典型的IO就是用的这个。延伸到流接着就是操作系统,不同的操作系统IO的速度是不同的)
jvm分配规则还是蛮好的懂的。了解这些有什么用?
有的时候真的会用到,比如jvm优化?为什么要优化?速度慢了,内存溢出了,栈内存溢出了根据栈的特性很快可以定位到异常的出处(肯定是在执行某个方法的时候即使不看代码)。在比如我们常用的Eclipse 有的电脑跑起来就慢,有的快,当然这个是跟内存有关系的 。这时候我们就可以修改Eclipse的内存分配。在比如Wicket这个框架,这个就很吃内存,启动项目没事,跑跑就抛内存溢出。如果不知道优化一点这个问题是很棘手的。因为程序真的没错。
PS:我现在是这样理解的,有错误的地方欢迎阅读的朋友指正,非常感谢。
- jvm一点内存的知识(持续积累中)
- 在工作中积累的一点知识
- 内存的一点知识
- java ant知识的一点积累
- android 积累一点关于fragment的知识
- 持续集成知识积累
- 每天积累(一一)---JVM的内存结构
- QTtableview的用法(抓包持续积累中)
- 有关内存的思考题(积累中)
- 每天一点积累(一二)---JVM之GC垃圾回收
- 平时积累下来的一点知识——Apr11th2007
- word技巧积累(持续更新中)
- 关于编程的一点体会(Tips,持续更新中)
- 关于内存分配的一点小知识
- 关于内存的一点小知识
- jvm中一些有用的系统变量(持续更新)
- Android开发易忘、常见知识积累(持续更新中)---android知识
- Android开发易忘、常见知识积累(持续更新中)---java知识
- Select和epoll的区别
- Round Robin 概念理解
- hibernate延迟加载(get和load的区别)
- Windows下Redis的安装使用
- ADT SVN 插件安装教程
- jvm一点内存的知识(持续积累中)
- 使用Google Analytics跟踪捕获JavaScript,AngularJS,jQuery的在线错误和异常
- Servlet学习总结一
- 配置struts2不当错误
- activity切换动画总结
- 机房收费系统颗粒大归仓之----MSFlexGrid控件
- Thread01:互斥
- Maven 学习笔记(基本概念)
- 原生旧版信息流强切新版逻辑