java 学习笔记1

java 学习笔记1,第1张

java 学习笔记1

java 的内存结构:

jdk:java develop kit >jre:java runtime environment>jvm:java virtual machine。

hello world javac编译成class文件,再执行

java 可以跨平台,windows和linux都可以执行,汇编语言不行,实际执行的都是0101 这种二进制码,不一样的平台,二进制码不一样,java的跨平台就是通过jvm实现的。

Java 虚拟机:

  • 堆:放对象  GC堆  Eden Suvivor1 survivor2  old(2/3)。优先eden,eden 满了之后,进行GC,minnorGC 字节码执行引擎开启的GC线程。收集垃圾的过程:GC Root 根节点,从本地方法栈找GCRoot ,从这个根出发,找他们引用的对象,成员变量引用的对象,这个链条找完了,全部标记为非垃圾对象,会被复制到空的survivor区。剩余的会被回收(就是可达性分析算法)。经历一次minorGC 分代年龄+1;到15后,会被放到老年代去。对象头信息:分代年龄也放在这里,和锁状态一样。 

        jdk自带调优工具:jvsiualvm:找本机所有的java进程,会看到进程运行的细节情况和堆的分区的情况,流转情况。

        基本的调优命令:Java虚拟机:JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解 - 方志朋的博客

  •         jmap:内存大小,
  •         jhotprofile

        Arthas:阿里开源的。

  • 方法区:  元空间(1.8之后)常量+静态变量+类信息
  • 栈:线程栈:有主线程,分配一块主线程栈,有一个线程,就新增,放局部变量。通过栈帧把不同的方法隔开,里面放方法的东西,方法的局部变量,栈帧中还有: *** 作数栈( *** 作数临时的内存空间,运行完出栈)+动态链接(test方法对应的指令码在方法区的入口位置,c++实现的东西)+局部变量表(main方法里也有局部变量,值是个对象,对象放在堆里,引用指针:方值在堆里的地址)+方法出口(test方法运行完,回到main进程,继续执行)。数据结构中的栈,FILO,和方法的嵌套调用是相符合的。可以通过javap-c  看一下反汇编的一些东西,有手册可以看。
  • 本地方法栈: 什么是本地方法 native :c c++实现的  本地方法需要的内存空间
  • 程序计数器:行号,记录执行到哪里了,为什么设置,因为线程切换;运行完一行代码之后,会变化,怎么变化?谁进行了变化?
  • 类加载子系统:
  • 字节码执行引擎:去修改程序计数器。

假设有一个math.java--->java.class-->类装载子系统

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5677755.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存