关于 堆、栈、方法区 、类加载、编译、字节码、机器码

参考源  https://www.cnblogs.com/syp172654682/p/8082625.html

 

 

   程序运行时,除非手动向常量池中添加常量(比如调用方法),否则jvm不会自动添加常量到常量池。

 

------------------------------------------

 

 

 

参考 https://baijiahao.baidu.com/s?id=1636309817155065432&wfr=spider&for=pc

java 的知识大图在最下面。 

此处解释一些相关概念

 

1 .java文件首先被虚拟机编译成.class文件。  这一步都一样

            之后,不同的java虚拟机会把 .class文件 解释为该电脑cpu适用的本地代码(机器码),然后cpu就可以执行了。

2.  关于编译。

此处解释一下下图,当源代码被编译时,首先生成了目标文件。

但是目标文件是不能运行的,因为其中的一些系统方法,(比如print())是不能识别的

此时,就需要把静态库,动态库中的函数信息,一起加入目标文件,(此步骤,官方叫做链接。 另外说明,此时加的是函数信息,也就是函数在哪里放着,并不是真正的函数。真正的在ddl里)

最后系统执行代码的时候,从ddl文件中,找到相关方法,开始使用执行。

这里说的是c语言。c语言的标准函数都存储在ddl里面。  

我觉得java标准方法,并不从ddl里面存储,而是就存储在lib中(当然java里面叫jar包)。 因为我感觉ddl文件更接近是底层系统的方法。所以除非java调用底层系统,可能才会涉及到ddl

 

3. 关于源代码——>机器码

https://blog.csdn.net/moakun/article/details/83043868

 

 

 

 

 

 

 

 

4. 看了宋红康老师对于深入java虚拟机的一些小总结:

4.1 

每个线程都有自己的栈。

线程上每个方法对应一个栈帧

 每个虚拟机栈是独立的,每个虚拟机栈的数据是自己的。 所以不会发生安全问题。

    那么,一个方法里面,如果变量在此产生,也再次消亡,那么他是安全的, 反之,存在安全问题。

 如:

另外,看一下两个线程引起的并发问题:

 

4.2 栈里面的数据不会被垃圾回收,它只会简单的入栈,出栈。 堆里面以及方法区会被垃圾回收

 

4.3 线程请求分配栈容量时,不足引发stackOverflowError。

     栈请求分配内存时候,不足引发outOfMemoryError。

 

4.4  静态语言,动态语言, 早期,晚期 ,虚方法, 静态链接,动态链接

我觉得下图意思时,编译时候,变量就被指定好类型的,比如String a; int b。为静态语言。

而不能确定的,如js里 var a;  var b;  你必须看后面的值才能确定其类型,为动态语言。

 

4.5 概念

栈是运行时的单位,而堆是存储的单位。
即:栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。
      堆解决的是数据存储的问题,即数据怎么放、放在哪儿。

 

4.6

 

4.7

JVM 之 字节码指令_vincent-CSDN博客

 https://blog.csdn.net/wuzhiwei549/article/details/80626677?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

 

 

4.8 

 

 

5.  关于一些问题

 

1. 如果服务器上换一个新数据库的连接地址,你怎么做?  (注:地址写在常量java文件里)

 

    把编译好的class文件丢过去替换???

    但是你会发现,程序依旧访问的老数据库

 

......

 

解决: 因为常量被编译时,系统会看谁用了它了,直接就把用了它的变量换成了真实的值,所以修改变量的class没用,必须替换引用他的那些文件。

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值