java字符串在内存中:
存放于堆中或者字符串常量区
堆内存
堆内存分为Permanent Space(持久代) 和Heap Space 。
Heap Space
年轻代:所有新生成的对象都放在年轻代。年轻代的作用就是快速收集掉生命周期短的对象。针对年轻代的垃圾回收就是young gc 。
老年代:在年轻代中经历了多次gc垃圾回收后任然存在的对象,就会复制到老年代中。老年代存放一些生命周期较长的对象。针对老年代的垃圾回收就是old gc。溢出原因:创建千万量的对象,以及千万量的字符串处理。
持久代:存放java类定义信息,静态数据。跟垃圾回收没有关系。溢出原因:动态加载了大量的java类。
方法区
方法区和堆一样,是被线程共享的区域,在方法区中, 存储了每个类的信息(包括类的名称,方法信息,字段信息),静态变量,常量,以及编译后的代码。
垃圾收集
使用垃圾收集的程序不需要明确释放对象,现代垃圾收集能够处理循环引用的问题,能提高程序的效率,可能会有泄露的问题。