首页 > 编程语言 >初步理解:jvm运行机制,java程序运行机制,堆栈详解,jvm调优的目的。

初步理解:jvm运行机制,java程序运行机制,堆栈详解,jvm调优的目的。

时间:2023-01-17 19:37:15浏览次数:49  
标签:full java 程序运行 gc jvm 线程 方法


谷咕咕最近在准备面试,本来想多看看堆和栈的关系,看看发现又设计到gc(Garbage Collection)垃圾回收机制,发现盲区太多了,就去粗略的学习了一下jvm(java虚拟机),发现之前只会写程序,底层的东西真是太丰富了。

正常情况下我们编写helloworld.java通过javac编译成字节码文件helloworld.class。通过java命令,将类放到jvm(java虚拟机中运行)

1.一次编写到处运行:

计算机最后执行的是机器码。(jvm)可以将一个代码编译成适用于不同操作系统的机器码,通过不同的jdk(有不同的jvm)实现的。这就是为什么,我们安装对应的jdk不同的jdk版本。

这样实现了我们不需要改变程序,让jdk帮我们完成底层的修改。

初步理解:jvm运行机制,java程序运行机制,堆栈详解,jvm调优的目的。_jvm

2.jvm的组成

类装载子系统:将c程序放到方法区中。

运行时数据区(内存模型):堆,栈(线程),本地方法栈,方法区,程序计数器。

字节码执行引擎:执行一些GC(垃圾回收机制)。

初步理解:jvm运行机制,java程序运行机制,堆栈详解,jvm调优的目的。_java_02

方法区(元空间):常量和静态变量,类元信息(有哪些方法)。

堆中对象的头指针找到方法去的指令码的内存地址,把地址放到动态链接中。

程序计数器:放线程马上要执行的指令码(行号)内存地址。

native本地方法,时间线与c语言的交互。

本地方法栈:c语言中局部变量存放的位置。

栈(线程):存放局部变量的存储,,一个线程一个栈,不同的方法有不同的栈。先进后出的数据结构,main和compute先后进栈,compute执行结束出栈,然后继续执行main方法。栈中的对象类型局部变量,是有地址指向堆中。

初步理解:jvm运行机制,java程序运行机制,堆栈详解,jvm调优的目的。_局部变量_03


局部变量表:创建局部变量,操作数栈中的值赋值给它。

操作数栈:临时存放数据

动态链接:就是存储指向该方法指令码的地址符号

方法出口:一个方法结束,返回到主方法的哪行指令码。

:存放new出的对象。(下面细细讲)

初步理解:jvm运行机制,java程序运行机制,堆栈详解,jvm调优的目的。_局部变量_04


堆:启动600M,老年代近400M。

Eden:存放对象。放满之后通过 minor gc垃圾收集。没被销毁的放入Survivor区。

Survivor from:存放上一层的对象。放满之后通过 minor gc垃圾收集。没被销毁的放入to区。

Survivor to:存放上一层的对象。放满之后通过 minor gc垃圾收集。没被销毁的放入from区。

通过15次gc还没销毁的放入老年代(方法区的 静态变量,数据库连接池)。

老年代满了full gc后都是有用的内,就会内存溢出。

执行引擎,执行gc,在执行full gc的时候会停掉应用线程的gc,影响程序性能。

jvm调优的目的:

1.减产full gc的次数
2.减少full gc的时间
老程序启动慢,程序启动的时候加载类,导致元空间满了full gc。(Metadata GC Threshold)
解决方案:提前设置元空间放大。

jvisualvm(工具):查看计算机正在运行的java程序。
谷咕咕也是上网看的资料整理的,如果大佬们看到有不对的地方,请在评论区交流啊!!!
关注小谷哈。


标签:full,java,程序运行,gc,jvm,线程,方法
From: https://blog.51cto.com/u_15601494/6017781

相关文章

  • j2ee、JavaSE、MVC、Spring
    JavaEE(JavaEnterpriseEdition)java企业版,多用于企业级开发,包括web开发等等。一般用于开发JavaWeb应用程序,初级的一般是用JSP(JavaServerPages)+servlet+JavaBean来开发的,......
  • jdbc连接mysql简单实例,在java项目中添加数据库驱动包
    傻瓜式教学从创建项目,到数据库建立,访问一步到位打开eclipse,newjavaProject创建一个普通的java项目右击刚才新建的项目,选择BuildPath—>ConfigureBuilePath选择addExte......
  • java:递归算法
    递归算法:就是调用自己的本身。publicclasstest{publicstaticvoidmain(Stringarg[]){Strings="abcde";chara[]=s.toCharArray();testt=newtest()......
  • java 基本数据类型 各占多少字节 有效位数
    逻辑类型:boolean整数类型:byte、short、int、long字符类型:char浮点类型:float、doubleint类型4个字节,一个字节8个bit(比特),取值范围:-2^31~(2^31)-1byte类型1个字节取值范围:-2......
  • java,导出excel,控制数据垂直还是水平遍历,使用easyExcel
    java,导出excel,控制数据垂直还是水平遍历​​java导出excel,使用easyExcel,按指定格式导出,按模板导出,自定义表头导出​​这里的前提是,你用的easyExcel,就算你没有用,也可以试试......
  • JVM:本地方法栈
    java虚拟机栈用于管理java方法的调用本地方法栈用于管理本地方法的调用和java虚拟机栈一样,也是线程私有的也可动态扩增内存的大小当某个线程调用一个本地方法时,他就进入一......
  • JVM:运行时数据区-PC寄存器(程序计数器)
    JVM:运行时数据区1.什么是pc寄存器:JVM的pc寄存器也叫程序计数器,是对物理pc寄存器的一种抽象虚拟。用来存储指向一下条指令的地址,即将要执行的指令代码,由执行引擎读取下一......
  • JVM:本地方法接口
    作用:本地方法接口由Native修饰,Nativemethod就是一个java调用非java方法,初衷是融合c和c++程序。例如:Object.getClass();publicclassObject{privatestaticnative......
  • JVM :运行时数据区-虚拟机栈
    2.2虚拟机栈2.1.1概述优点:跨平台,指令集小,编译器容易实现缺点:性能下降实现同样的工能需要更多的指令集栈是运行时的单位,而堆是存储的单元是什么?每个线程在创建是辉创建一个虚......
  • jvm:类加载子系统干什么的?由什么组成?需要记住哪些八股文?
    jvm:类加载子系统干什么的?由什么组成?需要记住哪些八股文?最近刚工作,有点懈怠了,看抖音的时候,发现大家都在学jvm,正好咕咕也在这方面一直有想要学习的东西,就参考了一下别人,学习了......