请教一个java内存问题

请教一个java内存问题

先说明一下各个参数的意思:-Xms 表示jvm 运行时的初始化堆内存-Xmx 表示堆内存的最大值-XX:NewSize 初始新生代内存-XX:MaxNewSize 新生代可扩展到的最大内存java中的堆内存又分为:新生代、中生代、老生代三部分。其存储顺序为:通过new方式新建的对象所占内存被分配到新生代中,当新生代内存被全部占用或将要被全部占用时,gc将清理新生代内存(具体何时执行gc取决于gc算法)。jvm将清理后的剩余的对象转移到中生代中。由此可以看出NewSize的大小是包含在Xmx之中。并且自jdk1.4版本以后我们可以通过一个参数-Xmn来同时设置-XX:NewSize 、-XX:MaxNewSize两个参数并且这两个参数的值是相同的且都等于-Xmn的值

java中内存的概念

Java中的内存其实是java虚拟机帮助程序员管理的。。
笼统地去讲,java的内存分配分为两个部分,一个是数据堆,一个是栈
程序在运行的时候 一般分配数据堆,把局部的临时的变量都放进去,生命周期和进程有关系。但是如果程序员声明了static的变量,就直接在栈中运行的,进程销毁了,不一定会销毁static变量。

另外为了保证java内存不会溢出,java中有垃圾回收机制
System.gc()即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存。java语言并不要求jvm有gc,也没有规定gc如何工作。垃圾收集的目的在于清除不再使用的对象。gc通过确定对象是否被活动对象引用来确定是否收集该对象。

推荐阅读