JAVA 对象和类 技术教程文章

Java内存模型中的部分构造对象【代码】

我遇到了以下代码in an article somewhere on the Internet:public class MyInt {private int x;public MyInt(int y) {this.x = y;}public int getValue() {return this.x;} }文章指出Constructors are not treated special by the compiler (JIT, CPU etc) so it is allowed to reorder instructions from the constructor and instructions that come after the constructor.此外,关于Java内存模型的this JSR-133 article说明了...

Java - 对象的内存分配过程是如何保证线程安全的?

原文链接:https://mp.weixin.qq.com/s?__biz=MzI3NzE0NjcwMg==&mid=2650124457&idx=1&sn=1c33947700dfb28048df4a913b434077&chksm=f36bad88c41c249ea854b371a1c8597959e2e35c2890bdd6a5945df0b568bdfc980d1dd2cf2b&mpshare=1&scene=24&srcid=&sharer_sharetime=1564362047551&sharer_sJava对象的内存分配 我们知道,Java是一门面向对象的语言,我们在Java中使用的对象都需要被创建出来,在Java中,创建一个对象的方法有很多种,如...

java – 字节数据类型如何用于在大型数组中保存内存【代码】

The byte data type is an 8-bit signed two’s complement integer. It hasa minimum value of -128 and a maximum value of 127 (inclusive). Thebyte data type can be useful for saving memory in large arrays, wherethe memory savings actually matters. They can also be used in place ofint where their limits help to clarify your code; the fact that avariable’s range is limited can serve as a form of docume...

java – 我怎么知道一个类的实例是否已经存在于内存中?【代码】

我怎么知道一个类的实例是否已经存在于内存中? 我的问题是如果存在Class的实例则不想读取方法这是我的代码private void jButton (java.awt.event.ActionEvent evt) {PNLSpcMaster pnlSpc = new PNLSpcMaster();jtabbedPanel.addTab("reg",pnlSpc); }我想检查PNLSpcMaster的实例当然我可以通过静态布尔检查,但我认为这种方式更好.解决方法:如果你想只有一个“PNLSpcMaster”实例,那么你do need a singleton: 这是常见的单身成语:...

在Linux上用多个类编译Java程序【代码】

