【Java】内存

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之后被取消,称为元空间)

    -全局数据区:可以认为其规划在堆内存里面,因为会发现全局数据区中保存的内容有可能是对象,有可能是基本类型,只不过采用了一种特殊的处理形式而已。

原文地址:https://www.cnblogs.com/guangluwutu/p/12309359.html