
jvm
yqs_281876918
tnnd
展开
-
【jvm】字符串拼接的底层原理
String s1 = "a";//"a"会被加载到常量池里,s1引用常量池里的"a" String s2 = "b";//"b"会被加载到常量池里,s2引用常量池里的"b" String s3 = s1 + s2;//底层拼接时相当于执行了new StringBuilder().append("a").append("b").toString() 而toString()里面则调用了return new String(xxx),我们知道new关键字创建的对象都在堆里面,所以s3指向了堆里面的一个String原创 2022-01-29 12:31:00 · 358 阅读 · 0 评论 -
【jvm】方法区
定义 方法区是所有java线程所共享的一块内存区域。这块区域内存储了类结构相关的信息,包括,运行时常量池,字段,方法数据,方法代码,构造方法,特殊方法等等。 方法区在虚拟机启动时创建,逻辑上是堆的一部分,但是不同的jvm实现不一定会严格遵守这一原则。jdk1.6把方法区放在了堆中(叫做永久代),而jdk1.8则把方法区放在了本地内存(叫做元空间,metaspace)。具体如下图所示(该图截取自黑马程序员jvm课程): 最后,如果方法区内存溢出,则会抛出OutOfMemoryError异常。 什么情况容易出原创 2022-01-29 11:51:45 · 1341 阅读 · 0 评论 -
【jvm】堆
定义 堆是程序运行时jvm为其分配的一块内存空间,凡是由new关键字创建的对象都会被放在堆中 特点 1、堆中的对象由所有线程共享,存在线程安全问题 2、拥有垃圾回收机制,可以自动释放不需要的对象 调整堆大小的JVM参数 -Xmx8m:把堆改成8m大小 ...原创 2022-01-28 21:56:51 · 584 阅读 · 0 评论 -
【jvm】虚拟机栈
组成 1、每个线程运行需要的内存空间,称为虚拟机栈 2、每个栈由多个栈帧组成,对应着每次调用方法时所占用的内存 3、栈顶那个栈帧叫做活动栈帧,对应着当前正在执行的方法 演示 常见问题 1、垃圾回收是否涉及栈内存? 不需要。虚拟机栈中由一个个栈帧组成的,当栈帧入栈时,内存分配;在方法执行完毕后,对应的栈帧就会被弹出栈,内存释放。何时分配内存,何时释放内存非常清楚,无需通过垃圾回收机制去管理这块内存,垃圾回收机制是用来管理一些复杂的内存的。 2、栈内存的分配越大越好吗? 不是。看具体需求,分配的大不容易溢出,原创 2022-01-28 21:29:20 · 1139 阅读 · 0 评论 -
【jvm】程序计数器简介
作用 用来保存程序执行的下一条指令的地址 特点 1、线程私有。每个线程都有自己的程序计数器,这是为了线程切换后jvm能够知道从哪里继续执行。 2、本身所占空间极小,不存在内存溢出的问题 ...原创 2022-01-28 20:56:01 · 273 阅读 · 0 评论