类加载器在JVM内部
字符串常量池在堆内存中,剩下的都在元空间里
class常量池说是池但其实是一张表,记录了类信息。运行时常量池,当类加载的时候会通过类加载器把class常量池里的字节码文件变成字节码对象加到运行时常量池,
常量池分为两大类,一个是字符串常量池,一个是运行时常量池,在JDK1.8中字符串常量池在堆内存中,运行时常量池在元空间中。
静态变量的引用,字节码对象,
方法区和堆在运行时数据区。方法区已经被隔出来了,元空间是方法区的实现方式,占用本地内存,在JVM里,但是不占用JVM堆的内存
动态代理创建,会生成字节码对象,与普通对象,字节码对象直接存在元空间(运行时常量池)当中,而普通实例对象就按照从伊甸园一次一次GC回收,进入元空间,但是可能在新生区就被杀死了,到不了元空间,
1、class常量池
2、运行时常量池
nginx -h 帮助
普通线程不会根据主线程的关闭而关闭,后台线程会因为主线程的关闭而被关闭
Thread对象的setDaemon(true)可将指定线程设置成后台线程
这才是正解,一次Eden区GC回收,然后剩下的幸存的放入To区,使用复制回收算法(作为双缓存,起到内存整理的作用),其他的被垃圾回收走,
隔一段时间From区也会GC回收,将幸存的放入To区,如果对象经过15次轻GC(指的是Eden或者幸存区的轻GC)还存在To区,则会放入老年代, 如果幸存区满了,会把这些对象清空全部放入老年区中。
当年老代满时会引发Full GC,Full GC将会同时回收年轻代、年老代。若老年代全部被引用满了,就会爆OutOfMemoryError
这是jar包打出来以后,想要改配置文件来运行,就用这个
java -Dserver.port=8082 -Ddebug=true -jar boot-test-1.0-SNAPSHOT.jar
1.文本字符串
2.八种基本类型的值
3.被声明为final的常量等;
1.类和方法的全限定名
2.字段的名称和描述符
3.方法的名称和描述符。
运行时常量池存在于内存中,也就是class常量池被加载到内存之后的版本,不同之处是:
笼统来说:class常量池在class文件里,class文件在JVM外面,class常量池存一些用于存放编译器生成的各种字面量(Literal)和符号引用(SymbolicReferences);当类加载的时候,会把class文件里的 class常量池放入 运行时常量池,将字面引用和符号引用转化为直接引用。然后将方法指令存入方法区当中。运行时常量池里的引用对象就是字节码对象。
存放编译器生成的各种字面量(Literal)和符号引用(SymbolicReferences);当类加载的时候,会把class文件里的 class常量池放入 运行时常量池,将字面引用和符号引用转化为直接引用。然后将方法指令存入方法区当中。运行时常量池里的引用对象就是字节码对象。**