码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 终于有人将jvm讲清楚了,阿里架构师推荐jvm架构解析


    一、JVM 内存区域划分

    • 程序计数器(线程私有)

    程序计数器(Program Counter Register),也有称作为 PC 寄存器。保存的是程序当

    前执行的指令的地址(也可以说保存下一条指令的所在存储单元的地址),当 CPU 需要执

    行指令时,需要从程序计数器中得到当前需要执行的指令所在存储单元的地址,然后根据得

    到的地址获取到指令,在得到指令之后,程序计数器便自动加 1 或者根据转移指针得到下

    一条指令的地址,如此循环,直至执行完所有的指令。也就是说是用来指示执行哪条指令的。

    由于在 JVM 中,多线程是通过线程轮流切换来获得 CPU 执行时间的,因此,在任一

    具体时刻,一个 CPU 的内核只会执行一条线程中的指令,因此,为了能够使得每个线程都

    在线程切换后能够恢复在切换之前的程序执行位置,每个线程都需要有自己独立的程序计数

    器,并且不能互相被干扰,否则就会影响到程序的正常执行次序。因此,可以这么说,程序

    计数器是每个线程所私有的。

    在 JVM 规范中规定,如果线程执行的是非 native 方法,则程序计数器中保存的是当前

    需要执行的指令的地址;如果线程执行的是 native 方法,则程序计数器中的值是 undefined。

    由于程序计数器中存储的数据所占空间的大小不会随程序的执行而发生改变,因此,对

    于程序计数器是不会发生内存溢出现象(OutOfMemory)的。

    • 本地方法栈(线程私有)
    • 堆

    • 方法区* 直接内存

    2.JVM 执行子系统

    • Class 类文件结构
    • 字节码指令

    • 类加载机制* 类加载器* Tomcat 类加载机制* 方法调用详解

    3.垃圾回收器和内存分配策略

    • Java 中是值传递还是引用传递?

    • 引用类型

    • 基本垃圾回收算法

    • 分代处理垃圾

    • JAVA 中垃圾回收 GC 的类型

    编写高效优雅 Java 程序

    • 面向对象

    • 方法

    1 可变参数要谨慎使用

    可变参数是允许传 0 个参数的

    如果是参数个数在 1~多个之间的时候,要做单独的业务控制。

    看代码

    2 返回零长度的数组或集合,不要返回 null

    方法的结果返回 null,会导致调用方的要单独处理为 null 的情况。返回零长度,调用方可以

    统一处理,如使用 foreach 即可。

    JDK 中也为我们提供了 Collections.**EMPTY_LIST **这样的零长度集合

    3 优先使用标准的异常

    要尽量追求代码的重用,同时减少类加载的数目,提高类装载的性能。

    常用的异常:

    IlegalAraumentException -- 调用者传递的参数不合适

    lllegalStateException – 接收的对象状态不对,

    NullPoint

    UnsupportedOperationException –不支持的操作

    • 通用程序设计

    1 用枚举代替 int 常量

    声明的一个枚举本质就是一个类,每个具体的枚举值就是这个枚举类的实例。

    枚举更多作用,看代码。

    2 将局部变量的作用域最小化

    1. 在第一次使用的地方进行声明

    2. 局部变量都是要自行初始化,初始化条件不满足,就不要声明

    最小化的好处,减小局部变量表的大小,提示性能;同时避免局部变量过早声明导致不正确

    的使用。

    3 精确计算,避免使用 float 和 double

    可以使用 int 或者 long 以及 BigDecimal

    4 当心字符串连接的性能

    参考代码
    com.xiangxue.ch04.StringUnion15.Test。

    在存在大量字符串拼接或者大型字符串拼接的时候,尽量使用 StringBuilder 和 StringBuffer

    性能优化

    • 常用的性能评价/测试指标

    • 常用的性能优化手段
    • 应用服务性能优化
    • 异步

    • 集群
    • 应用相关
  • 相关阅读:
    再也不用为PDF文件修改发愁了?speedpdf一键转成Word
    HCIP第十五天笔记(企业网的三层架构、VLAN以及VLAN 的配置)
    react 使用 craco库 配置 @ 路径,以及 jsconfig.json或者tsconfig.json 配置智能提示
    springmvc (四种跳转方式)重定向,转发到页面和action的区别
    R语言使用data.table包的fread函数读取(加载)csv数据为data.table格式、将数据中所有缺失值替换为0(或者其它固定值)
    【每日随笔】关于 “ 终身学习 “ ① ( 各阶段学习过程 | 扫盲教育与选拔教育阶段 | 研究生阶段 | 终身学习阶段 )
    Zabbix监控环境搭建,监控项简单、高级应用,包括自定义监控项、采集器、自动发现规则、监控项原型、宏
    记一次批量更新整型类型的列 → 探究 UPDATE 的使用细节
    全媒体时代,企业新闻通稿应该怎么写更具传播性
    领英精灵和领英助理哪个好,看这一篇就够了
  • 原文地址:https://blog.csdn.net/LBWNB_Java/article/details/127087604
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号