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-->类装载子系统

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值