• jvm-基础


    jvm-基础 

    线程运行诊断

    在虚拟机上看: 用top定位哪个进程对cpu的占用过高 ps H -eo pid,tid,%cpu | grep 进程id (用ps命令进一步定位是哪个线程引起的cpu占用过高) jstack 进程id 可以根据线程id 找到有问题的线程,进一步定位到问题代码的源码行号

    一、基础

    4、堆

    通过new 对象

    栈内存溢出

    堆内存溢出

    内存的查看

    第二种: 直接输入 jconsole

    第三种: jvisualvm

    5、方法区

    是所有java虚拟机共享的区,存储类相关结构。成员方法,构造器。 在虚拟机启动是被创建,逻辑上是堆的组成部分

    5.2 组成

    方法区内存溢出

    进行反编译: javap -v 类名

    在串池中有 [" a" , "b " ]

    堆中有

    StringTable

    底层是haseTable可以通过GC进行回收

    调优

    计算毫秒

    直接内存

    它不属于JVM中, 是操作系统内存。不受JVM内存回收机制。它分配过大也会导致内存溢出

    但是 gc在使用的过程中可以将直接内存释放, Unsafe类,通过反射手动进行释放

    有时在项目中

    增加, 将显示的垃圾回收关闭,防止影响性能, system.gc() 就是显示的回收

    二、垃圾回收

    1、如何判断对象可以回收

    (1) 引用计数法 :引用时+1,不在引用-1 ,当为0时 可以作为垃圾 回收,解决不了循环引用的问题。

    (2) 可达性分析算法:先确定跟对象(肯定不会被回收的),如果一个对象没有被跟对象直接或间接的引用 那么它就会被当做垃圾被回收

    (3)四种引用:

    强引用 、 软引用 、 弱引用 、 虚引用 、 终结器引用

    当软弱引用的对象 都被回收时, 会被放到引用队列中 减小内存的分配。

    虚引用 、终结器引用都必须配合 引用队列使用

    软引用实例

    弱引用实例

  • 相关阅读:
    微信小程序 java农产品商城供销系统#计算机毕业设计
    java编程基础总结——20.foreach遍历及lambda表达式
    fork函数,进程等待,进程终止,写时拷贝
    JavaScript 30. JSON
    机器学习之基础知识(全)
    命令模式
    娄底污水处理厂实验室建设管理
    如何实现浏览器的前进和后退功能?
    【架构与设计】常见微服务分层架构的区别和落地实践
    设计模式<二> :策略模式
  • 原文地址:https://blog.csdn.net/weixin_43472073/article/details/126365841