1.当使用直接赋值的方式实例化一个字符串对象的时候,他的引用是保存在哪里的?
首先要明确一点,只要是引用对象就保存在堆内存里面,而我们所有能够进行的内存控制,也只有堆内存。
JVM内存优化:
1.JVM内存优化的第一个问题,取消掉伸缩区,让total = max
-CMS问题,频繁的CMD会导致性能下降
-伊甸园区、存活区、老年代的关系要清楚,JDK1.8以后取消了永久代, 而使用元空间代替。
2.如果内存过大要使用G1收集器来进行收集
3.在Tomcat里面由于其使用基于JVM,所以要设置一个“JAVA_OPTS”指令,可以将全部的内存供tomcat使用(默认可用的最大可用内存为全部内存的四分之一,默认的total内存为全部内存的64分之1)。
JVM内存组成:
-最关键的几个内存:
-堆内存:只是保存堆内存的引用地质,而且从一个简单的角度来讲,栈内存可以保存基本类型(int,double)
-栈内存:JAVA没有采用句柄的模式进行引用,所以它的引用性能是最高的,但是从另外一个角度来讲,堆内存里面实际上又分为了若干个子内存空间:伊甸园区,存活区,老年代(FullGC,MajorGC)。
-原则:少产生无用的大量内存空间,因为频繁的GC会导致CMS问题,导致程序中断执行。
-原则:让初始化空间的大小等于整个堆内存的分配大小,避免伸缩区,这样可以进行性能的提升。
-方法区:(之前被称为永久代,JDK1.8之后被取消,称为元空间)
-全局数据区:可以认为其规划在堆内存里面,因为会发现全局数据区中保存的内容有可能是对象,有可能是基本类型,只不过采用了一种特殊的处理形式而已。