小编Ark*_*tos的帖子

直接分配给Old Generation的巨大对象的大小

最近我一直在阅读Java中不同代的对象分配.大多数时候,新对象在Eden(Young Generation的一部分)中分配,然后如果满足以下任何条件,它们将被提升为Old Generation.

(1)物体的年龄达到了终点阈值
(2)当从伊甸园(或)另一个幸存者空间(从)复制物体时,幸存者空间(到)已满

但也有一个特殊情况,即在旧世代中直接分配对象,而不是从年轻一代中提升.当我们尝试创建的对象很大(可能是几MB的数量级)时会发生这种情况.


有没有办法知道巨大/巨大物体的大小/限制?我知道G1垃圾收集器的巨大对象标准.我只想知道Java 6之前或之中的大小限制.

谢谢你的时间 :)

java garbage-collection jvm memory-management objectsize

21
推荐指数
3
解决办法
7287
查看次数

什么时候触发 Full GC?

按照我的理解:

次要GC

发生在年轻代的 GC 通常被称为 Minor,因为它需要更少的时间来完成,因为 live-set 通常很小(我说的是典型的 java 应用程序,考虑到弱世代假设)和一个数量较少的复制收集器要重新定位和重新映射的对象。

主要GC

发生在老一代中的 GC 通常称为 Major GC,因为它需要更多的时间来完成,因为 live-set 大部分是大的(与年轻代相比)并且它通常会压缩老一代,并且压缩时间随着老年代大小。

不幸的是,GC 日志将老年代收集报告为 Full GC,而仅收集老年代。但是在 Java 内存管理白皮书中,有一个 Full GC 的概念,其中收集整个堆。

A Full GC will be triggered whenever the heap fills up. In such a case the 
young generation is collected first followed by the old generation. If the 
old generation is too full to accept the content of the young generation,
the young generation GC is omitted and the …
Run Code Online (Sandbox Code Playgroud)

java garbage-collection memory-management

10
推荐指数
1
解决办法
2万
查看次数

为什么压缩的Oops为Object Header提供12个字节

这是在Java 6内存模型之后.在32位JVM中,对象的浅大小是

8 bytes (object header) + total of all instance variables + padding (optional)
Run Code Online (Sandbox Code Playgroud)

如果前两个术语没有加到8的倍数,则会有填充.

在64位JVM中,Shallow大小为

16 bytes (object header) + total of all instance variables + padding (optional)
Run Code Online (Sandbox Code Playgroud)

我的理解是这个Object头由2个单词组成(oracle hotspot VM)

  • 一个klass字
  • 一个标记词

在32位JVM上,对象头= 2*32位= 64位=
64位JVM上的8个字节,对象头= 2*64位= 128位= 16个字节

但使用CompressedOops,3低阶位被截断,因此应回8个字节在64位JVM对堆小于32场音乐会

但是当我使用JOL(Java对象布局)测试对象布局时,它显示了12个字节的Object头.

测试代码

public class App  {
    public static void main( String[] args )
    {
        System.out.println(System.getProperty("java.version"));
        System.out.println(VMSupport.vmDetails());
        System.out.println(ClassLayout.parseClass(A.class).toPrintable());
    } 
}

class A {
   int a; 
}
Run Code Online (Sandbox Code Playgroud)

产量

1.8.0_05
Running 64-bit HotSpot VM.
Using compressed references with 3-bit shift. …
Run Code Online (Sandbox Code Playgroud)

java objectsize memory-layout

6
推荐指数
1
解决办法
1058
查看次数

清理图像内容并删除嵌入的 Javascript

对于我们\xe2\x80\x99正在构建的图像上传API,是否有关于检查/清理恶意内容的指导?

\n

我\xe2\x80\x99在互联网上看到过一些例子,我们可以在图像中添加JavaScript并将其上传到任何文件上传API。如果我们要使用其他地方的元素按原样渲染图像,则嵌入的 JS 代码将由浏览器执行。

\n

在寻找缓解建议时,我在 OWASP 文档中发现了此链接。他们的建议是使用 Apache Commons Imaging 库重写图像,但我\xe2\x80\x99m 不确定它\xe2\x80\x99s 是否得到积极维护(最后更新于 2020 年)

\n

是否有更好的方法来检测图像中嵌入的 JS(或者)某种在浏览器中渲染这些图像的安全方法以减轻存储的 XSS 攻击?

\n

感谢对此的任何帮助。

\n

javascript java security xss

2
推荐指数
1
解决办法
2098
查看次数

减少css代码

我创建了两个具有相同属性的类,但只有一个属性(宽度)不同,那么如何减少css代码?

.login-box button{
  width: 100%;
  height: 40px;
  background-color: #ffd133;
  color: #ffffff;
  text-transform: uppercase;
  font-size: 14px;
  font-weight: bold;
  border: 1px solid #ffd133;
  border-radius: 5px;
  cursor: pointer;
}


 .add-category-box button{
    width: 48%;
    height: 40px;
    background-color:#ffd133;
    color: #ffffff;
    text-transform: uppercase;
    font-size: 14px;
    font-weight: bold;
    border: 1px solid #ffd133;
    border-radius: 5px;
    cursor: pointer;
}    
Run Code Online (Sandbox Code Playgroud)

css

0
推荐指数
1
解决办法
33
查看次数