试着从JVM的内存管理原理的角度来谈一下静态方法和静态属性的问题,不对的地方请指正。...再说一下静态属性和动态属性: 前面提到对象实例以及动态属性都是保存在heap 中的,而heap 必须通过stack中的地址指针才能够被指令(类的方法)访问到。...因此可以推断出:静态属性是保存在stack中的,而不同于动态属性保存在heap 中。...也正因为静态属性被保存在stack中,所以具有了全局属性。 总结一下:静态属性保存在stack指令内存区,动态属性保存在heap 数据内存区。... 还由于生存期不必事先告诉编译器 事后得由gc收集 Java中非静态方法是否共用同一块内存?
类的初始化包括静态属性的初始化和实例属性的初始化,在加载类过程中的准备阶段会给静态属性分配存储空间,并根据属性的类型设置初始值,例如 int 类型静态属性会设置初始值为 0,布尔类型静态属性会设置初始值为...这里提到的静态属性不包括静态常量,静态常量会在准备阶段直接赋予指定的初始值。...在加载阶段之后,会在内存中保存一个类的java.lang.Class对象,通过该Class对象来访问类中的各项数据,包括静态属性。...所以静态属性只需要初始化赋值一次,生成Class对象后,通过Class对象来访问静态属性,实例属性则会在每次生成实例对象时初始化一次。...例如加载阶段会将二进制字节流转换为内存中的一个Class对象,获取二进制信息后,会启动验证阶段对字节流进行安全验证,验证通过,准备阶段进行静态属性的内存分配和默认值设置,最后才会生成一个Class对象。
今天为了搞清楚实例化一个对象时其属性等的实例化顺序,写了下面的例子来探究: 实例化一个C的对象,其中,A为其静态属性,B为其普通属性;D为C的父类,E为D的静态属性,F为D的普通属性;C中还包含了静态代码块和普通代码块...("父类的静态属性E"); } } class F { public F(){ System.out.println("父类的普通属性F"); } } class D { static E...("构造函数C"); } } 运行结果: -------第1次实例化------- 父类的静态属性E 构造静态属性A 静态代码块 父类的普通属性F 构造父类D 构造普通属性B 普通代码块...构造函数C -------第2次实例化------- 父类的普通属性F 构造父类D 构造普通属性B 普通代码块 构造函数C 结论(实例化顺序): 父类静态的属性 父类静态的代码块 子类静态的属性...子类静态的代码块 父类普通属性 父类普通代码块 父类构造函数 子类普通属性 子类普通代码块 子类构造函数 静态的东西只在第一次实例化的时候执行 原则:先静态后非静态、先父类后子类
JAVA统计服务器资源(cpu,内存,磁盘)–LINUX 使用类: com.sun.management.OperatingSystemMXBean 继承:java.lang.management.OperatingSystemMXBean...long getFreePhysicalMemorySize() 返回以字节为单位的可用物理内存量。 long getFreeSwapSpaceSize() 返回以字节为单位的可用交换空间量。...double getProcessCpuLoad() 返回 Java 虚拟机进程的“最近 cpu 使用情况”。...long getProcessCpuTime() 返回运行 Java 虚拟机的进程使用的 CPU 时间(以纳秒为单位)。...int getAvailableProcessors() 返回 Java 虚拟机可用的处理器数量。 String getName() 返回操作系统名称。
昨天发了这篇关于Java 18新特性Simple Web Server的文章:带你体验 Java 新功能:自带的简易Web服务器,介绍了jwebserver命令的使用,接下来这篇是使用Java代码启动的教程
静态成员变量存储在堆的永久生成区域中。这是因为static不属于对象而是属于类,所以它被认为是类定义的一部分。如果静态变量是基元类型,它们将存储在permGen中。...如果静态变量是一个引用变量,例如static Person obj=new Person(),那么reference变量obj将被存储在permGen中,新创建的objected将被放置在年轻一代中。
中创建数组时,在JVM中建立对应的内存模型,在栈中保存数组变量及其内存地址,而数组中的内容则保存在堆中,详情如下所示: 数组的动态初始化: 由我们(程序员们)来设置数组长度),而数组中元素的初始值由JVM...那么什么时候使用静态初始化,什么时候使用动态初始化呢?...1.数组基本操作: 获取元素:元素类型 变量 = 数组名[index]; 设置元素:数组名[index] = 值; 数组长度:int len = 数组名.length; 注意这里的length是属性,...多维数组 多维数组:以数组为数据类型创建数组,也就是数组中的数组,比如:二维数组可以这样来初始化: 二维数组的静态初始化: // 二维数组的静态初始化 int[][] arr = new int[][]...所以,从Java5开始(JDK1.5)开始,Java提供了一种新的语法,foreach(增强for循环)语法如下: // 增强for循环 语法 for(元素数据类型 变量 : 数组名){ 循环体
java1.8之前内存区域分为方法区、堆内存、虚拟机栈、本地方法栈、程序计数器。...下图所示: 方法区(Method Area)与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。...虽然Java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做Non-Heap(非堆),目的应该是与Java堆区分开来。...从jdk1.7已经开始准备“去永久代”的规划,jdk1.7的HotSpot中,已经把原本放在方法区中的静态变量、字符串常量池等移到堆内存中。...在jdk1.8中,永久代已经不存在,存储的类信息、编译后的代码数据等已经移动到了元空间(MetaSpace)中,元空间并没有处于堆内存上,而是直接占用的本地内存(NativeMemory)。
静态变量所引用的实例位于Java堆或运行时常量池。...3、Java堆 在Java虚拟机中,堆是可供各个线程共享的运行时内存区域,也是供所有类实例和数组对象分配内存的区域,存储了被垃圾收集器所管理的各种对象。...从Java6至Java14的虚拟机规范中,都没有限定实现方法区的内存位置和编译代码的管理策略。...比如在HotSpot曾经的实现中,它内部的垃圾收集器全都基于“经典分代”来设计,将堆内存划分为新生代、老年代、永久代,其中永久代便是包括类型信息、常量、静态变量、JIT代码缓存等数据的方法区,而到了Java8...根据Java虚拟机规范的限制,由于静态变量所引用的实例可以被各个线程所共享,那么它一定不能位于PC寄存器、Java虚拟机栈、本地方法栈,又由于方法区存储的是类的结构信息而不是实例数据,所以被静态变量所引用的实例一定位于
栈(stack)、堆(heap)和静态区(static area)的用法区别 * 通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间; * 通过new关键字和构造器创建的对象放在堆空间...* 栈空间操作起来最快但是栈很小,通常大量的对象都是放在堆空间,理论上整个内存没有被其他进程使用的空间甚至硬盘上的虚拟内存都可以被当成堆空间来使用。...补充:较新版本的Java(从Java 6的某个更新开始)中使用了一项叫"逃逸分析"的技术,可以将一些局部对象放在栈上以提升对象的操作性能。...本题涉及java知识点分析 栈(stack) * 栈是一个先入后出(FILO:First In Last Out)的有序列表。...* 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 希望能对大家有所帮助。
静态内存分配和回收 静态内存分配是指在程序开始运行时由编译器分配的内存,在被编译时就已经能够确定需要的空间,当程序被加载时系统把内存一次性分配给它,这些内存不会在程序执行时发生变化,直到程序执行结束时才回收内存...包括原生数据类型及对象的引用 这些静态内存空间在栈上分配的,方法运行结束,对应的栈帧撤销,内存空间被回收....堆和方法区的内存回收具有不确定性,因此垃圾收集器在回收堆和方法区内存的时候花了一点心思. 1 Java堆内存的回收 1.1 判定回收的对象 在对堆进行对象回收之前,首先要判断哪些是无效对象即一个对象不被任何对象或变量引用...这里写图片描述 GC Roots对象包括: 虚拟机栈(栈帧中的本地变量表)中引用的对象 方法区中静态属性引用的对象 方法区中常量引用的对象 本地方法栈JNI(即所谓的Native方法)引用的对象...老年代中的对象生命较长,每次垃圾回收只有少量的对象被清除 由于方法区中存放生命周期较长的类信息、常量、静态变量.
二、掌握静态方法和属性 静态方法和属性是用于描述某一类对象群体的特征,而不是单个对象的特征。 Java中大量应用了静态方法和属性,这是一个通常的技巧。但是这种技巧在很多语言中不被频繁地使用。...理解静态方法和属性对于理解类与对象的关系是十分有帮助的,在大量的Java规范中,静态方法和属性被频繁使用。因此同学们应该理解静态方法和属性。...4、常量的定义可以放到接口中 在Java中,接口里只允许存在常量,因此把常量放到接口中声明就可以省去public static final这几个关键词。...如果业务上需要对两个数据相同的内存对象当作不同的key存储到hashmap中就要对hashcode和equals方法进行覆盖。 Java描述复杂数据结构的主要方式是集合框架。...Java没有指针,而是通过强大的集合框架描述数组、对象数组等复杂的数据结构。 学好这些数据结构的描述方法对于应用程序编写,特别是涉及到服务器方、3层结构编程至关重要。
3、在静态的方法内,不能使用this和super关键字: 三、问题思考 1、java中为什么要有static关键字? ①static可以不需要实例化对象就可以访问类中的属性和方法。...关于Java运行的过程大概分为两个步骤: 2、使用static的作用 前端静态资源与java的static修饰的资源类比 3、开发时,如何确定一个属性和方法是否要声明为static ---- 一、static...理由: ①局部变量最好不要设成静态变量,局部变量是有生命周期的,用完后JAVA很快就回收资源了。 如果设成静态变量,那JAVA怎么回收被其占用的内存。...简而言之:在JVM创建类对象之前要把类的类型信息(静态变量、静态方法等)放到方法区中。...前端静态资源与java的static修饰的资源类比 web中什么是静态资源和动态资源 静态资源:html、css、images等,我们访问服务器地址时就直接拿编译好的静态的html,css文件,直接去渲染成页面
1.加载 加载(也称“装载”)是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的 java.lang.Class 对象,作为方法区这个类的各种数据的入口。...Java中,静态属性和静态方法都是属于类的,类的诸多实例共享同一个静态属性和静态方法。...invokevirtual —— 运行时按照对象的类来调用实例方法 至于静态属性和静态方法,对应的指令为: getstatic —— 从类中获取静态字段 putstatic —— 设置类中静态字段的值...话外音:ConstantValue 属性是什么? ConstantValue 属性的作用是通知虚拟机自动为静态变量赋值,只有被 static 修饰的变量才可以使用这项属性。...8.类加载器 虚拟机设计团队把加载动作放到 JVM 外部实现,以便让应用程序决定如何获取所需的类,JVM 提供了 3 种类加载器: ?
本地环境:Tomcat 6、Windows 10、Java 1.7、myeclipse 10 一、使用方法 1.1 Tomcat 部署静态页面 参考链接:https://blog.csdn.net...可能存在的问题 数据库账号密码错误 有多个数据库配置源 jar包问题,把连接jdbc的jar包,拷贝到tomcate的lib目录下就可以了,如:ojdbc14.jar 服务器内存冲突,重启系统 Tomcat...内存不够 Window->Preferences->tomcat 点击右侧的按钮, Creat Launch Configuration,在你对应的tomcat属性Aarguments下面添加一句话...,还有代理服务器、负载均衡等功能。...改进:1.把jsp中的业务逻辑写入单独的类,在jsp中通过调用这个类的静态方法来执行;2.将jsp页面中的js提取出来放到单独的js文件内。
总结 欢迎来到Java面试技巧专栏~探索Java中的静态变量与实例变量 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒 ✨博客主页:IT·陈寒的博客 该系列文章专栏:Java面试技巧 文章作者技术和水平有限...❤️ 在Java中,静态变量和实例变量是两种不同的变量类型,它们在存储区域、生命周期以及内存分配方式上存在显著的差异。...静态方法也是同样,可以直接调用。 实例变量 相当于该类的属性,需要初始化这个类后才可以调用。...Java中具有不同的存储区域、生命周期以及内存分配方式。...理解这些差异对于优化程序性能、避免内存泄漏以及更好地理解Java的运行机制都是非常有帮助的。 结尾
Web 服务器部署 DataBase 服务器 并发访问 数据库服务器的部署 数据库的 shema 架构与的表设计是否合理 数据检索 操作系统 客户端请求 程序/语言 分析性能的指标 程序的运行时间 程序的运行所消耗的内存...单位时间内的并行处理 磁盘 IO 的处理 优化性能的目标 快速、并发、资源消耗低(内存、磁盘 IO、CPU 负载) 优化性能的原则 服务器配配置最优化 服务器部署合理化 商业需求合理并与产出的商业价值成正比...,可考虑使用静态变量,减少程序的cpu执行次数 变量的性能:局部变量>全局变量>类属性>未定义的变量。...,静态属性 类的结构合理 面象接口编程 封装变化点 依赖于抽象,不依赖于细节 优先使用静态成员 类的接口清晰稳定,类的职责单一,类与类的通信合理 使用常量的好处 编译时解析,没有额外开销 杂凑表更小,所以内部查找更快...,减少 http 请求 合理 html 与java script 的同时,考虑拆分是否合理,减少 http 请求 优化 java script 代码,让用户有良好的体验 根据 http 协议,优化高并发请求
加载的先后顺序是:父类静态成员变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量、父类非静态代码块、父类构造函数、子类非静态变量、子类非静态代码块、子类构造函数。 9....; new 一个 String 对象的时候,会在堆内存中生成对象,同时把这个对象放到字符串常量池中; 直接赋值 String 的时候,首先会看字符串常量池中有没有,有就直接拿来用,没有就先往常量池放一份再拿来用...; 它有个 intern 方法,jdk1.7 以前,会把该方法的调用者放到常量池中,jdk1.7 及之后,会把调用者的引用放到常量池中。...14. java 反射怎么理解? 在运行过程中可以获取任意一类的任意属性和方法,可以调用任意一类的属性和方法,这种动态获取信息动态调用对象的机制叫反射。 15. 反射有几种方式?...18. java 中的异常体系你知道吗?
写好上位机程序后,如何部署到服务器? (这里我用的是tomcat服务器) 首先说明一点:为了程序测试是否连接到下位机,我编写了一个命名为gprs的java文件,这个可以用下位机连接是否成功。...3.把gprs.java文件导出为 Runnable JAR 文件。...步骤:选中java项目中的gprs.jar文件->右键->Export->java->Runnable JAR file,然后选择next 4.Launch configuation 选择的是你的主清单属性...然后输入服务器的静态IP地址和端口号(在java文件中设置好的端口号)。检测是否是否能服务器连接成功。...最后,连接成功后,打开服务器的tomcat,在服务器的浏览器端输入: http://47.93.7.53:8080/demo_bridge0807 http://服务器的静态IP:8080/war文件的名称
web资源存放在哪里 所有的web资源都放在一个web服务器当中 web服务器就是可以供外界访问web资源的一个软件 web资源放到指定的目录当中,就可以通过对应的端口在浏览器当中访问到。...而是编译成字节码,放到服务器上来去执行。 编写程序时,不需要有main函数了。因为写完后,就把编写的程序编译成字节码,放到服务器上面。...连接 验证 是否有正确的内部结构,并和其他类协调一致 准备 负责为类的静态成员分配内存,并设置默认初始化值 初始化 初始化成员变量等等 加载时机 创建类的实例 访问类的静态变量,或者为静态变量赋值...调用类的静态方法 初始化某个类的子类 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象 类加载器 什么是类加载器classLoader 负责将.class文件加载到内存中,...想要使用反射,就必须得要获取字节码文件 获取字节码文件 Object类的getClass()方法:判断两个对象是否是同一个字节码文件 静态属性class:当作静态方法的锁对象 Class类中静态方法
领取专属 10元无门槛券
手把手带您无忧上云