![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jvm
金箍一梦何来愁
远方的姑娘再见
展开
-
jvm 垃圾回收示意图
原创 2022-01-09 01:27:13 · 248 阅读 · 0 评论 -
memory leak hashmap 的保存值中途改变
package com.atguigu.memoryleak;import java.util.HashSet;/** * 演示内存泄漏 * * @author shkstart * @create 14:43 */public class ChangeHashCode { public static void main(String[] args) { HashSet set = new HashSet(); Person p1 = new P.原创 2021-09-22 23:17:53 · 100 阅读 · 0 评论 -
Java heap space 展示 窍门,就是把内存设置变小然后复现
/** * 演示堆内存溢出 java.lang.OutOfMemoryError: Java heap space * -Xmx8m */public class Demo1_5 { public static void main(String[] args) { int i = 0; try { List<String> list = new ArrayList<>(); Stri..原创 2021-08-02 22:36:24 · 97 阅读 · 0 评论 -
jvm 里面的引用
强引用只有所有 GC Roots 对象都不通过【强引用】引用该对象,该对象才能被垃圾回收软引用(SoftReference)仅有软引用引用该对象时,在垃圾回收后,内存仍不足时会再次出发垃圾回收,回收软引用对象可以配合引用队列来释放软引用自身,对于一些不是很重要的但是是分吃内存的对象可以考虑使用弱引用实战/** * 演示软引用 * -Xmx20m -XX:+PrintGCDetails -verbose:gc 为了展示的需要将对内存设置成20 */public class Demo2_3原创 2021-04-22 07:21:29 · 90 阅读 · 0 评论 -
直接内存
演示直接内存溢出public class Demo { static int _100Mb = 1024 * 1024 * 100; public static void main(String[] args) { List<ByteBuffer> list = new ArrayList<>(); int i = 0; try { while (true) {原创 2021-04-22 03:45:25 · 123 阅读 · 0 评论 -
Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded问题的解决办法.一、异常如下:Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded二、产生原因:意味着太多的时间花在了垃圾收集上面,SUN的建议是指定垃圾回收的算法,加上启动参数-XX:-UseGCOverheadLimit,从而限制JVM在抛出OutOfMemoryError之前限制其耗费原创 2021-04-21 21:00:46 · 2913 阅读 · 0 评论 -
JVM参数:-Xms –Xmx –Xss
-Xms,-Xmx:对堆的调优参数-Xss:对每个线程本身的堆栈大小的性能调优参数-verbose:gc -Xms10M -Xmx10M -Xss128k -XX:+PrintGCDetailsError: Could not create the Java Virtual Machine.Error: A fatal exception has occurred. Program will exit.The stack size specified is too small, Specify a原创 2021-04-21 18:49:01 · 1082 阅读 · 0 评论 -
StringTable整体调优概括
常量池中的字符串仅是符号,第一次用到时才变为对象利用串池的机制,来避免重复创建字符串对象字符串变量拼接的原理是 StringBuilder拼接之后new 一个堆里面的String对象字符串常量拼接的原理是编译期优化可以使用 intern 方法,主动将串池中还没有的字符串对象放入串池1.8 将这个字符串对象尝试放入串池,如果有则并不会放入,如果没有则放入串池, 会把串池中的对象返回public class Demo1_23 { // ["a", "b", "ab"] public原创 2021-04-21 08:42:06 · 267 阅读 · 1 评论 -
jvm 元空间方法区溢出案例
**演示永久代内存溢出 java.lang.OutOfMemoryError: PermGen space-XX:MaxPermSize=8m*/public class Demo1_8 extends ClassLoader { public static void main(String[] args) { int j = 0; try { Demo1_8 test = new Demo1_8(); f原创 2021-04-21 05:03:44 · 370 阅读 · 0 评论 -
进程 -- 线程 -- 代码,快速定位那个线程出现了问题
测试的代码public class Demo1_4 { public static void main(String[] args) throws InterruptedException { System.out.println("1..."); Thread.sleep(30000); byte[] array = new byte[1024 * 1024 * 10]; // 10 Mb System.out.println("原创 2021-04-21 03:27:32 · 314 阅读 · 0 评论 -
手写一个死锁的代码
class A{};class B{};public class Demo1_3 { static A a = new A(); static B b = new B(); public static void main(String[] args) throws InterruptedException { new Thread(()->{ synchronized (a) { try { .原创 2021-04-21 01:36:32 · 226 阅读 · 0 评论 -
jvm 线程治病 如何确定是哪个线程那个具体的代码出现了问题
1、用top定位哪个进程对cpu的占用过高2、ps H -eo pid,tid,%cpu | grep 进程id (用ps命令进一步定位是哪个线程引起的cpu占用过高)3、jstack 进程id 可以根据线程id 找到有问题的线程,进一步定位到问题代码的源码行号...原创 2021-04-20 23:02:59 · 374 阅读 · 1 评论 -
栈内存溢出举例
/** * 演示栈内存溢出 java.lang.StackOverflowError * -Xss256k 把占内存设置小一点 */public class Demo1_2 { private static int count; public static void main(String[] args) { try { method1(); } catch (Throwable e) { e.p.原创 2021-04-20 20:23:03 · 196 阅读 · 0 评论 -
类加载的初始化阶段static复制
类加载初始化阶段验证(Verify)• 目的在于确保Class文件的字节流中包含信息符合当前虚拟机要求,保证被加载类的正确性,不会危害虚拟机自身安全• 主要包括四种验证:文件格式验证、元数据验证、字节码验证、符号引用验证准备(Prepare)• 为类变量分配内存并且设置该类变量的默认初始值(即零值)• 这里不包含用final修饰的static,因为final在编译的时候就会分配了,准备阶段会显式初始化• 这里不会为实例变量分配初始化,类变量会分配在方法区中,而实例变量是会随着对象一起分配到Ja原创 2021-04-20 07:17:03 · 193 阅读 · 0 评论 -
jvm 整体结构
原创 2021-04-20 05:06:30 · 153 阅读 · 0 评论 -
字节码 非静态成员变量的赋值过程
one隐式初始化 ------two显式初始化(静态代码块初始化)--------three构造初始化 --------fourthis.x==n原创 2021-04-06 16:00:39 · 172 阅读 · 0 评论 -
jvm 面试之参数实战
堆设置 -Xmn:设置年轻代大小 (整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般 固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推 荐配置为整个堆的3/8。) -Xss:设置每个线程的堆栈大小,在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。 -Xms:初始堆大小 -Xmx:最大堆大小 -XX:New...原创 2020-06-12 15:34:24 · 288 阅读 · 0 评论 -
jvm 背过来的两张图片
原创 2020-06-12 15:16:11 · 101 阅读 · 0 评论 -
jvm 面试之调优实战 参数
原创 2020-06-12 11:58:18 · 195 阅读 · 0 评论 -
SpringBoot做埋点监控--JVM应用度量框架Micrometer
https://www.cnblogs.com/rolandlee/p/11343848.htmlhttps://www.cnblogs.com/rolandlee/p/11343848.htmlhttps://www.cnblogs.com/rolandlee/p/11343848.html项目介绍基于SpringBoot2.0 实现的jvm远程监工图形化工具,可以同时监控多...原创 2020-04-19 11:32:12 · 987 阅读 · 1 评论 -
Spring Boot实践---JVM上的实时监控类库:Metrics
一、使用Metrics系统开发到一定的阶段,线上的机器越来越多,就需要一些监控了,除了服务器的监控,业务方面也需要一些监控服务。Metrics作为一款监控指标的度量类库,提供了许多工具帮助开发者来完成自定义的监控工作。通过构建一个Spring Boot的基本应用来演示Metrics的工作方式。在Maven的pom.xml中引入Metrics:<dependency>...原创 2020-04-19 11:28:41 · 1383 阅读 · 0 评论 -
GC overhead limit exceeded
今天出现了一个很奇怪的异常:java.lang.OutOfMemoryError: GC overhead limit exceeded ,超出了GC开销限制。这个是JDK6新添的错误类型。是发生在GC占用大量时间为释放很小空间的时候发生的,是一种保护机制。一般是因为堆太小,导致异常的原因:没有足够的内存。Sun 官方对此的定义:超过98%的时间用来做GC并且回收了不到2%的堆内存时会抛出此...转载 2019-04-22 09:25:58 · 53260 阅读 · 0 评论 -
Java-获取堆的大小
public static void main(String[] args) { //获取当前堆的大小 byte 单位 long heapSize = Runtime.getRuntime().totalMemory(); System.out.println(heapSize); ...转载 2019-04-22 09:24:55 · 3552 阅读 · 0 评论 -
jvm 内存模型
原创 2018-08-06 14:23:21 · 119 阅读 · 0 评论 -
jvm 类加载器
双亲委派 沙箱机制原创 2018-08-06 13:38:31 · 126 阅读 · 0 评论