到目前为止,我已经能够在终端中使用javac命令在Linux中编译我的Java程序,但很快我就需要编译一个包含两个或三个类的程序以及main,我不知道这是如何工作的. 我还可以使用javac命令吗?解决方法:理想情况下,您将使用构建系统,如Maven,ANT等 如果您只是编译当前工作目录中的类,并且您还没有使用过包,那么您可以非常愉快地使用它$javac *.java如果你已经使用了一些软件包(并将文件放在正确的软件包目录中),你可以使用$javac $(find . -...

java – 不可变对象的内存管理【代码】

我对于不可变对象的内存管理存在概念上的疑问,例如java和其他语言中的String对象.例如,如果我有一个String对象“str”,其值为“Hello”,我会执行以下操作:String str = "Hello"; str = str.concatenate("World");在这种情况下,据我所知,创建了一个状态为“Hello World”的新String对象,并将其引用回str.现在,在Java(以及大多数其他面向对象的语言)中,任何对象的生命周期都与其引用一样长.那么持有“你好”的对象去哪里了.它是否驻...

java中对象的内存管理【代码】

我正在读这本关于数据结构的书,它涵盖了Java中的内存管理和孤立对象.教科书说明如下:For example, consider the three assignment statements in the figure atleft. After the third assignment statement, not only do a and b referto the same Date object (1/1/2011), but also there is no longer areference to the Date object that was created and used to initialize b. The only reference to that object was in the...

java – 如何检查堆内存中创建的对象数?【代码】

我想看看在运行程序时Java创建了多少个对象. 我的意图是如果我使用代码String s = new String(“Hi”);我想看看Java将创建多少个对象.后来我想尝试使用String news =“Hi”; 这是我的示例程序:import java.util.Scanner;public class Test { public static void main(String[] args) {String str = new String("Hi");Scanner s = new Scanner(System.in);s.nextLine();} }我正在使用Scanner来避免程序终止. 我已经经历了这个SO Ho...

Java和虚拟内存:控制/影响哪些对象保存在主内存中?

我正在java中编写一个缓存服务器,它将缓存内存中的图像数据(jpgs,pngs,tiff等),以便通过http进行快速访问.图像由另一个服务呈现,这是一个昂贵的操作,所以我想将它们缓存在我的缓存服务器上. 我从头开始编写它有几个原因,所以我正在寻找的答案不是[一些聪明的软件产品] 问题:如何在主内存中保留一组数据对象,并确保数据在我需要时实际存在于主内存中,而不是由虚拟内存管理器推送到磁盘?也就是说,我怎么能用Java做到这一点? 更多信...

java – 如何找到导致内存泄漏的类?【代码】

我们在IBM J9 VM上运行weblogic服务器,堆大小为512M. 今天,服务器因OutOfMemory错误而失败. 我用Eclipse Memory Analyzer打开了堆转储文件xxx.phd(安装了IBM DTFJ pluign以支持.phd文件). MAT给我一个泄漏可疑报告,如下所示:One instance of "java.lang.Object[]" loaded by "<system class loader>" occupies 402,572,608 (74.86%) bytes. The memory is accumulated in one instance of "java.lang.String[][]" loaded by "<sys...

java – 实现一个行为类似于nginx的Undertow反向代理

出于开发目的,并非每个人都可以在他们的机器上安装nginx(比如我们在Windows环境中的开发人员),但我们希望能够执行类似于nginx的反向代理. 这是我们非常具体的案例: >我们在http://0.0.0.0:8081上运行了一个Spring Boot REST服务>我们在http://0.0.0.0:8082上运行了spring boot web应用程序 我们希望从http://0.0.0.0:8080开始提供这两项服务 所以我们想像这样映射它: >请求http://0.0.0.0:8080/代理到http://0.0.0.0:8082>请求ht...

如何在Ubuntu和Windows(Cygwin)中使用的bash脚本中设置Java类路径

我正在编写一个bash脚本,它应该执行一些需要特定类路径的Java应用程序. 此外,这个脚本应该可以在Ubuntu和Ubuntu上执行. Windows(Cygwin). 问题:Windows上的分隔符是“;” Ubuntu上的分隔符是“:”.这导致java -cp A.jar; B.jar Main在Windows上(当使用cygwin时,因为它使用Windows’java)和java -cp A.jar:B.jar Main在Ubuntu上. 问题:如何在bash脚本中检测哪个底层操作系统正在运行/使用哪个java classpath分隔符?解决方法:一...

java – 将包私有类导入JShell【代码】

在Java 9发布之后,我正在玩JShell,我尝试导入我制作的软件包.由于我编写的整个应用程序将包含在该包中,因此除了一个(我还没编码)之外的每个类都是包私有的.我的类路径是正确的,但我仍然不能使用JShell中的包中声明的任何类型(它会抛出“找不到符号”错误).我是否需要将它们公开以供它们访问,或者我是否可以通过某种方式测试包私有类?这是我试过的确切代码. 我目前的目录是C:\Users\Sylvaenn\OneDrive\Documents\Programs\Java\src...

Java虚拟机JVM之Java对象的创建、内存布局和访问【图】

这一小节将对 JVM 对 Java 堆中的对象的创建、布局和访问的全过程进行讲解。 一、对象的创建 1、类加载检查 虚拟机在解析.class文件时,若遇到一条 new 指令,首先它会去检查常量池中是否有这个类的符号引用,并且检查这个符号引用所代表的类是否已被加载、解析和初始化过。如果没有,那么必须先执行相应的类加载过程。 2、为新生对象分配内存 对象所需内存的大小在类加载完成后便可完全确定,接下来从堆中划分一块对应大小的内存空...

JVM内存结构、Java内存模型和Java对象模型【图】

Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文要讨论的JVM内存结构、Java内存模型和Java对象模型,这就是三个截然不同的概念,但是很多人容易弄混。 首先,这三个概念是完全不同的三个概念。本文主要目的是对这三个概念加以区分以及做简单的介绍。而这每一个知识点都是又都是比较复杂的。以后会单独写文章做详细介绍。 Jvm内存结...

java – 如果仍然引用其中一个属性,对象是否保留在内存中?【代码】

参见英文答案 > What happens when an object is dereferenced but its member object is still referenced? 3个让我们说这个巨大的对象包含大量其他巨大的对象作为其属性,但是一个属性是一个非常小的对象.class HugeObject {private HugeObject1 x1;private HugeObject2 x2;::private HugeObject1000 x1000;private SmallObject1 s1;public SmallObject1 getSmallObject(){return s1;} ...

java – 如何从内存中清除动态编译的类【代码】

我创建了一个类JavaRunner,它从字符串动态创建一个文件,在内存中编译它并运行它的main方法(我还创建了一个写入文件并将其编译在磁盘上的方法,结果类似). 我创建了另外两个叫跑步者的课程. 第一个是TerminalRunner,它将类名和源作为参数并调用JavaRunner.compile,这很好,因为它每次调用它时只运行一次. 第二个类是RunnerServlet,它启动一个小型Java服务器,它接收一个使用JavaRunner编译的post请求并运行代码并返回一个带有sys.out和...

如何打印java对象的内存使用情况【代码】

在以下问题中:Possible Spring Boot or Spring Security Memory Leak 用户按如下方式打印java对象:num #instances #bytes class name ----------------------------------------------1: 395984 32564344 [C2: 388697 9328728 java.lang.String3: 61258 5915088 [B4: 100297 4814256 java.util.HashMap5: 50892 4478496 org.apache.c...

java – 对象和字符串相等和内存digrams【代码】

我在理解这两者之间的区别时遇到了一些麻烦: 假设我们有:String x = "Test";String y = x;y = "Not Test"; //x is not modified here这两个步骤的内存图如下: > x-> “测试”> x-> “测试”< -y> x-> “测试”y-> “不测试” 但是,考虑使用字段’int var’的A类:A a = new A(); A b = a; b.var = 5; 在这里,如果我们修改b.var,a.var也会变为5.为什么这与字符串的上述情况不同? 另外,如果有人不介意为字符串和对象解释这些内存...

java – JShell如何查找变量或结果的类型【代码】

如何在JShell中查找变量或表达式结果的类型. 正在用Java试验Bitwise Operatorsjshell> byte b=5<<-1; | Error: | incompatible types: possible lossy conversion from int to byte | byte b=5<<-1; | ^---^jshell> 5<<-1 $2 ==> -2147483648jshell>是否有类似Python类型(5<< -1)的替代方法来在Jshell中查找表达式或变量的结果类型.解决方法:刚想通过设置反馈模式可以解决这个问题./set feedback verbose参考https://do...