heap
1.堆石一个“运行时”数据区,类实例化的对象就是从堆上分配的空间。
2.在堆上分配的空间一般通过new 等 等指令来创建
3.Java针对指针操作和C++的区别就是,java不需要在空间不用的时候显示释放。
4.JAVA的堆是由垃圾回收机制来负责处理的 ,堆是动态分配内存大小的,GC可以自动回收不在使用的内存空间
5.因为是动态内存所以 存取速度慢。
stack
1.存放基础数据类型和对象句柄
2.存取速度比堆快
3.stack的数据可以共享 (Int a=5 int b=5 两个变量都是用在stack的值)
4.stack的数据必须是大小和生命周期确定,缺乏灵活性。
可以看看你有多少内存
最大内存
System.out.print("maxMemory:");
System.out.println(Runtime.getRuntime().maxMemory()/1024/1024+"M");
已使用内存
System.out.println(Runtime.getRuntime().totalMemory()/1024/1024+"M");
设置java启动内存大小
-Xms256m -Xmx512m
-Xms<size> set initial Java heap size
-Xmx<size> set maximum Java heap size
二维数组比一维数组占用更多内存空间
用 "arrayCopy()" 提高数组截取速度
即使程序员可以做的只有调用 "System.gc()" 来 " 建议 " 执行垃圾收集器程序,但也不能保证gc执行
" 新生代 " 区域设置参数是 "-Xmn" ,用这个参数可以制定 " 新生代 " 区域的大小。