J***A语言中管理类的一个机制,j***a语言中管理类的一个机制是什么

dfnjsfkhak 39 0

大家好,今天小编关注到一个比较意思的话题,就是关于java语言管理类的一个机制的问题,于是小编就整理了2个相关介绍Java言中管理类的一个机制的解答,让我们一起看看吧。

  1. 用Java写一个xx管理系统,需要用到Java哪些方面的技术啊?
  2. JAVA的内存是如何划分的?

JAVA写一个xx管理系统需要用到J***a哪些方面的技术啊?

其实对于应届生来说,不管是什么管理系统或者是其他的大众常见的互联网网站,用到的技术都差不多,无非是界面观感与功能不同代码无非就是增删改查而已,最多再用几个开源框架。要想提高自己姿势水平,重点在于搞明白你所写代码的原理

如果实在不想做这种系统,可以尝试做一些稍微进阶项目,比如可以自己做一个聊天软件,自己用xmpp,openfire或其他技术自己实现一个简单的推送系统,虽然难度没有提升太多,但是这对于将来找工作是一个很大的加分项。ps:我们公司做的就是你看不起的xx管理系统,用到的很多技术在国际上也是领先的

JAVA语言中管理类的一个机制,java语言中管理类的一个机制是什么-第1张图片-芜湖力博教育咨询公司
图片来源网络,侵删)

J***A的内存是如何划分的?

谢邀~

关于JVM的知识,一直令很多J***a程序员头疼,不过JVM也是值得我们深入学习内容,下面我就谈谈自己对JVM内存划分的理解。

学习J***a的朋友应该都知道,J***a程序是在JVM上运行的,所以我们一般谈的J***a内存划分事实上都是指的JVM内存区域的划分。在讨论JVM内存划分之前,我们需要知道J***a程序的执行过程(手动画图,有点儿丑):

JAVA语言中管理类的一个机制,java语言中管理类的一个机制是什么-第2张图片-芜湖力博教育咨询公司
(图片来源网络,侵删)

通过这个图可以看到,JVM在执行J***a程序的时候,要用到一块空间来存储运行期间用到的数据,这块区域就是我们经常用的运行时区域,也就是常说的JVM内存。

程序计数器(Program Counter Register)、J***a栈(VM Stack)、本地方法栈(Native Method Stack)、方法区(Method Area)、堆(Heap)。

这个是J***a虚拟规范规定好的,但是具体怎么实现还是由厂商决定的。

JAVA语言中管理类的一个机制,java语言中管理类的一个机制是什么-第3张图片-芜湖力博教育咨询公司
(图片来源网络,侵删)

运行的时候,每一个区域存的是什么数据的,先看一张图:

保存指令地址,也就是存的是下一条执行所在的存储地址。如果是多线程的时候,因为一个CPU在一个时刻只能执行一条命令,为了能够让每一个线程在切换之后能够恢复切换之前的位置,每个线程就需要有自己的计数器,所以说:程序计数器是每个线程私有的

J***a虚拟机在执行J***a程序的过程中会把它所管理的内存划分为若干不同的数据区域,这些区域都有各自的用途以及创建和销毁的时间。J***a虚拟机所管理的内存将会包括以下几个运行时数据区域,如下图(图片来源网上)所示:


下面我们具体就每个场景进行阐述。

运行时数据区域

  1. 方法区:方法区是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息常量静态变量、即时编译器编译后的代码等数据 。方法区包含运行时常量池,是用于存放编译期生成的各种字面量和符号引用的。垃圾收集行为在这个区域比较少出现,但并非数据进了方法区就永久的存在了,这个区域的内存回收目标主要是针对常量池的回收和对类型卸载,当方法区无法满足内存分配需要时,将抛出OutOfMemoryError异常
  2. 虚拟机栈:J***a虚拟机栈是线程私有的 ,它的生命周期与线程相同。虚拟机栈描述的是J***a方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、[_a***_]栈、动态链表、方法出口信息等。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程,如果扩展时无法申请到足够的内存,就会抛出OutOfMemoryError异常。这块内存是线程私有的。
  3. 本地方法栈:本地方法栈与虚拟机栈的作用相似,不同之处在于虚拟机栈为虚拟机执行的J***a方法服务,而本地方法栈则为虚拟机使用到的Native方法服务。会抛出stackOverflowError和OutOfMemoryError异常。这块内存是线程私有的。
  4. 堆:堆是所有线程共享的一块内存区域,在虚拟机启动时创建,此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例以及其属性都在这里分配内存。堆是垃圾收集器管理的主要区域。由于现在收集器基本***用分代回收算法,所以堆还可细分为:新生代和老年代。如果堆中没有内存完成实例分配,并且堆也无法完成扩展时,将会抛出OutOfMemoryError异常。
  5. 程序计数器:可以看做是当前线程所执行的字节码的行号指示器。这块内存是线程私有的。
  6. 直接内存:直接内存不是虚拟机运行时数据区的一部分,在NIO类中引入一种基于通道与缓冲区的IO方式,它可以使用Native函数库直接分配堆外内存,然后通过一个存储在J***a堆中的DirectByteBuffer对象作为这块内存的引用进行操作

了解了运行时数据区域相关构成后,下面我们来看看对象的创建过程,:


我们着重看最右边一部分,不同的变量会分配到不同的内存区域里,比如new出来的东西会存放到堆中,而局部变量则是存放在栈中。

总之,了解并掌握这些知识是一个合格的J***a程序员必需的技能,也只有这样才能写出更好的程序,更好地优化程序的性能。

到此,以上就是小编对于J***A语言中管理类的一个机制的问题就介绍到这了,希望介绍关于J***A语言中管理类的一个机制的2点解答对大家有用

标签: 内存 JAVA 一个